Вопрос к MetaQuotes Software

 
Вопрос к MetaQuotes Software
Помогите, если это возможно!
Как сделать, чтобы эксперт удалял отложенные ордера если предыдущая позиция закрылась по Stop Loss ? Заранее благодарен за помощь!
Денис. kupriyanov_denis@inbox.ru
 
гарантированного способа нет, к сожалению
Позиции по стоплоссу закрывает сервер без явного уведомления клиента. Клиент может узнать об закрытии только по исчезновению позиции из терминала и появлению закрытой позиции в истории сделок.
 
Вопрос к MetaQuotes Software
Большое спасибо за ответ! Сразу же рождается второй вопрос: "А можно ли сделать так, чтобы эксперт удалял отложенные ордера если баланс уменьшился на определённую сумму?"
Если это возможно, будте добры напишите как!!!
Заранее благодарен за ответ!
 
сделать можно
Это в принципе сделать легко. Запомните баланс в переменной(лучше даже глобальной) и потом при каждом вызове эксперта проверяйте - как она изменилась.
 
Вопрос к MetaQuotes Software
Будте добры, если вас не затруднит, напишите пример строки, когда баланс уменьшается на какое-либо значение и отложенный ордер удаляется! У меня что-то никак не выходит!
Зарание благодарен!
 
например так

if prevBalance < Balance-Delta and bPendingOrdersToBeDeleted=False then bPendingOrdersToBeDeleted=True;
...
if bPendingOrdersToBeDeleted and TotalTrades>0 then begin
for cnt=1 to TotalTrades begin
if OrderValue(cnt,VAL_TYPE) > OP_SELL then begin
DeleteOrder(OrderValue(cnt,VAL_TICKET),0);
Exit;
end;
end;
bPendingOrdersToBeDeleted=False;
end;
 
ошибся с условием. должно быть наоборот - "prevBalance-Balance>Delta"
 
Вопрос к MetaQuotes Software
// описание
Var: prevBalance(0);
prevBalance=Balance;
// правильно ли?

и я не понял что за переменная "bPendingOrdersToBeDeleted" и как её описать! (Версия MetaTrader 3.02)
 
Вопрос к MetaQuotes Software
// описание
Var: prevBalance(0);
prevBalance=Balance;
// правильно ли?

и я не понял что за переменная "bPendingOrdersToBeDeleted" и как её описать! (Версия MetaTrader 3.02)
Спасибо!
Денис
 
Вопрос к MetaQuotes Software
// как будет в данном случае?

defines: MATrendPeriod(40),MATrendPeriod1(98),MATrendPeriod2(180);
var: MaCurrent(0),MaPrevious(0),MaCurrent1(0),MaPrevious1(0),MaCurrent2(0),MaPrevious2(0),MaPrevious00(0),MaPrevious11(0),prevBalance(0);
var: cnt(0);

If Bars<200 or TakeProfit<10 then Exit;

MaCurrent=iMA(MATrendPeriod,MODE_EMA,0);
MaPrevious=iMA(MATrendPeriod,MODE_EMA,1);
MaCurrent1=iMA(MATrendPeriod1,MODE_EMA,0);
MaPrevious1=iMA(MATrendPeriod1,MODE_EMA,1);
MaCurrent2=iMA(MATrendPeriod2,MODE_EMA,0);
MaPrevious2=iMA(MATrendPeriod2,MODE_EMA,1);

MaPrevious00=iMA(MATrendPeriod,MODE_EMA,2);
MaPrevious11=iMA(MATrendPeriod1,MODE_EMA,2);

prevBalance=Balance;

If TotalTrades<1 then
{
If FreeMargin<1000 then Exit;

If ........... then
{
SetOrder(OP_SELLLIMIT,Lots,Bid+20*Point,3,Ask+(stoploss+20)*Point,Bid-TakeProfit*Point,RED)
and
SetOrder(OP_SELL,Lots,Bid,3,Ask+stoploss*Point,Bid-(TakeProfit-90)*Point,RED)
and
SetOrder(OP_BUYLIMIT,Lots,Ask-60*Point,3,Bid-(stoploss+60)*Point,Ask+(TakeProfit-140)*Point,RED); // исполняем
Exit;
};

If ................ then
{
SetOrder(OP_BUYLIMIT,Lots,Ask-20*Point,3,Bid-(stoploss+20)*Point,Ask+TakeProfit*Point,RED)
and
SetOrder(OP_BUY,Lots,Ask,3,Bid-stoploss*Point,Ask+(TakeProfit-90)*Point,RED)
and
SetOrder(OP_SELLLIMIT,Lots,Bid+60*Point,3,Ask+(stoploss+20)*Point,Bid-(TakeProfit-140)*Point,RED); // исполняем
Exit;
};

Exit;
};


if prevBalance-Balance>84 and bPendingOrdersToBeDeleted=False then bPendingOrdersToBeDeleted=True;
if bPendingOrdersToBeDeleted and TotalTrades>0 then begin
for cnt=1 to TotalTrades begin
if OrderValue(cnt,VAL_TYPE) > OP_SELL then begin
DeleteOrder(OrderValue(cnt,VAL_TICKET),0);
Exit;
end;
end;
// спасибо!
Причина обращения: