Пытаюсь написать простой советник на Магди........но что то оно не работает как надо! Почему?????
За ранее всем благодарен за помощь!
Пытаюсь написать простой советник на Магди........но что то оно не работает как надо! Почему?????
За ранее всем благодарен за помощь!
Уточните, как работает и как надо, чтобы работал. Какую логику хотели бы видеть?
Тут, конечно, полный треш :)
Давно не видел, чтобы основная логика советника была написана в start(). Пишите в OnTick().
В MacdCurrent вы получаете тикет открытой позиции и потом сравниваете этот тикет с сигналом?
Зачем два раза проверяется одно и тоже условие MacdCurrent<SignalCurrent && MacdCurrent<SignalCurrent?
Функция OrderSend() собрана жутко. Посмотрите документацию.
//+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double ma; int res; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); можешь менять Индикаторы //--- sell conditions if(Open[1]>ma && Close[1]<ma) тут химичешь { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); тут не чего не трогай return; } //--- buy conditions if(Open[1]<ma && Close[1]>ma) тут химичешь { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue); тут не чего не трогай return; } //--- } //+------------------------------------------------------------------+
вот наверное это
//+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double MacdCurrent,MacdPrevious; double SignalCurrent,SignalPrevious; int res; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average //--- to simplify the coding and speed up access data are put into internal variables MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); можешь менять Индикаторы //--- sell conditions //--- check for short position (SELL) possibility if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) тут химичешь { res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",12345,0,Red); тут не чего не трогай return; } //--- buy conditions //--- check for long position (BUY) possibility if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) тут химичешь { res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",12345,0,Blue); тут не чего не трогай return; } //--- } //+------------------------------------------------------------------+
ПОПРАВИЛ -
изменил - вот теперь попробуй !!!!!!!!!!!!!!!!!!!!!
спасиб Саш!!!!!!!!!!!
у тебя в терминале, есть готовые эксперты - с них можно всё копировать ( MACD Sample.mq4 ) и ( Moving Average.mq4 )
только меняешь Индикаторы и подгоняешь стрелочки
пример :
в этих местах -
//--- check for short position (SELL) possibility if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
Уточните, как работает и как надо, чтобы работал. Какую логику хотели бы видеть?
открывает только одну сделку
Это потому, что в коде прямое указание на такое повдение:
total=OrdersTotal(); if(total==0)
Здесь сказано: если нет никаких ордеров (ни рыночных, ни отложенных), то можно открыть рыночный ордер. Если есть хотя бы один из ордеров, то открытие происходить не будет.
Нужно продумать условие открытия бОльшего количества ордеров, а также условия закрытия имеющегося ордера.
открывает только одну сделку
вот начало - дальше можешь химичить
//+------------------------------------------------------------------+ //| S_D.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //--- extern double Lots = 0.01; extern double TakeProfit = 200; extern double StopLoss = 500; extern int FastEMA = 12; extern int SlowEMA = 26; extern int SignalSMA = 9; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double MacdCurrent,MacdPrevious; double SignalCurrent,SignalPrevious; int res; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average //--- to simplify the coding and speed up access data are put into internal variables MacdCurrent=iMACD(NULL,0,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,1); //можешь менять Индикаторы //--- sell conditions //--- check for short position (SELL) possibility if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) //тут химичешь { res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red); //тут не чего не трогай return; } //--- buy conditions //--- check for long position (BUY) possibility if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) //тут химичешь { res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green); //тут не чего не трогай return; } //--- } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования