Советники: Simple MA EA

 

Simple MA EA:

Простой эксперт для тех, кто хочет попробовать новый тестер стратегий.

Эксперт основан на пересечении двух скользящих средних. Покупаем или продаем, если одна из линий пересекает другую.

Автор: outkast

Simple MA Expert Advisor

 

В тестере выдает ошибку:

2010.04.28 06:27:44    Core 1    Process creation error [2]

 
1Serg:

В тестере выдает ошибку:

2010.04.28 06:27:44    Core 1    Process creation error [2]

Обновитесь до последнего билда, пожалуйста, а затем проверьте наличие файла metatester.exe в корне каталога программы.
 
Renat:
Обновитесь до последнего билда, пожалуйста, а затем проверьте наличие файла metatester.exe в корне каталога программы.

Спасибо, заработало.

Не хватает оптимизатора и визуализации.

 
1Serg:

Не хватает оптимизатора и визуализации.

Оптимизатор есть - просто увеличьте высоту окна тестера.

Визуализация будет позже.

 
Renat:

Оптимизатор есть - просто увеличьте высоту окна тестера.

Визуализация будет позже.

Класс!

 

С уважением,

Г-н/г-жа tsaktuo, я изучил ваш код K_eSimpleMA, и он был очень полезен для понимания структуры советника, а также таких понятий, как работа с кроссами SMA.

Я очень ценю то, что вы поделились этой статьей, и очень благодарен вам.

С другой стороны, у меня есть пара вопросов, оба связаны с функциейSymbolInfoTick :


В руководстве по MQL5 говорится оSymbolInfoTick(Symbol(),tick) , что она возвращает текущие цены указанного символа в переменную типа MqlTick, а также говорится, что функция возвращает true в случае успеха, в противном случае возвращает false.

Как я понимаю, если не получен тик, то выводится сообщение ("Failed to get Symbol info!"). Правильно ли это ? Если это не так, не могли бы вы объяснить мне, в чем дело?

Другой вопрос: что произойдет, если сообщение будет выводиться каждый тик?

Еще раз спасибо.

 

Есть:

trReq.sl=tick.ask-_Point*sl;            // Stop Loss level of the order

trReq.tp=tick.ask+_Point*tp;          // Take Profit level of the order

нужно:

trReq.sl=tick.bid-_Point*sl;            // Stop Loss level of the order

trReq.tp=tick.bid+_Point*tp;          // Take Profit level of the order

и соответственно поменять для SELL.

Покупка совершается по цене ask, но закрывается по цене bid.

Если Вы хотите ограничить прибыль и убыток, например, 20 пунктами, то точно 20 пунктов нужно считать от цены bid (цены закрытия) для BUY и ask (цены закрытия) для SELL.

 
 

Подскажите пожалуйста как к этому коду добавть чтобы ко всему торговал по тренду по MACD без стопов.

Лонг:  MACD растет быстрая МА пересекла медленную сверху вниз

Кроем лонг:  MACD растет быстрая МА пересекла медленную снизу вверх

Шорт:  MACD убывает быстрая МА пересекла медленную сверху вниз

Кроем шорт:  MACD убывает быстрая МА пересекла медленную снизу вверх

Я пробовал так:

//+------------------------------------------------------------------+
//|                                                    MACD&DEMA.mq5 |
//|                                       Copyright 2010, AM2 Group. |
//|                                         http://www.am2_group.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, AM2 Group."
#property link      "http://www.am2_group.net"
#property version   "1.00"

//--- входные параметры
input int Periods=2;          // Период 1-й Moving Average
input int Shift=38;           // Период 2-й Moving Average
input int SL=30;              // Stop Loss
input int TP=100;             // Take Profit
input int MAGIC=3072010;      // Magic Number советника

MqlTradeRequest trReq;
MqlTradeResult trRez;
int ma1Handle;
int ma2Handle;
int macdHandle;               // хэндл индикатора MACD
double ma1Val[];
double ma2Val[];
double macdVal[]; // динамический массив для хранения численных значений MACD для дневных баров
  
int sl;
int tp;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   //Set default vaules for all new order requests
      trReq.action=TRADE_ACTION_DEAL;
      trReq.magic=MAGIC;
      trReq.symbol=Symbol();                 // Trade symbol
      trReq.volume=0.1;                      // Requested volume for a deal in lots
      trReq.deviation=1;                     // Maximal possible deviation from the requested price
      trReq.type_filling=ORDER_FILLING_AON;  // Order execution type
      trReq.type_time=ORDER_TIME_GTC;        // Order execution time
      trReq.comment="MA Sample";
   //end
  
   //Create handle for 2 MA indicators
      ma1Handle=iMA(Symbol(),PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
      ma2Handle=iMA(Symbol(),PERIOD_CURRENT,Periods+Shift,0,MODE_EMA,PRICE_CLOSE);
   //---Получить хэндл индикатора MACD
      macdHandle=iMACD(NULL,PERIOD_D1,15,26,1,PRICE_CLOSE);
   //end
  
   //input parameters are ReadOnly
      tp=0;
      sl=0;
   //end
  
   //Suppoprt for acount with 5 decimals
      if(_Digits==5)
      {
         sl*=10;
         tp*=10;
      }
   //end
      
   return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
   MqlTick tick; //variable for tick info
   if(!SymbolInfoTick(Symbol(),tick))
   {
      Print("Failed to get Symbol info!");
      return;
   }
  
   //Copy latest MA indicator values into a buffer
   int copied=CopyBuffer(ma1Handle,0,0,4,ma1Val);
   if(copied>0)
      copied=CopyBuffer(ma2Handle,0,0,4,ma2Val);
      copied=CopyBuffer(macdHandle,0,0,4,macdVal);
   if(copied>0)
   {
      //If MAPeriod > MAPeriod + Shift -> BUY
      if(ma1Val[1]>ma2Val[1] && macdVal[1]>macdVal[2])
      {
         trReq.price=tick.bid;                   // SymbolInfoDouble(NULL,SYMBOL_BID);
         trReq.sl=tick.bid-_Point*sl;            // Stop Loss level of the order
         trReq.tp=tick.bid+_Point*tp;            // Take Profit level of the order
         trReq.type=ORDER_TYPE_BUY;              // Order type
         OrderSend(trReq,trRez);
      }
      //If MAPeriod < MAPeriod + Shift -> SELL
      else if(ma1Val[1]<ma2Val[1] && macdVal[1]<macdVal[2])
      {
         trReq.price=tick.ask;
         trReq.sl=tick.ask+_Point*sl;            // Stop Loss level of the order
         trReq.tp=tick.ask-_Point*tp;            // Take Profit level of the order
         trReq.type=ORDER_TYPE_SELL;             // Order type
         OrderSend(trReq,trRez);
      }
   }

  }
//+------------------------------------------------------------------+
 
Automated-Trading:

Простой советник по МА:

Автор: outkast

Здравствуйте, Outkast,

Я новичок в советниках, я только что импортировал Mr. tsaktuo esimpleMA, так как я действительно не понимаю код, я вижу, что он работает на моем графике, но я должен установить некоторые из значений MA, я не знаю, нужна помощь нужен класс или книга. ???

 

Я был рад найти ваш пример кода, так как он решил мою проблему с буферизацией МА и ее отображением на графике. Спасибо, что опубликовали его.

Единственный вопрос, который у меня возник, - как он принимает решение о закрытии открытого ордера?

Спасибо