タイムアウト発行無限ループによるシャットダウン助けてください ?

こんにちは、私は私のコードの一部に問題があります。

未処理の注文保留中の注文をすべてクローズしようとしています。残念ながら、保留中の注文は削除され、最初の未処理の注文のみがクローズされます。

関数に挿入されたRefreshrates()が問題を解決しますか。ありがとう。

while(MyOrdersTotal(Magic)!= 0)
{
CloseOrders(マジック)。
DeletePendingOrders(マジック)。
}

これがその機能です。

int DeletePendingOrders(intマジック)
{
int total = OrdersTotal();

(int cnt = total-1; cnt> = 0; cnt–)の場合
{
OrderSelect(cnt、SELECT_BY_POS、MODE_TRADES);
if(OrderMagicNumber()== Magic && OrderSymbol()==ペア&&(OrderType()== OP_BUYLIMIT || OrderType()== OP_SELLLIMIT))
{
while(IsTradeContextBusy()||!IsTradeAllowed())Sleep(2000);
OrderDelete(OrderTicket());
}
}
(0)を返します。
}

int CloseOrders(intマジック)
{
int total = OrdersTotal();

(int cnt = total-1; cnt> = 0; cnt–)の場合
{
O rderSelect(cnt、SELECT_BY_POS、MODE_TRADES);
if(OrderMagicNumber()== Magic && OrderSymbol()==ペア)
{
if(OrderType()== OP_BUY)
{
while(IsTradeContextBusy()||!IsTradeAllowed())Sleep(2000);
OrderClose(OrderTicket()、OrderLots()、入札、3);
}

if(OrderType()== OP_SELL)
{

while(IsTradeContextBusy()||!IsTradeAllowed())Sleep(2000);
OrderClose(OrderTicket()、OrderLots()、Ask、3);
}
}
}
(0)を返します。
}


MyOrdersTotal()関数も表示できますか?

また、実行時間が2.5秒に制限されているため、コードがinit()また deinit()に配置されていないことを確認してください。


これがMyOrdersTotal()関数です。

int MyOrdersTotal(intマジック)
{
int z = 0。

for(int cnt = 0; cnt <OrdersTotal(); cnt )
{
OrderSelect(cnt、SELECT_BY_POS、MODE_TRADES);
if(OrderMagicNumber()== Magic && OrderSymbol()==ペア)z ;
}
return(z);
}

そしてそれはinit()やdeinit()にはありません。

ご協力いただきありがとうございます。


(FORループとは異なり)ループが適切に終了する保証がないWHILEループの場合は、ループを確実に終了させるために追加のカウンターを含める必要があります。

また、スリープを含め、サーバー上の他のユーザーにも気をつけてください。

例えば:

カウンタ= 0。
too_many = 50;
while(MyOrdersTotal(Magic)!= 0 && counter <too_many)
{
CloseOrders(マジック)。
DeletePendingOrders(マジック)。
睡眠(2000)
counter ;
}


Bid / Askが正しいように、あなたは寝るたびに、そして複数のアクションの間に(close / delete)更新を使わなければなりません。



4223: https://www.mql5.com/en/forum/121399


Originally posted 2019-08-04 00:59:25.

Translate »