Последний блок: проверка наличия и закрытие совсем неправильный.
- проверить время, если пора, то...
- проверить наличие открытых ордеров, если есть, то ...
- проверить что там за ордер бай или селл, а заодно выцепить его номер
- попытаться закрыть ордер по правильной цене (для покупки и продажи они разные)
Привет, я пытался написать эксперт который проверяет пересекал ли Momentum уровень 100 и если пересекал, то открывал позицию в противоположном направлении и закрывал бы ордер в 23.40, ну или чуть позже. В принципе со входом всё в порядке открывает вовремя и правильно, вот тока почему то закрывать в конце дня не хочет, а закрывает тока по T/P или S/L
У Вас в выражении
if(ticket !=0 && TimeHour(TimeCurrent()) == 23 && TimeMinute(TimeCurrent()) > 40 ) //проверка количества ордеровticket всегда равен 0. Надо перед этим выбрать ордер. Как то так:
for(int i=0;i<OrdersTotal();i++) { bool flag=OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(flag && TimeHour(TimeCurrent()) == 23 && TimeMinute(TimeCurrent()) > 40 ) { RefreshRates(); if(OrderType()==OP_BUY) double CurPrice=NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)); if(OrderType()==OP_SELL) CurPrice=NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)); OrderClose(OrderTicket(),OrderLots(),CurPrice,3,Violet); } }
З.Ы. timbo все правильно написал, не будет не нужных проверок.
if(ticket !=0 && TimeHour(TimeCurrent()) == 23 && TimeMinute(TimeCurrent()) > 40 ) //проверка количества ордеров { OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); RefreshRates(); OrderClose(ticket,OrderLots(),Bid,3,Violet); ticket=0; return(0); }
Вот это надо выбросить.
И написать вот это. Это закроет все открытые ордера, если в промежутке времени между 23:40 и 24:00 будет хоть 1 тик.
if(TimeHour(TimeCurrent())==23 && TimeMinute(TimeCurrent())>40) { for (int i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,Violet); } } }
Вот это надо выбросить.
И написать вот это. Это закроет все открытые ордера, если в промежутке времени между 23:40 и 24:00 будет хоть 1 тик.
Этот код закроет только каждый второй открытый ордер. Перебор ордеров надо делать начиная с последнего.
И ещё выдаст кучу error messages, если, например, открытых ордеров нет.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет, я пытался написать эксперт который проверяет пересекал ли Momentum уровень 100 и если пересекал, то открывал позицию в противоположном направлении и закрывал бы ордер в 23.40, ну или чуть позже. В принципе со входом всё в порядке открывает вовремя и правильно, вот тока почему то закрывать в конце дня не хочет, а закрывает тока по T/P или S/L