kabalvlad:
Я новичок пишу для себя эксперта в кортом есть HMA color. Вот возникла такая проблема. Открывается первый ордер на покупку и закрывается по индикатору при смене тренда, но последующие ордера открывшись сразу закрываются не дождавшись сигнал от индикатора
Почему используется буфер 6 если их там всего 5 (0, 1, 2, 3, 4)
PriceHMA = iCustom(NULL, 0, "HMA Color nrp & mtf & alerts + arrows 2", TimeFrame, HMA_Period, HMA_PriceType, HMA_Method, DisplayHmaValue, alertsOn, alertsOnCurrent, alertsMessage, alertsSound, alertsEmail, ShowArrows, arrowsIdentifier, arrowsUpperGap, arrowsLowerGap, arrowsUpColor, arrowsDnColor, arrowsUpCode, arrowsDnCode, arrowsUpSize, arrowsDnSize, 6, 0);
Буферы индикатора
Ну во отредактировал. Но ситуация не изменилась. Только непонятная больше стала. Если в функции == цену и Dntrend то позиции не закрываться, а выбиваются стоп лосом. А если вписать < или > , >=, <=, на каждом тике открытие и закрытие позиции. Вот функция. Вот программа. Пытался добавить сдвиг на iCustom но не помогло. Индикатор приложен.
extern int period=21; extern int method=3; // MODE_SMA extern int price=0; // PRICE_CLOSE extern int sdvig=0; extern bool bPlaySound=true; // Включение звука при смене цвета extern bool bAllert=true; // Включение звука при смене цвета extern string SoundName="alert.wav"; // Звуковой файл extern int CheckBar=1; //------------------------------------------------- double SL, TP, Dntrend; int ticket; bool Ticket2; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { Dntrend = iCustom(NULL, 0, "VininI_HMA_sound_Alert", period, method, price, sdvig, bPlaySound, bAllert, SoundName, CheckBar, 2, 0); //------------------------------------------------------- if(BuyCount() == 0) // проверка наличия открытых ордеров { SL = NormalizeDouble(Ask - StopLoss*Point, ZK); // расчёт стоп лоса //TP = NormalizeDouble(Ask + TakeProfit*Point, ZK); ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, slippage, SL, 0, "", magic, 0, Blue);// покупка if (ticket < 0) Print("Не удалось открыть лимитный ордер на покупку"); } CoutBuyClose();
int CoutBuyClose() { if (Dntrend == Bid && BuyCount() > 0) { for( int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == magic && OrderType() == OP_BUY) Ticket2 = OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Red); if (Ticket2 == 0) Print ("Ошибка закрытия ордера на покупку"); } } } return(0); }
Файлы:
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double buy = iCustom(NULL, 0, "VininI_HMA_sound_Alert", period, method, price, sdvig, bPlaySound, bAllert, SoundName, CheckBar, 1, 0); double sell = iCustom(NULL, 0, "VininI_HMA_sound_Alert", period, method, price, sdvig, bPlaySound, bAllert, SoundName, CheckBar, 2, 0); //==== if(buy!=EMPTY_VALUE && OP(0)==0) //если сигнал бай и нет ордеров бай { SL = NormalizeDouble(Ask - StopLoss*Point, ZK); // расчёт стоп лоса //TP = NormalizeDouble(Ask + TakeProfit*Point, ZK); SendBuy (Lots, SL); // покупка } //---- if(sell!=EMPTY_VALUE && OP(1)==0) //если сигнал селл и нет ордеров селл { SL = NormalizeDouble(Bid + StopLoss*Point, ZK); // расчёт стоп лоса //TP = NormalizeDouble(Bid - TakeProfit*Point, ZK); SendSell (Lots, SL); // продажа } //==== if(sell!=EMPTY_VALUE && OP(0)>0){ //если сигнал селл и есть ордера бай, то закрыть бай for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<2 && OrderMagicNumber()==magic && OrderSymbol()==Symbol()){ if(OrderType()==0) CloseOrd(OrderTicket());}} //---- if(buy!=EMPTY_VALUE && OP(1)>0){ //если сигнал бай и есть ордера селл, то закрыть селл for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<2 && OrderMagicNumber()==magic && OrderSymbol()==Symbol()){ if(OrderType()==1) CloseOrd(OrderTicket());}} //==== } //+------------------------------------------------------------------+ //| Счётчик ордеров по типу | //+------------------------------------------------------------------+ int OP(int type=-1){ int count=0; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) { if(OrderType()==type || (OrderType()>=0 && type==-1)) count++;} return(count);} //+-----------------------------------------------------+ //| Открытие, закрытие ордеров | //+-----------------------------------------------------+ void SendBuy(double lot, double sl){ int SendOrdB; SendOrdB=OrderSend(Symbol(),OP_BUY,lot,Ask,10,sl,0,"OpBuy ",magic,0,Blue); } void SendSell(double lot, double sl){ int SendOrdS; SendOrdS=OrderSend(Symbol(),OP_SELL,lot,Bid,10,sl,0,"OpSell ",magic,0,Red); } void CloseOrd(int ticket){ color cls=Gray; for(int i=0; i<OrdersTotal(); i++) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<2 && OrderMagicNumber()==magic && OrderSymbol()==Symbol()){ if(OrderType()==OP_BUY) cls=DeepSkyBlue; if(OrderType()==OP_SELL) cls=Magenta;} if(!OrderSelect(ticket,SELECT_BY_TICKET)||OrderCloseTime()>0) return; bool close=OrderClose(ticket,OrderLots(),OrderClosePrice(),30,cls);}
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я новичок пишу для себя эксперта в кортом есть HMA color. Вот возникла такая проблема. Открывается первый ордер на покупку и закрывается по индикатору при смене тренда, но последующие ордера открывшись сразу закрываются не дождавшись сигнал от индикатора . Индикатор и скрин приложены.
Код функции CoutBuyClosу