Точнее говоря мне нужно сделать так, чтобы при срабатывании
s/l на текущем баре(на котором сработал s/l) программа не совершала
сделок(притом условие на совершение сделок будет выполнятся,
но мне не нужно чтобы сделки совершались после s/l), а начинала
совершать их со следующего бара при выполнени условий!
- Открытие и закрытие позиций - Торговля - MetaTrader 5 для iPhone
- Открытие и закрытие позиций - Торговля - MetaTrader 5 для Android
- Торговля одним кликом - Торговые операции
projectX писал (а):
Точнее говоря мне нужно сделать так, чтобы при срабатывании s/l на текущем баре(на котором сработал s/l) программа не совершала сделок(притом условие на совершение сделок будет выполнятся, но мне не нужно чтобы сделки совершались после s/l), а начинала совершать их со следующего бара при выполнени условий!
После определения, что сработал стоплосс, дождитесь формирования
очередного бара..Точнее говоря мне нужно сделать так, чтобы при срабатывании s/l на текущем баре(на котором сработал s/l) программа не совершала сделок(притом условие на совершение сделок будет выполнятся, но мне не нужно чтобы сделки совершались после s/l), а начинала совершать их со следующего бара при выполнени условий!
static int prevtime = 0; if (Time[0] == prevtime) return(0); // Убедимся, что сформировался новый бар prevtime = Time[0];Print ("Time : ",prevtime); // Запомнить время текущего бара
перебираем историю сделок, если находим ордер закрывшийся по
сл (в комментарии должно быть [sl] или OrderClosePrice()==OrderStopLoss) и время закрытия ордера OrderCloseTime()>=Time[0], то ставим
запрет на открытие.
а если в условии на совершение сделки просто добавить например вот так
if(a>b && d<f && OrderClosePrice()=!OrderStopLoss && OrderCloseTime()=!Time[0]) { //Ask-TrailingStop*Point,Ask+TakeProfit*Point стоплос работает //при =1000 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,sloss,takep, "sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); //MODE_TRADES } else Print("Error opening BUY order : ",GetLastError()); return(0); }а сам стоп лосс устанавливается фунцией:
for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType()==OP_BUY) // long position is opened { // should it be closed? if(Low[0]<Low[1]) { OrderClose(OrderTicket(),OrderLots(),Bid,5,Violet); // close position return(0); // exit } // check for trailing stop if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(), Bid-Point*TrailingStop, OrderTakeProfit(),0,Green); return(0); } } } }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь