Krokus377
Андрей

 
Уровень 16

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2088



РЕКОМЕНДУЮ



Подправить код

Андрей, приветствую! Может подскажите, что нужно подправить в коде советника? Дело в том, что он работает, только на валютных парах с пятизначными котировками, а на парах с трёхзначными (EUR/JPY и подобными), не работает. В журнале тестера пишет:

TestGenerator: unmatched data error (low value 123.50500 at 2020.09.18 14:00 and price 123.49900 mismatched)

TestGenerator: unmatched data error (high value 123.69100 at 2020.09.18 14:00 is not reached from the least timeframe, high price 123.68500 mismatches)

Править, как я понимаю, нужно здесь:

int init() {
   if (Digits==3 || Digits==5) {
      TP = 10 * TP;
      SL = 10 * SL;
      }
   return (0);
}
  • 0
  • Просмотров: 1128
  • 24 сентября 2020, 00:37
  • Krokus377
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Прошу написать советник Rei
Следующая запись в группе  
Please write a simple mt4 expert advisor using this indicator.
22 сентября 2020
25 сентября 2020

Комментарии (8)

+
0
скиньте весь код я посмотрю
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 24 сентября 2020, 18:47
+
0
#property strict

input int MAGICMA = 7575000;
input double lots = 0.1;
extern double TP = 50.0;
extern double SL = 60.0;
input int hour1 = 8;
input int hour2 = 23;
input int PeriodMA1 = 14;
input int PeriodMA2 = 14;
input int PeriodMA3 = 50;
input int PeriodMA4 = 5;

