Пропуск сигналов

 

//+------------------------------------------------------------------+
//|                                                     macd_exp.mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <stderror.mqh> // Стандартная библиотека ошибок
#include <stdlib.mqh>   // Стандартная библиотека

extern string _1_ = "===Параметры_модуля_ММ===";
extern bool   MM=false;
extern double ManLot=0.01;
extern double Risk=4;
extern int MA_period    =200;    //Период средней
extern int MacdFast     =25;     //Быстрая macd 
extern int MacdSlow     =52;     //Медленная macd
extern int MacdSignal   =1;      //Сигнальная macd
extern int TakeProfit   =50;     //Тейк профит
extern int StopLoss     =30;     //Стоп лосс
extern int MagicNumber  = 2020;  //Идентификатор позиций
extern int Slippage     =5;      //Проскальзывание цены
//----
int prevtime=0; 
int ticket;
int gi_212 = 1; 
//----

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
// Торговля по ценам открытия
   if(Time[0]==prevtime) return(0);//ждём появления нового бара
   prevtime = Time[0]; //если появился новый бар    
//----
//----
   double   MacdCurrent=iMACD(NULL,0,MacdFast, MacdSlow, MacdSignal,PRICE_CLOSE,MODE_MAIN,0);   //МАСД  на текущем тике
   double   MacdPrevious=iMACD(NULL,0,MacdFast, MacdSlow, MacdSignal,PRICE_CLOSE,MODE_MAIN,1);  //МАСД  на предыдущем тике
   double   MacdClose=iMACD(NULL,0,MacdFast, MacdSlow, MacdSignal,PRICE_CLOSE,MODE_MAIN,0);     //МАСД  на текущем тике
   double   MaCurrent=iMA(NULL,0,MA_period,0,MODE_LWMA,PRICE_CLOSE,0);                          //Средняя   
//----  
if   (  (MacdCurrent >=0)  && (MacdPrevious <0))//MACD пересекла нулевую линию вверх  
 {//ПОКУПАЕМ

  ticket=OrderSend(Symbol(),0,Lots(),Ask,Slippage,Bid-StopLoss*Point,Ask+TakeProfit*Point, "EXPERT",MagicNumber,0,CLR_NONE);
  if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return (0); }            
   }
 //----------------------------------------------------------------
 //}

   return(0);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Функция для расчета лота                                         |
//+------------------------------------------------------------------+
double Lots() {//Функция ММ - расчет размера лота
   double _LOTS ;
   int Size;
   double Size_LOTSTEP = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2);
   double Size_MARGINREQUIRED = NormalizeDouble(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 4);
   double e = 100.0 * (Size_MARGINREQUIRED + 5.0);
   if (Size_LOTSTEP == 0.01) Size = 2;
   else Size = 1;
   gi_212 = Size;
   if (MM == TRUE) _LOTS = NormalizeDouble(AccountFreeMargin() / (e / Risk) - 0.05, gi_212);
   else _LOTS = ManLot;
   double _MINLOT = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), 2);
   double _MAXLOT = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), 2);
   if (gi_212 == 2) _MINLOT = 0.01;
   if (_LOTS < _MINLOT) _LOTS = _MINLOT;
   if (_LOTS > _MAXLOT) _LOTS = _MAXLOT;
   return (_LOTS);
}  

 Мужики, подскажите плиз, почему эксп пропускает сигналы? хотя судя по графику условия выполняются...макд больше нуля, цена выше средней-покупаем, Всю голову изломал((

 
FxPro2:

 Мужики, подскажите плиз, почему эксп пропускает сигналы? хотя судя по графику условия выполняются...макд больше нуля, цена выше средней-покупаем, Всю голову изломал((

Возможно это проблемы с "0" баром... Попробуйте так... Вы же работаете по ценам открытия нового бара... "0"-ой бар не пользуйте -  глючит...

Кроме этого явно укажите таймфрейм, например, MacdCurrent=iMACD(NULL,PERIOD_H4,... и следите за соответствием с периодом тестирования в окне тестера.

В окне тестера период меньше можно ставить, больше, чем ТФ, на котором работает эксперт - нельзя. 

Не забудьте закачать историю по инструменту и тестировать на модели тестера: "по ценам открытия (быстрый метод...)"... и вперед...

П.С.  Условие на покупку, когда цена выше средней - у Вас не прописано...

 

   double   MacdCurrent=iMACD(NULL,0,MacdFast, MacdSlow, MacdSignal,PRICE_CLOSE,MODE_MAIN,1);   //МАСД  на 1-ом баре
   double   MacdPrevious=iMACD(NULL,0,MacdFast, MacdSlow, MacdSignal,PRICE_CLOSE,MODE_MAIN,2);  //МАСД  на 2-ом баре
   double   MacdClose=iMACD(NULL,0,MacdFast, MacdSlow, MacdSignal,PRICE_CLOSE,MODE_MAIN,1);     //МАСД  на 1-ом баре
   double   MaCurrent=iMA(NULL,0,MA_period,0,MODE_LWMA,PRICE_CLOSE,1);    

 

 

Спасибо! Обязательно потестирую сегодня!

Средняя да, не прописана.... это я пытался определить почему не открывается на пересечении макда.... кто виноват, средняя или macd

 
FxPro2:

Спасибо! Обязательно потестирую сегодня!

Средняя да, не прописана.... это я пытался определить почему не открывается на пересечении макда.... кто виноват, средняя или macd


Пробуйте, смотрите, ошибка, скорее всего, в использовании "0"-го бара или в несогласованности ТФ...
Причина обращения: