Сделать проверку:
if(TimeCurrent()>OrderOpenTime()+МаксимальноеВремяСуществованияОрдераВСекундах){
Непонятно, зачем ты все ордера трясешь, если у тебя есть тикет.
Есть, и что с ним делать? Хранить в яйце, яйцо в сундуке, сундук в утке и т.д.? А если ордеров сотни? Можно, конечно, вести массив тикетов, сохранять его в файл на случай перезагрузки... Но в данном случае незачем, имхо. Хотя дело вкуса...
int LossTicket(int magic,int pause=0,double loss=0){ for(int i=OrdersTotal();i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderProfit()<loss){ if(OrderMagicNumber()==magic){ if(TimeCurrent()-OrderOpenTime()>pause){ return(OrderTicket()); } } } } } } return(-1); }
Ты код внимательно глянь, там главное определить цену и время открытия сразу после открытия.
Есть правда в твоих словах) Но, да мне сегодня косоглазие простительно, профпраздник все ж... Гулял немного) На всяк случай заткнусь, пока еще чего не набредил и совсем левого не нафлудил.
Всем огромное спасибо, все получилось только я не понял, почему МТ как-то искажает количество секунд, если тайм фрейм 5 мин, то допустим закрытие позиции через 5 баров было бы равно TimeCurrent()-OrderOpenTime()>300, где 300 это пять баров по 60 секунд, но МТ закрывает позицию если вместо 300 указать допусти 1000, только где-то так он закрывает через 5 баров
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите пожалуйста найти ошибку или подскажите как сделать, цель закрыть ордер если он убыточен на 5 мин таймфрейме, при тестировании закрывает ордер сразу если он убыточен, не дожидаясь условия что ВРЕМЯ ОТКРЫТИЯ + 300 секунд <= Текучещее время
ticket = Buy(Symbol(), Lots, price, sl, tp, Magic);
if (ticket > 0)
{
int cnt = OrdersTotal();
for (int i=0; i < cnt; i++)
{
if (!OrderSelect(g, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
Orders_time = OrderOpenTime();
Orders_price = OrderOpenPrice();
}
}esle alert("Error");
if ((Orders_time + 300)<=Time[0] && bid>Orders_price) closeorder();