Krokus377
Андрей

 
Уровень 16

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


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

Рейтинг 2157



РЕКОМЕНДУЮ



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

Андрей, приветствую! Может подскажите, что нужно подправить в коде советника? Дело в том, что он работает, только на валютных парах с пятизначными котировками, а на парах с трёхзначными (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
  • Просмотров: 1327
  • 24 сентября 2020, 00:37
  • Krokus377
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

Брокер для ваших роботов, 15 лет на рынке

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

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

  35  AM2 Сообщений: 16545 - Андрей

  • 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

  35  AM2 Сообщений: 16545 - Андрей

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

avatar

  35  AM2 Сообщений: 16545 - Андрей

  • 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

  35  AM2 Сообщений: 16545 - Андрей

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

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

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

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