トレンドラインを使う人は必見
現在の価格がトレンドラインにタッチしたかどうかを判定したいことがありまして、「現在足でのトレンドラインの価格を取得できればいいんだけど、そんな都合の良い関数はないよね~」って勝手に決めつけていて、必死こいて何十行ものオリジナル関数を自作しました。
しかし、ある時、特定の日時(ローソク足)におけるトレンドラインの価格を取得できる便利な組込関数を発見!
その名もObjectGetValueByShift関数。
ObjectGetValueByShift関数に、価格を取得したトレンドラインのオブジェクト名とshift(現在足を0として、何本前のローソク足における価格を取得したいか)を渡してあげれば、その位置での価格を返してくれます。
こんな感じで超便利です。

雑なコードで恐縮ですが、上記のサンプルコードを載せておきます。
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// トレンドラインのオブジェクト名
// MT4でトレンドラインを引いて名前を「Trendline」に変更すれば認識してくれます
string objectName = "Trendline";
// 現在足
int shift = 0;
double price = ObjectGetValueByShift(objectName, shift);
ObjectCreate(0, "PriceLabel", OBJ_ARROW, 0, Time[0], price);
ObjectSetInteger(0, "PriceLabel", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
ObjectSetDouble(0, "PriceLabel", OBJPROP_PRICE, price);
return(rates_total);
}
逆に価格から特定の日時(ローソク足)を調べることはできるの?
と思った方、素晴らしい発想です。
答えは「できる」です。
ObjectGetShiftByValue関数を使います。
※関数名のShiftとValueの位置が逆転している点に注目
厳密には日時ではなく、ローソク足の位置を示すshiftが得られますが、Time[shift]等とすれば、日時にすぐに変換できます。
組込関数には便利なものが色々あります。
組込関数を上手に活用していきましょう。
そうすればプログラミングの時間をもっと短縮できるでしょう。
