Спрашивайте! - страница 38

 

Йен,

Проверьте эксперта Straddle&Trail. вы можете найти его здесь https://www.mql5.com/en/forum/general.

 

Привет всем,

Я хочу закрыть все мои ордера одновременно, но не могу.

Я попробовал этот код, но он не сработал:

''''''''''''''''''''''''''''''''''''''''

total = OrdersTotal();

for(i=0;i < total;i++)

{

if(OrderSelect(i, SELECT_BY_POS)==true)

{

OrderClose(OrderTicket(),OrderLots(),Ask,80,CLR_NONE);

OrderClose(OrderTicket(),OrderLots(),Bid,80,CLR_NONE);

}

}

''''''''''''''''''''''''''''''''''''''''

Может ли кто-нибудь помочь мне?

Я буду очень благодарен, если вы сможете мне помочь.

 

Мехди,

Поместите этот код (процедуру) вне секции start() и когда вы, если условие выполнено, закроете все сделки, просто вызовите процедуру таким образом:

int start()

{ // ваш код здесь .....

If (ваше условие здесь) ShutDownAllTrades();

}

void ShutDownAllTrades

{ int Retry;

While (OrdersTotal()>0)

{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_BUY)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);

Sleep(1000);

}

else if (OrderType()==OP_SELL)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);

Sleep(1000);

}

else

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

OrderDelete(OrderTicket());

Sleep(1000);

}

}

}

}

HTH

Яннис

 

Уважаемый Яннис,

Спасибо за вашу помощь.

Желаю вам всего наилучшего.

 
Yannis:
Мехди,

Поместите этот код (процедуру) за пределами секции start(), и когда, если условие выполнено, чтобы закрыть все сделки, просто вызовите процедуру таким образом:

int start()

{ // ваш код здесь .....

If (ваше условие здесь) ShutDownAllTrades();

}

void ShutDownAllTrades

{ int Retry;

While (OrdersTotal()>0)

{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_BUY)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);

Sleep(1000);

}

else if (OrderType()==OP_SELL)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);

Sleep(1000);

}

else

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

OrderDelete(OrderTicket());

Sleep(1000);

}

}

}

}

HTH

Яннис

Уважаемый Яннис,

Я добавил вашу процедуру между " int deinit() { } " (вне начала), как вы сказали, но есть проблема при компиляции после void ShutDownAllTrades { : '{' ожидается запятая или точка с запятой.

С нетерпением жду ответа.

Большое спасибо

 

Упс, извините.

Не хватает () после void ShutDownAllTrades().

Будьте также внимательны к переменной с именем 'Slippage' в функции orderclose.

Возможно, вам придется заменить ее на ту, которую вы используете при выставлении ордеров.

Яннис

 
Yannis:
Упс, извините.

Не хватает только () после void ShutDownAllTrades().

Будьте также внимательны к переменной с именем 'Slippage' в функции orderclose.

Возможно, вам придется заменить ее на ту, которую вы используете при выставлении ордеров.

Яннис

Это работает очень хорошо !

Еще раз спасибо

 

Я использую индикатор MTF CCI из потока индикаторов Multi Time Frame, он представляет собой желтую ступенчатую линию, см. прикрепленное изображение.

Когда линия находится выше уровня 100 (перекупленность) - цена идет вниз, а когда ниже -100 (перепроданность) - цена идет вверх.

Единственная проблема в том, что он не всегда обновляется, мне приходится делать это вручную, щелкая правой кнопкой мыши на графике и выбирая "Обновить".

Вопрос к программистам: Есть ли в MQ4 какая-нибудь функция для автоматического обновления графика на каждом тике?

Буду благодарен за совет.

евро пеан

Файлы:
mtf_cci.jpg  37 kb
 

Попробуйте это:

void ObjectsRedraw()

Перерисовывает все объекты на графике

Пример

ObjectsRedraw();

Возможно, сначала вам потребуется использовать ObjectCreate.

 
richx7:
Попробуйте это:

void ObjectsRedraw()

Перерисовывает все объекты на графике

Пример

ObjectsRedraw();

Возможно, сначала вам придется использовать ObjectCreate.

Спасибо за ответ.

Насколько я знаю, ObjectsRedraw() обновляет объекты, которые только что были "созданы" и "установлены".

Мне нужно обновить индикатор, которого нет в списке объектов, поэтому ObjectsRedraw() не работает.

Или, может быть, вы знаете, как обратиться к существующему индикатору?

Причина обращения: