int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) count++; } } return(count); }
Советник взбунтовался! Начал закрывать ордера совместно со своими ордерами...
В коде стоит проверка по Symbol() и OrderMagicNumber()
Пример: Советник находиться на GBPUSD - а когда закрывается ордер (по условиям советника), то цепляет другие ордера, например EURUSD. пример на скрине
В терминале открыты 4 валютки. на каждом эксперт с одним и тем же Magic. Может это как то повлиять? Хотя напомню- валютки разные и стоит проверка по Symbol()
А можете в коде выделить строку с проверкой по символу??? Только не правьте свой код и не пытайтесь оправдаться тем, что это вырезано, а в советнике всё есть...
Советник взбунтовался! Начал закрывать ордера совместно со своими ордерами...
В коде стоит проверка по Symbol() и OrderMagicNumber()
Пример: Советник находиться на GBPUSD - а когда закрывается ордер (по условиям советника), то цепляет другие ордера, например EURUSD. пример на скрине
В терминале открыты 4 валютки. на каждом эксперт с одним и тем же Magic. Может это как то повлиять? Хотя напомню- валютки разные и стоит проверка по Symbol()
В вашем коде нет проверки на Symbol() по которому открыта позиция.
надо сделать так:
if (Ask >= Target && CountBuy() >0) { for (i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { if(OrderMagicNumber()==Magic && OrderSymbol() == Symbol() && OrderType()== OP_BUY) { OrderClose (OrderTicket(), OrderLots(), Bid, 10, Red); err=GetLastError(); Print("error: ",err, " цена: ", Bid); } } }
В вашем коде нет проверки на Symbol() по которому открыта позиция.
надо сделать так:
int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) count++; } } return(count); }
вот функция в условиях if (Ask >= Target && CountBuy() >0)
в первом примере нарушено соответствие фигурных скобок
Смысл не в скобках, возможно когда он кусок кода вставлял последнюю скобку забыл.
вот функция в условиях if (Ask >= Target && CountBuy() >0)
Проверка на соответствие символа должна быть непосредственно перед закрытием ордера. Там-же где проверка на соответствие магика.
в первом примере нарушено соответствие фигурных скобок
да да. это я скопировал криво. убрал комментарии свои а так вот этот код
if (Bid <= Target && CountSell() > 0) { for (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true) { if(OrderMagicNumber()==Magic && OrderType()== OP_SELL) //важно { OrderClose (OrderTicket(), OrderLots(), Ask, 500, Red); int err=GetLastError(); Print("error: ",err, " цена: ", Ask); // Print ("Сработала проверка больше таргета, ", " ордер тикет: ", OrderTicket(), " ордер лотс: ", OrderLots(), " цена: ", Bid); } } } }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Советник взбунтовался! Начал закрывать ордера совместно со своими ордерами...
В коде стоит проверка по Symbol() и OrderMagicNumber()
Пример: Советник находиться на GBPUSD - а когда закрывается ордер (по условиям советника), то цепляет другие ордера, например EURUSD. пример на скрине
В терминале открыты 4 валютки. на каждом эксперт с одним и тем же Magic. Может это как то повлиять? Хотя напомню- валютки разные и стоит проверка по Symbol()