Чтобы не мучится, - посмотрите, как это сделано у профессионала:
http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=39
Спасибо! Понял! Была такая мысля сделать через мэджик, только не знал как. Теперь сделаю.
Не все равно не то. Удаление противоположного сделал через мэджик, все ок.
Но когда удаляю ордер, советник в этот же день открывает еще новые ордера, и в день получается по несколько ордеров открывает, хотя должен всего 2.
Вопрос в том, как заставить советник открывать только 2 отложенника за сутки?
Можно перебрать все закрытые ордера и сверить мэджики при помощи OrdersHistoryTotal, но на каждом тике перебирать наверное неправильно, да и история текущего счета должна быть загружена в терминале
Можно еще привязать время открытия ордера к 00:00 GMT, но у меня часто связь пропадает, могут не открыться ордера.
Я, не так давно, решил аналогичную задачу вот таким образом:
//В функцию старт : // запрет торговли: - в день , если уже были открыты И закрыты позиции // то торговля запрещена if ( NumberOfBarOpenLastPos(NULL, 1440,-1, Magic)==0 || NumberOfBarCloseLastPos(NULL, 1440,-1, Magic)==0 ) Trade=false; else Trade=true; //-------------------------------- //ПРИМЕР : //============Открытие позиций ======================================= if (Trade==true) {// если торговля разрешена if ( NumberOfPositions(NULL , -1, Magic )==0 ) { //если нет открытых позиций // и т.д....
А вне ф-и СТАРТ, в конец самый кода поставьте
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru/ | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает номер бара открытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=OrdersTotal(); if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderOpenTime()) t=OrderOpenTime(); } } } } } } return(iBarShift(sy, tf, t, True)); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru/ | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает номер бара закрытия последней позиции или -1. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) { datetime t; int i, k=OrdersHistoryTotal(); if (sy=="" || sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderCloseTime()) t=OrderCloseTime(); } } } } } } return(iBarShift(sy, tf, t, True)); }
А можно сделать так что-бы ордера ставились по очерёди?
Если открылся а потом закрылся ордер sell stop по стопу, выставлялся отложенник byu limit.
И наоборот если открылся а потом закрылся buy limit по стопу, выставляем отложенник sell limit.
Проблема в том что все отложенники выставляются на график вместе.
И ещё маленькая просьба, что б Stop loss после достижения 10 - 15 пунктов переносил на определённое количество пунктов, например на 5. С регулировкой уровней.
Помогите с реализацией задуманного, буду очень благодарен!!!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я новичек в программировании. Ради интереса пытаюсь доработать одного советника основаного на пробое: https://www.mql5.com/ru/code/9321
Там выставляется один отложеный ордер BuyStop и один SellStop. Период D1. Срок жизни отложенника - сутки.
Вопрос такой: как удалить второй ордер, если один из них сработал?
Пробовал вот так дописать код:
Тогда ордера удаляются, но тут же открываются новые в этот день.
На ум приходит только анализироваь всю историю, но может быть как-то можно попроще сделать?