int start()
{
string scrdate,nametf;
if (Period()==PERIOD_M1) nametf="9_M1";
if (Period()==PERIOD_M5) nametf="8_M5";
if (Period()==PERIOD_M15) nametf="7_M15";
if (Period()==PERIOD_M30) nametf="6_M30";
if (Period()==PERIOD_H1) nametf="5_H1";
if (Period()==PERIOD_H4) nametf="4_H4";
if (Period()==PERIOD_D1) nametf="3_D1";
if (Period()==PERIOD_W1) nametf="2_W1";
if (Period()==PERIOD_MN1) nametf="1_Monthly";
///////////////// for(int i = ObjectsTotal()-1; i >= 0; i--)//мониторим все объекты
{
string name = ObjectName(i);//имя объектов берем из i переменной
scrdate=StringConcatenate(Symbol()," ",TimeToStr(TimeCurrent(), TIME_DATE),"_",Hour(),".",Minute()," ",nametf," ",".jpg");//,nameif(ObjectType(name) == OBJ_TREND)//отбираем тип по имени
{
double value = ObjectGetValueByShift(name, 0);//функция для объектовComment("\n\n Alert running \n ", TimeToStr(TimeLocal(), TIME_DATE|TIME_SECONDS),"\n\n M",Period()," ",name);
if(Bid <= value + Point && Bid >= value - Point)
{
if (LastAlertTime < Time[0]){
LastAlertTime = Time[0];
Alert(Symbol()," M",Period()," ",name);
/////////////////////////////////////////////////
WindowScreenShot(scrdate,1920,1200,0,-1,-1);
////////////////////////////////////////////////////////
}
}
}
}
return(0);
}
EAは取引後、33本のバーで終了します。
実機でもテスターでも43本で終了しました。5本目のバーで終了パラメータを設定してみましたが、すべて正常です。このような場合、どのような問題が考えられますか?
EAは取引後、33本のバーで終了します。
実機でもテスターでも43本で終了しました。5本目のバーで終了パラメータを設定してみましたが、すべて正常です。このような場合、どのような問題が考えられますか?
もしかしたら、if (条件)が 何度も実行され(例えば10バーでもう一回)、この実行によってライフタイムが遅れたのでは?
多分、if (条件) が何度も実行され (例えば 10 bar でもう一回) 、その実行によってライフタイムが遅れたのでしょう。
1トレード:エントリー15:37、エグジット16:19。41本のバーで終了、が正しい。
また、iBarShiftに 置き換えた場合、エラーは残らないのでしょうかね?ヒストリーのバーが欠けているのでは(確かに穴はない?
条件が満たされた後に入力し、オープンバーを数え、時間を参照することは非常に正しくないので、それらのいくつかは、実際に開かれた参照してください。
iBarShiftに 置き換えたら、エラーは残るのかな?ヒストリーにスキップバーがあるのかも(確かに穴はない)?
条件が満たされた後、時間を参照することは正しくないと思われるので、オープンバー数を入力し、実際に何本のバーが開いているかを確認します。
このようなコードにすべきでしょうか?
このようなコードはExpert Advisorをロックします。
こんにちは、最初の行だけでなく、各行のバーごとに1回アラートを通過させるのを手伝ってくれませんか。
時間によるアラート数を制限していますが、1バー分のバッファの作り方がわかりません
datetime LastAlertTime = 0;
EAは取引後、33本のバーで終了します。
実機でもテスターでも43本で終了しました。5本目のバーで終了パラメータを設定してみましたが、すべて正常です。どのような問題があると思われますか?
まずは頭をスッキリさせることから始めましょう。
フラグOpn_B = trueの 時間は、注文が同じ秒に開くとは限らないので、 何の意味も持ちません。
注文のOrderOpenTimeの 開始時刻を使うこともできますし、開始が成功した後の時刻の値を変数tに代入することも可能です。
次ページ:使用したことがあるのは
1)iLowは 必要ですか、それとも同じ通貨とタイムフレームを使うならLowだけの 方が良いのでしょうか?
2)Symbol()、 Period() の値は、繰り返し使用する場合は、変数に入れた方が良い。すべては性能に影響する-慣れろ
分足チャート - 1分間、1ティックがなかった場合 - 新しいバーは描画されません(トリックかもしれません)。
また、iBarShiftについてはどうでしょうか。
現時点で最も適切なのは、次のようなものだと思われます。
こんにちは、最初の行だけでなく、各行のバーごとに1回アラートを通過させるのを手伝ってくれませんか。
時間によるアラート数を制限していますが、1バー分のバッファリングがわかりません
変数を刻々と評価し直すことに意味があるのでしょうか?
文字列 tf = Period() は1000000ループ実行時のパフォーマンスに影響しますか、それとも inttf = Period()の方がより正しいですか? 自分でもよくわからない。
この条件でよいのでしょうか?また、ループに4つのピークがある場合はどうでしょうか?
ここで、もう一つ問題があります。つまり、1行目の条件が成立すれば、2行目の条件は明らかに偽となり、アラートはポップアップされないのです。
ローソクの開始時刻が新しいローソクの到着によってのみ変更されるため、次のティックではポップアップさえしません。
現時点での最も適切な選択肢は、次のように思われます。
申し訳ありませんが、時間でバーの 数を計算しようとするのは、非常に不十分な方法です。
tick毎に変数を再コード化する意味があるのでしょうか?
文字列 tf = Period() は 1000000 回のループ実行でパフォーマンスに影響しますか? それとも inttf = Period() の方が正しいですか? 自分でもよくわからない。
この条件でよいのでしょうか?また、ループに4つのピークがある場合はどうでしょうか?
ここで、もう一つ問題があります。つまり、1行目の条件が成立すれば、2行目の条件は明らかに偽となり、アラートはポップアップされないのです。
ローソクの開始時刻が新しいローソクの到着で変わるだけなので、次のティックでポップアップすることもありません。
1.削除された
2.ギャップがシグナルでない(はず)なら、シグナルなし→価格なし→トレードなし、に同意します。
3.これは上で言ったことですが、どうしたらいいのか
PS 返信ありがとうございました。