OrderType()==(OP_BUYSTOP||OP_SELLSTOP) && // The order selected is either a pending buy on stop order or a buy on sell orderOrderMagicNumber()==(Mnumber1||Mnumber1)) // The orders magic number is the same as the magic number used in this ea
私はあなたがこれを行う必要があると思います.
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber2)) // The orders magic number is the same as the magic number used in this ea
externstring sComment4 = "Max Hours allowed before pending orders are deleted";
externint pendinglimit = 4;
// * EVERYTIME A TRADE GETS TRIGGERED
bartraded = TimeHour(TimeCurrent());
if(TimeHour(TimeCurrent()) > (bartraded + pendinglimit) && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
externstring sComment4 = "Max Hours allowed before pending orders are deleted";
externint pendinglimit = 4;
// * EVERYTIME A TRADE GETS TRIGGERED*
bartraded = 0;
if (Time0 == Time[0]) return; Time0 = Time[0]; // make sure each bar is only scanned once
{
//-----------------------------------------------------------------------------------------------------------------------------------------------//TRADE COUNTER
bartraded++; // Each time a new bar opens add 1 to the counter//------------------------------------------------------------------------------------------------------------------------------------------------// DELETE PENDING ORDERS THAT HAVE NOT BEEN TRIGGERED WITHIN 'pendinglimit'if(bartraded > pendinglimit && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
staticdatetime tradeopened;
//Everytime a trade is opened I run
tradeopened = TimeCurrent();
if((iBarShift(hothand(),60 ,tradeopened)>pendinglimit) && Tradeopen()==true) // Check to see if pending orders have expired
{
for(int tnumber = OrdersTotal()-1; tnumber >= 0 ; tnumber--) //scan through open orders
{
if (OrderSelect(tnumber, SELECT_BY_POS) &&
((OrderType()==OP_BUYSTOP)|| (OrderType()== OP_SELLSTOP)) && // The order selected is either a pending buy on stop order or a buy on sell order
((OrderMagicNumber()== Mnumber1) || (OrderMagicNumber()==Mnumber3))) // The orders magic number is the same as the magic number used in this ea
{
OrderDelete(tnumber); // Delete it
}
}
}
私は試したことがありませんが、有効とは思えません.
私はあなたがこれを行う必要があると思います.
私がこれを考える理由は ... ... これは何に相当するのでしょうか?(OP_BUYSTOP||OP_SELLSTOP) 変数がbool ならうまくいくかもしれませんが ...intでは うまくいかないと思うんです。
一つ細かいことですが、OderDeleteの前にOderSelectは必要ありません。一般的には、OrderComment( )、 OrderCommission( )などのように、int型 チケットを使用しないオーダー関数を 使用する場合のみ、OderSelectが必要になります。
OK ロジックを修正しました。しかし、まだ注文が削除されません。
前にも書きましたが、私はバーからカウンターを時々変えていました。
OK ありがとうRaptor、私の投稿のコードを更新しました。カウンターにバーを使うのは良くないと皆さんが言っていたのを思い出して、バータイムを使うように変更しました。ロジックを修正して、うまくいくかどうか見てみます。
は事実ですが、このコメントがなされた時の文脈を見る必要があります ... ... Barsは 信頼性が低い ... .
しかし、それは時間数の代わりに棒グラフを使えないということではありません。 例えば、あなたのコードは金曜日の 夕方から日曜日にかけてどのように対処しますか?pendinglimitは 4時間または4小節に相当しますか?
また、22:00に取引が行われた場合、これはどうなりますか? 22 + 4 = 26 ?
なるほど、時間軸の問題ですね。しかし、もしバーをカウンターとして使うなら、チャートが最大バー 数に達すると、そこでも失敗するのでは?
また何か考えてみます。
OK このようなアプローチはいかがでしょうか?
なるほど、時間軸の問題ですね。しかし、カウンターとしてバーを使用する場合、チャートが最大バー数に達すると、そこでも失敗するのでは?
いいえ、現在のH1バーは常にバー0です。60分後、現在のH1バーはバー0になります。バーの問題は、バー、 つまりチャート上のバーの 合計数を使うか、チャートの左端のバーを見ているかです。
TimeHour(TimeCurrent()) のバー番号は0です。取引が行われた時間のバー番号をiBarShiftを使って 取得し(これは保存しないで計算する必要があります!!)、次のようにします ... ...
3度目の正直で、あなたの言わんとすることが理解できるまで時間がかかりました。そこで、私が行ったことは以下の通りです。しかし、注文はまだ削除されません >:(
tradeopened = TimeCurrent()
は私にバーの開始 時間を与えることはありません 私はTime[0]を使用しなければなりませんか?これを試してみてください ;-)