mobidik
-----
Соглашусь с Владом, в данной части кода все верно.Здравствуйте. Помогите пожалуйста, уже долго бьюсь над одним вопросом. Есть 4 индикатора WPR с разными параметрами и когда они сходятся в нижней границе они дают сигнал на покупку и их может быть несколько. Нужно чтобы ордер открывался на каждом сигнале . А у меня получается только одна сделка. Что нужно подправить в коде, чтобы это исправить?
На рис показано: В - открытие сделок, 1 - одно закрытие всех сделок.
Код:for(i=OrdersTotal(); i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) pos++; if(OrderType()==OP_SELL) pos++; } } double wpr21 = iWPR(Symbol(),0,21,0); double wpr55 = iWPR(Symbol(),0,55,0); double wpr77 = iWPR(Symbol(),0,77,0); double wpr277 = iWPR(Symbol(),0,277,0); if(wpr21>Vverh && wpr55>Vverh && wpr77>Vverh && wpr277>Vverh) { RefreshRates(); if(StopLoss>0) sl=NormalizeDouble(Bid+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(Bid-TakeProfit*Point,Digits); ticket = OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,sl,tp,"",Magic,0,Red); Alert("Открылась сделка на Sell"); if(ticket<0) { Print("Позиция Sell не открылась, ошибка: ",GetLastError()); return; } } if(wpr21<Vniz && wpr55<Vniz && wpr77<Vniz && wpr277<Vniz) { RefreshRates(); if(StopLoss>0) sl=NormalizeDouble(Ask-StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(Ask+TakeProfit*Point,Digits); ticket = OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,sl,tp,"",Magic,0,Blue); Alert("Открылась сделка на Buy"); if(ticket<0) { Print("Позиция Buy не открылась, ошибка: ",GetLastError()); return; } } }
Переменная pos объявлена выше по коду, предполагаю, что есть еще условие с её использованием, если да - нужно править его. Следовало бы добавить: как только совпали условия и удачно установилась позиция - запомнить время бара, да бы больше не устанавливать позиций на этом же баре. При следующем сигнале сравнить текущие время с временем установки последнего сигнала - если они разные - можем поставить новую позицию по новому сигналу и так далее. При этом, можно использовать переменную pos на ограничение макс. количества позиций в рынке, как вариант.