//+----------------------------------------------------------------------------+datetime SecondsAfterOpenLastPos(int op, int mn) {
datetime t=0;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS)) {
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()!=op) continue;
if (OrderMagicNumber()!=mn) continue;
if (t<OrderOpenTime()) t=OrderOpenTime();
}
}
return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+
つまり、最後の買いポジションのオープンから何秒後かをMagicで確認するためには
if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
// Можно открывать следующий
}
//+----------------------------------------------------------------------------+datetime SecondsAfterOpenLastPos(int op, int mn) {
datetime t=0;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS)) {
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()!=op) continue;
if (OrderMagicNumber()!=mn) continue;
if (t<OrderOpenTime()) t=OrderOpenTime();
}
}
return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+
つまり、最後の買いポジションのオープンから何秒後かをMagicで確認するためには
if (SecondsAfterOpenLastPos(OP_BUY, Magic)>3600) {
// Можно открывать следующий
}
//+----------------------------------------------------------------------------+datetime BarsAfterOpenLastPos(int op, int mn) {
datetime t=0;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS)) {
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()!=op) continue;
if (OrderMagicNumber()!=mn) continue;
if (t<OrderOpenTime()) t=OrderOpenTime();
}
}
return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+datetime BarsAfterOpenLastPos(int op, int mn) {
datetime t=0;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS)) {
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()!=op) continue;
if (OrderMagicNumber()!=mn) continue;
if (t<OrderOpenTime()) t=OrderOpenTime();
}
}
return((TimeCurrent()-t)/60/Period());
}
//+----------------------------------------------------------------------------+
そうかもしれませんね。
他の考えが浮かばない...。
行間を読んでいるんですね。とにかく、最初にループに入れたものを見てください。ループのアクションゾーン...
こんにちは!この条件ではうまくいきません。
OrderCloseTime()!=hour()
1時間に1つ以上の注文を開けないようにして欲しい!
すべて同じ注文が開かれています
こんにちは!この条件ではうまくいきません。
OrderCloseTime()!=hour()
1時間に1つ以上の注文を開けないようにして欲しい!
でも、全部同じ注文が開かれている! どうしたんだろう?
まず、OrderCloseTime() - これは注文が終了した時刻です。注文が閉じられていない場合は、0に等しい。開封の時を見る必要があります。
2つ目はHour() - EA開始の時間であり、この時間はプログラムの実行 中に変更されない。最後の見積もり到着時刻と比較する必要があります - TimeCurrent()
説明: 現在のシンボルの最後の位置が開かれてから何秒後かを返す。
つまり、最後の買いポジションのオープンから何秒後かをMagicで確認するためには
第一:OrderCloseTime()は、注文を閉じる時間です。注文が閉じられていない場合は、0に等しい。オープンタイムを見る必要があります。
2番目。Hour() - Expert Advisorの開始時間であり、この時間はプログラムの実行 中に変更されることはありません。最後の見積もり到着時刻と比較する必要があります - TimeCurrent()
説明: 現在のシンボルの最後の位置が開かれてから何秒後かを返す。
つまり、最後の買いポジションのオープンから何秒後かをMagicで確認するためには
機能ありがとうございます!もう一つないんですか!1つのバーに1つしか注文が出ないように?ありがとうございます!もう一つ、1つのバーで1つのオーダーしか開けないようにする機能はないのでしょうか?
同じように、秒数ではなく、バー 数だけをチェックします。
同じように、秒数ではなく、バー数 だけをチェックする
でも、TPで注文を閉じると、すぐに新しい注文が始まってしまうんです。
同じように、秒数ではなく、バー数だけをチェックします。
しかし、TPで注文が終了すると、即座に新しい注文が始まります。 どうすれば直るのでしょうか?
そこで、最後の注文が終了してから何本目の 注文なのか、もう一回確認する必要があります。