int init() {
   if (Digits==3 || Digits==5) {
      TP = 10 * TP;
      SL = 10 * SL;
      }
   return (0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckForSell(double dStopLoss, double dTakeProfit)
  {
   
   if(Volume[0]>25) return;
   int res=OrderSend(Symbol(),OP_SELL,lots,Bid,20 /*slippage*/,dStopLoss,dTakeProfit,"",MAGICMA,0,Red);
   return;

  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckForBuy(double dStopLoss, double dTakeProfit)
  {
   
   if(Volume[0]>25) return;
   int res=OrderSend(Symbol(),OP_BUY,lots,Ask,20 /*slippage*/,dStopLoss,dTakeProfit,"",MAGICMA,0,Blue);
   return;
 
  }
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {   
   double ma1 = iMA(NULL,PERIOD_CURRENT,PeriodMA1,0,MODE_LWMA,PRICE_OPEN, 0);
   double ma2 = iMA(NULL,PERIOD_CURRENT,PeriodMA2,0,MODE_LWMA,PRICE_CLOSE,0);
   double ma3 = iMA(NULL,PERIOD_CURRENT,PeriodMA3,0,MODE_SMA, PRICE_CLOSE,0);
   double ma4 = iMA(NULL,PERIOD_CURRENT,PeriodMA4,0,MODE_SMA, PRICE_CLOSE,0);
   
   double ma1ma2 = ma1-ma2;
   double ma2ma1 = ma2-ma1;
   double ma3ma4 = ma3-ma4;
   double ma4ma3 = ma4-ma3;
   
   int CountSymbolPositions=0;
 
   for(int trade=OrdersTotal()-1;trade>=0;trade--)
    {
      if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()==Symbol())
         {
         if((OrderType()==OP_SELL||OrderType()==OP_BUY) && OrderMagicNumber()==MAGICMA)
         CountSymbolPositions++;
         }
    }
        
   if ((ma3ma4<0.0048) && 
       (ma3>ma1) && 
       (ma3>ma2) && 
       (Close[1]<Close[2]) && 
       (Close[2]<Open[2]) && 
       (CountSymbolPositions<1) && 
       (Hour()>hour1) && 
       (Hour()<hour2) && 
       (ma1ma2<0.0013) && 
       (ma1ma2>0.0004) )
   {   
       double dTakeProfit = Bid - (TP*Point);
       double dStopLoss   = Ask + (SL*Point);
       CheckForSell(dStopLoss, dTakeProfit);
   }
   
   if ((ma4ma3<0.0048) && 
       (ma3<ma1) && 
       (ma3<ma2) && 
       (Close[1]>Close[2]) && 
       (Close[2]>Open[2]) && 
       (CountSymbolPositions<1) && 
       (Hour()>hour1) && 
       (Hour()<hour2)  && 
       (ma2ma1<0.0013) && 
       (ma2ma1>0.0004) )
   {
       double dTakeProfit = Ask + (TP*Point);
       double dStopLoss   = Bid - (SL*Point);
       CheckForBuy(dStopLoss, dTakeProfit);
   }
       
}
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 24 сентября 2020, 23:28
+
0
посмотрю чуть позже
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 25 сентября 2020, 17:45
+
0
есть некоторое несоответствие данных. загрузил данные по символу заново, ошибки не стало:

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 25 сентября 2020, 20:30
+
0
В смысле, не соответствие котировок в тестере?
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 25 сентября 2020, 23:15
+
0
Я не заметил, что это тест по евро/доллару. Так я же писал, что с пятизнаком всё в порядке. Не работают трёхзначные котировки, все йеновые валютные пары.
Редактирован: 25 сентября 2020, 23:25
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 25 сентября 2020, 23:19
+
+1
работает и на ене, только сигнал редкий:



и ваш вариант работает тот что я немного подправил:


//+------------------------------------------------------------------+
//|                                                        4MA11.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property strict

input double lots = 0.1;
extern double TP = 50;
extern double SL = 60;
input int hour1 = 8;
input int hour2 = 23;
input int PeriodMA1 = 10;
input int PeriodMA2 = 20;
input int PeriodMA3 = 30;
input int PeriodMA4 = 40;
input int Slip = 100;
input int MAGICMA = 123;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   if(Digits==3 || Digits==5)
     {
      TP = 10 * TP;
      SL = 10 * SL;
     }
   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckForSell(double dStopLoss, double dTakeProfit)
  {
   if(Volume[0]>25)
      return;
   int res=OrderSend(Symbol(),OP_SELL,lots,Bid,Slip,dStopLoss,dTakeProfit,"",MAGICMA,0,Red);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckForBuy(double dStopLoss, double dTakeProfit)
  {
   if(Volume[0]>25)
      return;
   int res=OrderSend(Symbol(),OP_BUY,lots,Ask,Slip,dStopLoss,dTakeProfit,"",MAGICMA,0,Blue);
   return;
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double ma1 = iMA(NULL,PERIOD_CURRENT,PeriodMA1,0,MODE_LWMA,PRICE_OPEN, 0);
   double ma2 = iMA(NULL,PERIOD_CURRENT,PeriodMA2,0,MODE_LWMA,PRICE_CLOSE,0);
   double ma3 = iMA(NULL,PERIOD_CURRENT,PeriodMA3,0,MODE_SMA, PRICE_CLOSE,0);
   double ma4 = iMA(NULL,PERIOD_CURRENT,PeriodMA4,0,MODE_SMA, PRICE_CLOSE,0);

   double ma1ma2 = ma1-ma2;
   double ma2ma1 = ma2-ma1;
   double ma3ma4 = ma3-ma4;
   double ma4ma3 = ma4-ma3;

   int CountSymbolPositions=0;

   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()==Symbol())
        {
         if((OrderType()==OP_SELL||OrderType()==OP_BUY) && OrderMagicNumber()==MAGICMA)
            CountSymbolPositions++;
        }
     }

   if((ma3ma4<0.0048) &&
      (ma3>ma1) &&
      (ma3>ma2) &&
      (Close[1]<Close[2]) &&
      (Close[2]<Open[2]) &&
      (CountSymbolPositions<1) &&
      (Hour()>hour1) &&
      (Hour()<hour2) &&
      (ma1ma2<0.0013) &&
      (ma1ma2>0.0004))
     {
      double dTakeProfit = Bid - (TP*_Point);
      double dStopLoss   = Ask + (SL*_Point);
      CheckForSell(dStopLoss, dTakeProfit);
     }

   if((ma4ma3<0.0048) &&
      (ma3<ma1) &&
      (ma3<ma2) &&
      (Close[1]>Close[2]) &&
      (Close[2]>Open[2]) &&
      (CountSymbolPositions<1) &&
      (Hour()>hour1) &&
      (Hour()<hour2)  &&
      (ma2ma1<0.0013) &&
      (ma2ma1>0.0004))
     {
      double dTakeProfit = Ask + (TP*_Point);
      double dStopLoss   = Bid - (SL*_Point);
      CheckForBuy(dStopLoss, dTakeProfit);
     }

  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 сентября 2020, 09:03
+
0
А у меня, мой вариант не работает, а ваш работает. Спасибо большое!
avatar

  16  Krokus377 Автор Сообщений: 226 - Андрей

  • 27 сентября 2020, 00:31

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