下方向に任意の本数の平行線を描画できるようにコードを書き直します。ここでは、関数に「平行線の本数」を指定するパラメータを追加し、その本数だけ下方向に平行線を描画するようにします。
以下のコードでは、中央ラインを基準にして、指定された本数分の平行線を下方向に引くようになっています。
//+------------------------------------------------------------------+
//| 任意の本数だけ下方向に平行ラインを引く関数 |
//+------------------------------------------------------------------+
void CreateLowerParallelLines(string name, datetime time1, double price1, datetime time2, double price2, double distance, int lineCount) {
// 中央ラインを作成
string centerLineName = name + "_Center";
if (!ObjectCreate(0, centerLineName, OBJ_TREND, 0, time1, price1, time2, price2)) {
Print("中央ライン作成失敗: ", GetLastError());
return;
}
ObjectSetInteger(0, centerLineName, OBJPROP_COLOR, clrGreen);
ObjectSetInteger(0, centerLineName, OBJPROP_WIDTH, 2);
// 下方向に任意の本数の平行ラインを作成
for (int i = 1; i <= lineCount; i++) {
string lowerLineName = name + "_Lower_" + IntegerToString(i);
if (!ObjectCreate(0, lowerLineName, OBJ_TREND, 0, time1, price1 - (distance * i), time2, price2 - (distance * i))) {
Print("下ライン " + IntegerToString(i) + " 作成失敗: ", GetLastError());
return;
}
ObjectSetInteger(0, lowerLineName, OBJPROP_COLOR, clrRed);
ObjectSetInteger(0, lowerLineName, OBJPROP_WIDTH, 1);
}
Print("下方向に", lineCount, "本の平行ライン作成成功");
}
//+------------------------------------------------------------------+
//| 下方向の平行ラインテスト |
//+------------------------------------------------------------------+
void OnStart() {
// 開始と終了の座標を指定(例: 日時と価格)
datetime time1 = iTime(NULL, 0, 20);
double price1 = iClose(NULL, 0, 20);
datetime time2 = iTime(NULL, 0, 0);
double price2 = iClose(NULL, 0, 0);
// ライン間の間隔(価格差)
double distance = 0.001;
// 描画する平行ラインの本数
int lineCount = 5; // 任意の本数を指定
// 下方向の平行ラインを作成
CreateLowerParallelLines("MyChannel", time1, price1, time2, price2, distance, lineCount);
}
コードのポイント
- CreateLowerParallelLines関数:
- パラメータに
lineCount
を追加し、指定された本数だけ平行ラインを描画します。 distance
で設定された間隔を基に、下方向に平行ラインを1本ずつ追加していきます。
- 中央ラインの作成:
- 中央ラインは基準ラインとして描画し、これを基にして下方向の平行線を作成します。
- 平行ラインの数を指定:
lineCount
を任意の数に設定することで、必要な本数だけ平行ラインを作成可能です。
このコードで、任意の本数の平行ラインが下方向に描画されます。