как из эксперта закрыть несколько ордеров СРАЗУ?

 
как из эксперта закрыть несколько ордеров СРАЗУ?
ЦИТАТА из описания MQL:

После открытия, закрытия или изменения позиции или после удаления отложенного ордера (после любой из команд SetOrder, CloseOrder, ModifyOrder или DeleteOrder) рекомендуется завершить выполнение программы-эксперта инструкцией Exit, т.к. после совершения операции наступает 10-ти секундный таймаут на совершение торговых операций.
 
Заранее извиняюсь, но в этом случае Вам поможет першинг или сс20 в сторону брокера ;)
 
Нда... Вопрос из разряда - вот пишут, что так сделать нельзя (невозможно), а как все-таки это сделать?
 
почему нельзя проводить несколько торговых операций подряд
моногократно уже обсуждали. пока не будет обработан предыдущий запрос, следующие запросы просто отбрасываются, даже не ставятся в очередь. Вы можете попытаться закрыть подряд несколько сделок, только на обслуживание возьмётся только первый запрос! по поводу10-секундного интервала. эта цифра не абсолютна. Вам просто надо выяснить время, за которое происходит обслуживание запроса и использовать его в качестве значения задержки. мы публиковали на форуме пример "как закрыть все позиции а потом открыться в другую сторону". в том примере была использована 30-секундная задержка. полистайте архивы.
 
MetaQuotes Software КОСЯК В ПРИМЕРЕ?????? ИЛИ НЕТ????
ПРОВЕРЬТЕ В ЭТОМ ПРИМЕРЕ, КОТОРЫЙ ВЫ ПРИВОДИТЕ, ЦЕНУ ИСПОЛНЕНИЯ УКАЗАННУЮ В CLOSEORDERар
почему закрытие OP_BUY происходит по Ask
почему закрытие OP_SELL происходит по Bid

__________________________________________________________
вот пример, как закрыть все позиции и открыться в противоположную сторону - MetaQuotes Software, 20:21 09.09.03

/*[[
Name := MA20 cross
Author := Copyright © 2003, Metaquotes Software Corp
Link := https://www.metaquotes.net/
Lots := 1.00
Stop Loss := 0
Take Profit := 0
Trailing Stop := 0
]]*/

Variables: PrevTime(0);
Variables: MaCurrent(0),MaPrevious(0);
Variables: cnt(0),WasClosedSell(False),WasClosedBuy(False);

If PrevTime=Time And WasClosedSell=False And WasClosedBuy=False Then exit;
PrevTime=Time;

MaCurrent=iMA(20,MODE_SMA,1);
MaPrevious=iMA(20,MODE_SMA,2);

If (Close[2]>MaPrevious And Close[1]<MaCurrent And WasClosedSell=False) Or WasClosedBuy=True Then Begin
If Close[2]>MaPrevious And Close[1]<MaCurrent then print(TimeToStr(Time)," - Close crosses down MA20")
Else print(TimeToStr(Time)," - Some buy trades is to be closed");
if CurTime-LastTradeTime < 30 then Begin
print("Wait up to 30 seconds please");
Exit;
End;
For cnt=1 to TotalTrades Begin
If OrderValue(cnt,VAL_SYMBOL)=Symbol And
OrderValue(cnt,VAL_TYPE)==OP_BUY Then Begin
CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Ask,3,Violet);
WasClosedBuy=True;
Exit; // close only 1 order at same time! and exit
End;
End;
WasClosedBuy=False;
If Close[2]>MaPrevious And Close[1]<MaCurrent then Begin
SetOrder(OP_SELL,1,Bid,3,0,0,RED);
Exit;
End;
End;

If (Close[2]<MaPrevious And Close[1]>MaCurrent) Or WasClosedSell=True Then Begin
If (Close[2]<MaPrevious And Close[1]>MaCurrent) then print(TimeToStr(Time)," - Close crosses up MA20")
Else print(TimeToStr(Time)," - Some sell trades is to be closed");
if CurTime-LastTradeTime < 30 then Begin
print("Wait up to 30 seconds please");
Exit;
End;
For cnt=1 to TotalTrades Begin
If OrderValue(cnt,VAL_SYMBOL)=Symbol And
OrderValue(cnt,VAL_TYPE)==OP_SELL Then Begin
CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Bid,3,Violet);
WasClosedSell=True;
Exit; // close only 1 order at same time! and exit
End;
End;
WasClosedSell=False;
// open position at next time
If (Close[2]<MaPrevious And Close[1]>MaCurrent) then SetOrder(OP_BUY,Lots,Ask,3,0,0,GREEN);
End;
_______________________________________________________________________