&&OrderMagicNumber()==Magic&&OrderType()>1)
Проверка на то что сделки либо бай либо селл...
Константа |
Значение |
Описание |
OP_BUY |
0 |
Покупка |
OP_SELL |
1 |
Продажа |
int FindOrdMinus() { for(int i = OrdersTotal()-1; i >= 0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=Symbol()) continue; if(OrderMagicNumber()!=Magic) continue; switch(OrderType()) { case ORDER_TYPE_BUY: if(OrderOpenPrice() > Bid) return(OrderTicket()); break; case ORDER_TYPE_SELL: if(OrderOpenPrice() < Ask) return(OrderTicket()); break; } } return(-1); }
Спасибо код работает.
Вот это я только понять не могу. for(int i = OrdersTotal()-1; i >= 0; i--)
ОрдерТотал возвращает кол-во ордеров. получается если ордеров 2, то i равна 1 и выбрав ордер по тикету мы второй ордер так и не выделим...
if(OrderSymbol()!=Symbol()) continue; и вот тут вот, получается если символ не наш мы все равно продолжаем.... if(OrderMagicNumber()!=Magic) continue; и даже если не наш магик. и еще... тутif(OrderOpenPrice() > Bid) return(OrderTicket()); break;зачем после ретурн брейк???? он же и так выйдет из функции
qroner:
зачем после ретурн брейк???? он же и так выйдет из функции
А если у вас пошел допустим BUY, но не прошло условие, зачем проходить по коду дальше, проверим следующий ордер. Return срабатывает только при полном соответствии условия.
Смотрите что было у вас и обратите на разницу в переборе. Массивы идут с ноля и последний индекс меньше на 1 от размера массива.
Если написать вот так
for(int i = 0; i < OrdersTotal(); i++)
То тогда ни каких -1 и = не нужно
А если у вас пошел допустим BUY, но не прошло условие, зачем проходить по коду дальше, проверим следующий ордер. Return срабатывает только при полном соответствии условия.
Смотрите что было у вас и обратите на разницу в переборе. Массивы идут с ноля и последний индекс меньше на 1 от размера массива.
Если написать вот
То тогда ни каких -1 и = не нужно
Все понял, спасибо большое.
Блин опять какая то ерунда... Чуть изменил функцию:
//+------------------------------------------------------------------+ // Возвращает тикет сделки c положительным профитом | //+------------------------------------------------------------------+ int FindOrdPlus(int Dist){ double dist = Dist_Normalize(Dist); for(int i = OrdersTotal()-1; i >= 0; i--){ if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=Symbol()) continue; if(OrderMagicNumber()!=Magic) continue; switch(OrderType()){ case ORDER_TYPE_BUY: if(OrderOpenPrice() <= Bid - Dist) return(OrderTicket()); break; case ORDER_TYPE_SELL: if(OrderOpenPrice() >= Ask + Dist) return(OrderTicket()); break; } } return(-1); }
Возвращает положительный тикет при любом раскладе... Что сейчас то не так?
Блин опять какая то ерунда... Чуть изменил функцию:
Возвращает положительный тикет при любом раскладе... Что сейчас то не так?
После любого "case" можно иметь только один оператор.
Пример из документации (ошибочен) : ... стилизация НЕ ЗАДАЕТ логику !!!!
switch(x) { case 'A': Print("CASE A"); break; case 'B': case 'C': Print("CASE B or C"); break; default: Print("NOT A, B or C"); break; }
имеет смыслил :
switch(x) { case 'A': Print("CASE A"); break; // в любом случае здесь происходить выход // ....... далее никогда не доходим //case 'B': //case 'C': Print("CASE B or C"); //break; //default : Print("NOT A, B or C"); //break; }
а правильнее написать :
switch(x) { case 'A': { Print("CASE A"); break; } case 'B': case 'C': { Print("CASE B or C"); break; } default: { Print("NOT A, B or C"); break; } }
Заметили разницу : ( один оператор ) = { много операторы }
Блин опять какая то ерунда... Чуть изменил функцию:
Возвращает положительный тикет при любом раскладе... Что сейчас то не так?
Входной параметр Dist нужно привести к пунктам. К примеру, цена открытия ордера 1.21, а дистанция, к примеру, указана 10. В итоге любой ордер будет попадать в пределы цены от -8.79 до 11.21.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу помощи. Ни как не могу разобраться. Обе функции почему то при любом раскладе возвращают-1.
Помогите плз разобраться
Вот код: