Друзья помогите дополнить код, я не знаком с функциями OrderSend и CloseOrder. Пробовал сам решить проблему но выходит ерунда.
Ну так познакомьтесь, когда то же надо начинать... Описание функций с примерами есть в документации или посмотрите как реализовано в библиотеке кодов.

- docs.mql4.com
Ну так познакомьтесь, когда то же надо начинать... Описание функций с примерами есть в документации или посмотрите как реализовано в библиотеке кодов.
Да читал я, ни получается ни фига.
Открытие я еще смогу сделать, а вот закрытие полюбас нет...Друзья помогите дополнить код, я не знаком с функциями OrderSend и CloseOrder. Пробовал сам решить проблему но выходит ерунда.
https://www.mql5.com/ru/forum/131859/page9#comment_3359739
Старое, но чтоб разобраться в работе MQL4 хватит!

- 2011.02.18
- www.mql5.com
https://www.mql5.com/ru/forum/131859/page9#comment_3359739
Старое, но чтоб разобраться в работе MQL4 хватит!
//----- УСЛОВИЕ ЧТОБЫ ОРДЕРА НЕ ДУБЛИРОВАЛИСЬ int sellcht = 0; int buycht = 0; int ordcht = 0; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol() == Symbol1 && OrderMagicNumber() == Magic && OrderType() == OP_SELL) { sellcht++; ordcht++; } if(OrderSymbol() == Symbol2 && OrderMagicNumber() == Magic && OrderType() == OP_BUY) { buycht++; ordcht++; } if(OrderSymbol() == Symbol1 && OrderMagicNumber() == Magic && OrderType() == OP_BUY) { buycht++; ordcht++; } if(OrderSymbol() == Symbol2 && OrderMagicNumber() == Magic && OrderType() == OP_SELL) { sellcht++; ordcht++; } } } //----- ОТКРЫТИЕ ОРДЕРОВ if(Buf1 == -1.0) //----- 1-SELL, 2-BUY { if(sellcht==0 && ordcht<2) { int ticket1=OrderSend(Symbol1,OP_SELL,Lots,Bid,3,0,0,"OP_SELL",Magic,0,clrRed); if(ticket1<0) Print("OrderSend завершилась с ошибкой #",GetLastError()); else Print("Функция OrderSend успешно выполнена"); } //----- if(buycht==0 && ordcht<2) { int ticket2=OrderSend(Symbol2,OP_BUY,Lots,Ask,3,0,0,"OP_BUY",Magic,0,clrBlue); if(ticket2<0) Print("OrderSend завершилась с ошибкой #",GetLastError()); else Print("Функция OrderSend успешно выполнена"); } } //----- if(Buf1 == 1.0) //----- 1-BUY, 2-SELL { if(buycht==0 && ordcht<2) { int ticket1=OrderSend(Symbol1,OP_BUY,Lots,Ask,3,0,0,"OP_BUY",Magic,0,clrBlue); if(ticket1<0) Print("OrderSend завершилась с ошибкой #",GetLastError()); else Print("Функция OrderSend успешно выполнена"); } //----- if(sellcht==0 && ordcht<2) { int ticket2=OrderSend(Symbol2,OP_SELL,Lots,Bid,3,0,0,"OP_SELL",Magic,0,clrRed); if(ticket2<0) Print("OrderSend завершилась с ошибкой #",GetLastError()); else Print("Функция OrderSend успешно выполнена"); } } //----- ЗАКРЫТИЕ ОРДЕРОВ if(Buf1 == 0.0) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i,MODE_TRADES)==true) { if (OrderSymbol() == Symbol1 && OrderMagicNumber() == Magic && OrderType() == OP_SELL) int close = OrderClose(OrderTicket(),OrderLots(),Ask,0,Gray); if (OrderSymbol() == Symbol1 && OrderMagicNumber() == Magic && OrderType() == OP_BUY) int close = OrderClose(OrderTicket(),OrderLots(),Bid,0,Gray); if (OrderSymbol() == Symbol2 && OrderMagicNumber() == Magic && OrderType() == OP_BUY) int close = OrderClose(OrderTicket(),OrderLots(),Bid,0,Gray); if (OrderSymbol() == Symbol2 && OrderMagicNumber() == Magic && OrderType() == OP_SELL) int close = OrderClose(OrderTicket(),OrderLots(),Ask,0,Gray); } //----- if (OrderSelect(i,MODE_TRADES)==true) { if (OrderSymbol() == Symbol1 && OrderMagicNumber() == Magic && OrderType() == OP_SELL) int close = OrderClose(OrderTicket(),OrderLots(),Ask,0,Gray); if (OrderSymbol() == Symbol1 && OrderMagicNumber() == Magic && OrderType() == OP_BUY) int close = OrderClose(OrderTicket(),OrderLots(),Bid,0,Gray); if (OrderSymbol() == Symbol2 && OrderMagicNumber() == Magic && OrderType() == OP_BUY) int close = OrderClose(OrderTicket(),OrderLots(),Bid,0,Gray); if (OrderSymbol() == Symbol2 && OrderMagicNumber() == Magic && OrderType() == OP_SELL) int close = OrderClose(OrderTicket(),OrderLots(),Ask,0,Gray); } } }
Вот что получилось у меня, ордера бывает не открываются по второму инструменту и с закрытием те же проблемы...
Вот что получилось у меня, ордера бывает не открываются по второму инструменту и с закрытием те же проблемы...
Для символов, которые отличаются от символа текущего графика, нельзя использовать Bid и Ask текущего символа. Вы же не открываете ордер на EURUSD по цене, взятой с GBPUSD.
Для символов, которые отличаются от символа текущего графика, нельзя использовать Bid и Ask текущего символа. Вы же не открываете ордер на EURUSD по цене, взятой с GBPUSD.
MarketInfo(Symbol1,MODE_ASK)
MarketInfo(Symbol2,MODE_BID)
Правильно понимаю?
MarketInfo(Symbol1,MODE_ASK)
MarketInfo(Symbol2,MODE_BID)
Правильно понимаю?
Да, но лучше (современнее и для кроссплатформенности):
SymbolInfoDouble(Symbol1, SYMBOL_BID)
SymbolInfoDouble(Symbol1, SYMBOL_ASK)
Да, но лучше (современнее и для кроссплатформенности):
SymbolInfoDouble(Symbol1, SYMBOL_BID)
SymbolInfoDouble(Symbol1, SYMBOL_ASK)
А по закрытию сделок будут советы, я честно очень плохо разбираюсь в этом, сделал как мог. И получилось непойми что, с кучей условий. СПАСИБО...
А по закрытию сделок будут советы, я честно очень плохо разбираюсь в этом, сделал как мог. И получилось непойми что, с кучей условий. СПАСИБО...
Цикл в закрытии неверный.
for (int i=0; i<OrdersTotal(); i++){
Нельзя так. Напр, если закрываете 1-й ордер, то нумерация остальных сдвигается. Тот что был 2-м становится 1-м, 3-й становится 2-м и т.д. Получается что таким циклом будете пропускать ордера
for (int i=OrdersTotal()-1; i>=0; i--)
И почему два раза одинаковые условия?
if (OrderSelect(i,MODE_TRADES)==true){ .......} if (OrderSelect(i,MODE_TRADES)==true){ .......}И аналогично, как и в открытии, неверные цены
А по закрытию сделок будут советы, я честно очень плохо разбираюсь в этом, сделал как мог. И получилось непойми что, с кучей условий. СПАСИБО...
По закрытию первый момент (насчет индексации) уже подсказала Galina. Следующая странность в условии:
OrderSelect(i,MODE_TRADES)==true
Второй аргумент функции должен быть SELECT_BY_POS. MODE_TRADES - это третий аргумент. Странность в том, что в первом цикле OrderSelect() использована правильно, но вот во втором почему-то неправильно.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Друзья помогите дополнить код, я не знаком с функциями OrderSend и CloseOrder. Пробовал сам решить проблему но выходит ерунда.