Скачать MetaTrader 5

Помогите с советником

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Roman Shutov
190
Roman Shutov  

Доброго времени суток. Пытаюсь сделать советник на основе индикатора Ichimoku, так как в программировании я не силен, решил сделать по аналогии советника MACD Simple, если быть более конкретным там почти все с стандартного советника.

В чем суть вопроса. Компилятор ошибок не выдал, но в тестере стратегий категорически отказывается торговать (просто не открывает позиции и все). Если использовать данный код как скрип (вместо OrderSend выскакивает MessageBox покупки или продажи) все работает без проблем.

Вот собственно сам код:

//+------------------------------------------------------------------+
//|                                                     Ichimoku.mq4 |
//|                                    Copyright 2016, Roman Shutov. |
//|                              https://www.mql5.com/ru/users/ainor |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Roman Shutov."
#property link      "https://www.mql5.com/ru/users/ainor"
#property version   "1.00"
#property strict
//--- input parameters
input int      Tenkan=9;
input int      Kijun=26;
input int      SenkouSpanB=52;
input int      TakeProfit=100;
input double   TrailingStop=30;
input int      StopLoss=60;
input double   Lots=0.1;
input int      Magic=54321;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
   double Tenkan_sen;
   double Kijun_sen;
   double SenkouSpan_A;
   double SenkouSpan_B;
   double ChikouSpan;
   int cnt,ticket,total;
//--- Данные индикатора
   Tenkan_sen=iIchimoku(NULL,0,Tenkan,Kijun,SenkouSpanB,MODE_TENKANSEN,0);
   Kijun_sen=iIchimoku(NULL,0,Tenkan,Kijun,SenkouSpanB,MODE_KIJUNSEN,0);
   SenkouSpan_A=iIchimoku(NULL,0,Tenkan,Kijun,SenkouSpanB,MODE_SENKOUSPANA,-Kijun);
   SenkouSpan_B=iIchimoku(NULL,0,Tenkan,Kijun,SenkouSpanB,MODE_SENKOUSPANB,-Kijun);
   ChikouSpan=iIchimoku(NULL,0,Tenkan,Kijun,SenkouSpanB,MODE_CHIKOUSPAN,Kijun);

   total=OrdersTotal();
   if(total<1)
     {
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("Нет денег. Маржа = ",AccountFreeMargin());
         return;
        }
     }
   if((Tenkan_sen>Kijun_sen) && (SenkouSpan_A>SenkouSpan_B) && (ChikouSpan>Close[Kijun]))
     {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss,Ask+TakeProfit*Point,"macd sample",Magic,0,Green);
      if(ticket>0)
        {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("BUY order opened : ",OrderOpenPrice());
        }
      else
         Print("Error opening BUY order : ",GetLastError());
      return;
     }

   if((Tenkan_sen<Kijun_sen) && (SenkouSpan_A<SenkouSpan_B) && (ChikouSpan<Close[Kijun]))
     {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss,Bid-TakeProfit*Point,"Ichimoku",Magic,0,Red);
      if(ticket>0)
        {
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("BUY order opened : ",OrderOpenPrice());
        }
      else
         Print("Error opening BUY order : ",GetLastError());
      return;
     }
   for(cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {
            //--- should it be closed?
            if(Tenkan_sen<Kijun_sen)
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {
            //--- should it be closed?
            if(Tenkan_sen>Kijun_sen)
              {
               //--- close order and exit
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
                  Print("OrderClose error ",GetLastError());
               return;
              }
            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
                        Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
        }
     }
//---
  }
//+------------------------------------------------------------------+
Vladimir Karputov
Модератор
61344
Vladimir Karputov  

Ну, для начала, код нужно вставлять правильно: Правильно вставляем код на форуме.

Второе: как Вы думаете, что Вы сделали:

  1. скрипт
  2. индикатор
  3. советник? 

Roman Shutov
190
Roman Shutov  

Надеялся что советник, но что то мне подсказывает что скрипт.

Заменил OnStart на OnInit вроде бы заработал. Спасибо за помощь)

Vladimir Karputov
Модератор
61344
Vladimir Karputov  
Roman Shutov:
Надеялся что советник, но что то мне подсказывает что скрипт.

Для того, чтобы знать, какие служебные функции должны быть в советнике сгенерируйте себе такой советник в Мастере MQL4: в редакторе MetaEditor на корневой папке MQL4 правый клик мышки и выбор меню "Новый файл" - в Мастере MQL4 выбрать "Советник (шаблон)" - ведите имя советника - никаких чекбоксов не нажимайте. В итоге будет такой шаблон:

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+


Вот это и есть советник. 

Олег avtomat
5683
Олег avtomat  
Karputov Vladimir:

Для того, чтобы знать, какие служебные функции должны быть в советнике сгенерируйте себе такой советник в Мастере MQL4: в редакторе MetaEditor на корневой папке MQL4 правый клик мышки и выбор меню "Новый файл" - в Мастере MQL4 выбрать "Советник (шаблон)" - ведите имя советника - никаких чекбоксов не нажимайте. В итоге будет такой шаблон:


Вот это и есть советник. 

точнее сказать -- заготовка, или иначе, болванка

которую ещё предстоит наполнить содержимым 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий