間違っていたら説明してください、スクリプトコード_"void SetArrow(int cd, color cl," の後半は、インジケータ内の「_OnInit()」 関数を参照している部分だと思います。.インジケーターで、スクリプトの最初の部分_"voidOnStart()"は、インジケーター内の関数 "_OnCalculate " を指しているのでしょうか。つまり、大雑把に言うと、スクリプトには最初に1)計算があり、その後2)初期化のみということです。インジケーターではその逆です。
他の機能の範囲外であるユーザー定義関数です。
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//| Описание : Установка значка на графике, объект OBJ_ARROW. |//+----------------------------------------------------------------------------+//| Параметры: |//| cd - код значка |//| cl - цвет значка |//| nm - наименование ("" - время открытия текущего бара) |//| t1 - время открытия бара (0 - текущий бар) |//| p1 - ценовой уровень (0 - Bid) |//| sz - размер значка (0 - по умолчанию) |//+----------------------------------------------------------------------------+void SetArrow(int cd, color cl,
string nm="", datetime t1=0, double p1=0, int sz=0) {
if (nm=="") nm=DoubleToStr(Time[0], 0);
if (t1<=0) t1=Time[0];
if (p1<=0) p1=Bid;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
ObjectSet(nm, OBJPROP_TIME1 , t1);
ObjectSet(nm, OBJPROP_PRICE1 , p1);
ObjectSet(nm, OBJPROP_ARROWCODE, cd);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_WIDTH , sz);
}
longBarsBuffer[i]=High[h]+5*Point(); - то что необходимо получить.
else
longBarsBuffer[i]=0.0;
さらに
機能
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 26.02.2008 |//| Описание : Возвращает реальный номер бара от начала суток. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| dt - дата и время открытия бара ( 0 - текущее время) |//+----------------------------------------------------------------------------+int iBarOfDayReal(string sy="", int tf=0, datetime dt=0) {
if (sy=="" || sy=="0") sy=Symbol();
if (tf<=0) tf=Period();
if (dt<=0) dt=TimeCurrent();
if (tf>PERIOD_D1) {
Print("iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1");
return(0);
}
int cd=TimeDay(dt); // текущий день месяцаint nb=iBarShift(sy, tf, dt, False); // номер текущего бараint bd=0; // номер бара от начала сутокwhile(TimeDay(iTime(sy, tf, nb))==cd) {
nb++;
bd++;
}
return(bd);
}
親愛なる友人たちへ、私が何を目指しているのか、できる限り説明しよう...。...あるいは、正しく理解するか......あるいは、みんなを混乱させるかだ!
...話を続けよう...。私が理解したところでは、タスクは次のように集約されます。簡略化のため、上半期である昨日のみ調査する。
まず、昨日のチャートの左側から見て、終値が始値より高い、つまり最初の強気なローソク足を探します。もしこれが見つかったら、そこから(それを含めて)現在の日の最新のローソク足まで、最も高いHighを持つローソク足を見つける必要があります。例えば、最初の強気ローソクの開始 時間が10:00であれば、そこから23:00のローソクまで、我々は最高のHighを持つローソクを探す必要があります。そうだろ?
話を続けて...私の理解では、この課題は次のように還元されます。簡略化のため、昨日の日、H1期のみの検証を行う。
まず、昨日のチャートの左側から見て、最も古いローソク足の終値が始値より高いもの、つまり最初の強気なローソク足を探します。もしこれが見つかったら、そこから(それを含めて)現在の日の最新のローソク足まで、最も高いHighを持つローソク足を見つける必要があります。例えば、最初の強気ローソクの開始時間が10:00であれば、そこから23:00のローソクまで、我々は最高のHighを持つローソクを探す必要があります。そうだろ?
ああ、よかった...。理解された!?はい。はい。はい。それこそが私の目指すところです。もしご存知でしたら、その方法を教えていただけませんか?
ああ、よかった...。やったぜ!はい。はい。はい。それこそが私の目指すところです。もしご存知でしたら、その方法を教えていただけませんか?
昨日のローソク足であれば、iHigest()で終了ローソク足となり、iBarShift() で取得した翌日の00:00(つまり今日のローソク足)がスタートローソク足となります。
アルゴリズムの例
1.今日は、昨日の時間足の中で、最初のブルバーを探します。endBarのインデックスとする
今日最初の1時間バーを決定する。あるいはゼロになる。
3.iHighest()では、最後から2番目のパラメータをendBar(正確にはendBar +1)とし、最後のパラメータを1として設定します。
求められた結果は High[iHighest(with relevant parameters)] // あるいは,前の節で値が代入された対応する変数です.
ああ、よかった...。理解された!?はい。はい。はい。それこそが私の目指すところです。もしご存知でしたら、その方法を教えていただけませんか?
SCREPT!を試しています。
r772ra ありがとう ございました!!!!このスクリプトは私が必要とすることを行ってくれます!最後のコードのブロックでは、すべてが明確ではありませんが、私はそれを把握します。何とかします。インジケーターで使ってみようと思います。
インジケータに使ってみようと 思います。
今後、何か質問があれば、プログラマーが理解しやすいように書いてください。了解です!参考にさせていただきます。
ありがとうございました。
r772ra ありがとうございました!!!!このスクリプトは私が必要とすることを行ってくれます!最後のコードのブロックでは、すべてが明確 ではありませんが、私はそれを把握します。要は、「動く」ということです。インジケーターに応用してみます。
わかりました、考慮します!
ありがとうございました。
まさに、何が明確でないのか?
間違っていたら説明してください、スクリプトコード_"void SetArrow(int cd, color cl," の後半は、インジケータ内の「_OnInit()」 関数を参照している部分だと思います。.インジケーターで、スクリプトの最初の部分_"void OnStart()"は、インジケーター内の関数 "_OnCalculate " を指しているのでしょうか。つまり、大雑把に言うと、スクリプトには最初に1)計算があり、その後2)初期化のみということです。インジケーターではその逆です。
間違っていたら説明してください、スクリプトコード_"void SetArrow(int cd, color cl," の後半は、インジケータ内の「_OnInit()」 関数を参照している部分だと思います。.インジケーターで、スクリプトの最初の部分_"void OnStart()"は、インジケーター内の関数 "_OnCalculate " を指しているのでしょうか。つまり、大雑把に言うと、スクリプトには最初に1)計算があり、その後2)初期化のみということです。インジケーターではその逆です。
他の機能の範囲外であるユーザー定義関数です。
関数呼び出し、他の関数から
インジケータには必要ないと思います、バッファは描画を 担当します
つまりは
さらに
機能
そして、その呼びかけ
は、一日の始まりから何本目のバーかを 求め(現在の日は再計算されません)、そのバーが履歴に入ります。