total=OrdersTotal(); if(total<1) { Условия установки ордеров }Можно так - (одновременно будет открыт только один ордер)
Но это не то... Бывает такое что ордер может закрыться в этот же баое, и он сразу еще раз откроется...
А что значит функция sleep?
А что значит функция sleep?
Использовать
как вариант и если ордер открыт и час совпадает с текущим не открываться |
и если это значение рано текущему часу не открывать следующий
xeon:
total=OrdersTotal(); if(total<1) { Условия установки ордеров }Можно так - (одновременно будет открыт только один ордер)
да ! но если МТС подразумевает открыие не одного ордера а нескольких такой вариант не подходит
YuraZ а можешь примерно код написать?
static int OrderOpenTime = 24; if(OrderOpenTime != Hour()) { ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,TakeProfit,NULL,myMagic,0,Green); if(ticket > 0) OrderOpenTime = Hour(); }Например вот так. Каждый раз открывая сделку запоминаешь в каком часу это было, а перед открытием проверяешь текущее время и запомненное. Будут проблемы если последняя сделка была открыта 24 часа назад, т.е. час будет совпадать и условие не выполнится, но думаю для тебя это не проблема. Возможны и другие варианты. При желании можно перебрать все текущие и закрытые сделки и проверить их время, как это уже было сказано выше, но мне кажется, что ни к чему эти сложности в данном случае.
timbo:
static datetime OrderOpenTime; if(OrderOpenTime != Hour()) { ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,TakeProfit,NULL,myMagic,0,Green); if(ticket > 0) OrderOpenTime = Hour(); }Например вот так. Каждый раз открывая сделку запоминаешь в каком часу это было, а перед открытием проверяешь текущее время и запомненное. Будут проблемы если последняя сделка была открыта 24 часа назад, т.е. час будет совпадать и условие не выполнится, но думаю для тебя это не проблема. Возможны и другие варианты. При желании можно перебрать все текущие и закрытые сделки и проверить их время, как это уже было сказано выше, но мне кажется, что ни к чему эти сложности в данном случае.
можно добавить в конструкцию
проверку дня
тогда переход 24 часа не страшен
можно добавить в конструкцию
проверку дня
тогда переход 24 часа не страшен
Да конечно же можно, но, как мне кажется, для данного случая -
возможное многократное открытие в течении одного часа, т.е.
сделок ожидается много - это не важно. проверку дня
тогда переход 24 часа не страшен
И более правильным было бы всё-таки проверка времени открытия последнего открытого и последнего закрытого ордеров, ибо это защитило бы эксперт от открытия сделки при старте/ре-старте, если уже есть сделки, но в самом эксперте OrderOpenTime пока ничему хорошему не равен. Но для тестирования идеи все эти сложности ненужны - KISS технология (keep it simple stupid).
Предлагаю две простые функции. Как их использовать, сообразите сами.
//+----------------------------------------------------------------------------+ //| Возвращает время открытия последней позиций. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ datetime TimeOpenLastPos(string sym="", int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(oot); }
//+----------------------------------------------------------------------------+ //| Возвращает количество секунд после открытия последней позиций. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ datetime SecondsAfterOpenLastPos(string sym="", int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(CurTime()-oot); }
Если будет перезагрузка системы, то советник даст сбой?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как можно сделать так, чтобы в один час открывался только один ордер?
А то "советник" работает по предыдущим барам, и если условия удовлетворяют то он на следущем баре
может открыть не одну позицию...