Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 413

 
first_may:
Не понятно, что имели ввиду?
Имелось в виду следующее: Правильно вставляем код на форуме
 
Karputov Vladimir:
Имелось в виду следующее: Правильно вставляем код на форуме

Ясно. Проверяю расположение тенкана и кинджуна на первой и второй свече. Если есть сигнал, то ввожу алерт. Но хотелось бы, что бы это было один раз. Прошу помощи. Вот код.

 
//+------------------------------------------------------------------+
//|                                                main_Ichimoku.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"



//+------------------------------------------------------------------+
//| Объявим переменные для хранения настроек индикаторов             |
//+------------------------------------------------------------------+
int IKHtenkansen=8;
int IKHkijunsen=24;
int IKHsenkouspanb=48;
//+------------------------------------------------------------------+
//| Объявим переменные для хранения хэндлов индикаторов              |
//+------------------------------------------------------------------+
int h_ich=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Объявим необходимые массивы для хранения данных индикаторов      |
//+------------------------------------------------------------------+
double ich1_buffer[]; 
double ich2_buffer[]; 
//+------------------------------------------------------------------+
//| Объявим переменные для хранения сигналов индикаторов             |
//+------------------------------------------------------------------+
int SignalICH;



//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   SignalICH=TradeSignal_20();
   
   
   Comment("SignalICH: "+(string)SignalICH);
}



//+------------------------------------------------------------------+
//| Функция                                             |
//+------------------------------------------------------------------+
int TradeSignal_20()
{
   int sig=0;

   if(h_ich==INVALID_HANDLE)
   {
      h_ich=iIchimoku(Symbol(),Period(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb);
      return(0);
   }
   else
   {
      if (CopyBuffer(h_ich,0,0,3,ich1_buffer)<2) return(0); // TENKANSEN_LINE
      if (CopyBuffer(h_ich,1,0,3,ich2_buffer)<2) return(0); // KIJUNSEN_LINE
      if (!ArraySetAsSeries(ich1_buffer,true)) return(0);
      if (!ArraySetAsSeries(ich2_buffer,true)) return(0);
   }
   
   //--- проводим проверку условия и устанавливаем значение для sig
   if (ich1_buffer[1]>ich2_buffer[1]) sig=1;
   else if(ich1_buffer[1]<ich2_buffer[1]) sig=-1;
   else sig=0;
   
   if (ich1_buffer[1]>ich2_buffer[1])
      if (ich1_buffer[2]<ich2_buffer[2])
         Alert(Symbol()+": покупка");
   
   if (ich1_buffer[1]<ich2_buffer[1])
      if (ich1_buffer[2]>ich2_buffer[2])
         Alert(Symbol()+": продажа");
   
   
   //--- возвращаем торговый сигнал
   return (sig);
}
 
first_may:

Ясно. Проверяю расположение тенкана и кинджуна на первой и второй свече. Если есть сигнал, то ввожу алерт. Но хотелось бы, что бы это было один раз. Прошу помощи. Вот код.

На одном баре не более одного алерта:

//+------------------------------------------------------------------+
//|                                                main_Ichimoku.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Объявим переменные для хранения настроек индикаторов             |
//+------------------------------------------------------------------+
int IKHtenkansen=8;
int IKHkijunsen=24;
int IKHsenkouspanb=48;
//+------------------------------------------------------------------+
//| Объявим переменные для хранения хэндлов индикаторов              |
//+------------------------------------------------------------------+
int h_ich=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Объявим необходимые массивы для хранения данных индикаторов      |
//+------------------------------------------------------------------+
double ich1_buffer[];
double ich2_buffer[];
//+------------------------------------------------------------------+
//| Объявим переменные для хранения сигналов индикаторов             |
//+------------------------------------------------------------------+
int SignalICH;
//+------------------------------------------------------------------+
//| Объявим переменную-флаг разрешения/запрета алерта                |
//+------------------------------------------------------------------+
bool bool_alert=false;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static datetime prevtime=0;
   datetime time_zero[];
   CopyTime(Symbol(),Period(),0,1,time_zero);
   
   if(!bool_alert)
      if(prevtime!=time_zero[0])
         bool_alert=true;
   prevtime=time_zero[0];
   
   SignalICH=TradeSignal_20();

   Comment("SignalICH: "+(string)SignalICH);
  }
//+------------------------------------------------------------------+
//| Функция                                                          |
//+------------------------------------------------------------------+
int TradeSignal_20()
  {
   int sig=0;

   if(h_ich==INVALID_HANDLE)
     {
      h_ich=iIchimoku(Symbol(),Period(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb);
      return(0);
     }
   else
     {
      if(CopyBuffer(h_ich,0,0,3,ich1_buffer)<2) return(0); // TENKANSEN_LINE
      if(CopyBuffer(h_ich,1,0,3,ich2_buffer)<2) return(0); // KIJUNSEN_LINE
      if(!ArraySetAsSeries(ich1_buffer,true)) return(0);
      if(!ArraySetAsSeries(ich2_buffer,true)) return(0);
     }

//--- проводим проверку условия и устанавливаем значение для sig
   if(ich1_buffer[1]>ich2_buffer[1]) sig=1;
   else if(ich1_buffer[1]<ich2_buffer[1]) sig=-1;
   else sig=0;8

   if(ich1_buffer[1]>ich2_buffer[1])
      if(ich1_buffer[2]<ich2_buffer[2])
         if(bool_alert)
           {
            Alert(Symbol()+": покупка");
            //--- опускаем флаг
            bool_alert=false;
           }

   if(ich1_buffer[1]<ich2_buffer[1])
      if(ich1_buffer[2]>ich2_buffer[2])
         if(bool_alert)
           {
            Alert(Symbol()+": продажа");
            //--- опускаем флаг
            bool_alert=false;
           }

//--- возвращаем торговый сигнал
   return (sig);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

На одном баре не более одного алерта:

Спасибо большое!!!
 

Привет Всем!

Как сделать что бы советник после убыточной сделки  пропускал 1 сигнал? ( очень хороший Z-стратегий ) 

В словах объясните, код  сам в состоянии реализовать. 

 
Leanid Aladzyeu:

Привет Всем!

Как сделать что бы советник после убыточной сделки  пропускал 1 сигнал? ( очень хороший Z-стратегий ) 

В словах объясните, код  сам в состоянии реализовать. 

При убытке придавать определённое значение глобальной переменной терминала и сбрасывать его на ноль при первом сигнале. Торговая функция следит за этим значением и принимает решение, открывать новую  сделку или нет.

То есть порядок работы примерно такой:

а) отслеживаем прибыль;

б) считаем сигналы, взводим флажок в случае убытка, если пока ещё не было другого сигнала на торговлю, сбрасываем флажок при поступлении первого сигнала после убытка;

в) смотрим флажок и принимаем решение, торговать или ждать.

ГПТ примениять удобнее, они сохраняются при авариях терминала, простые переменные в коде могут сброситься от любого чиха и советник будет работать с ошибками.

 
Vitalie Postolache:

При убытке придавать определённое значение глобальной переменной терминала и сбрасывать его на ноль при первом сигнале. Торговая функция следит за этим значением и принимает решение, открывать новую  сделку или нет.

То есть порядок работы примерно такой:

а) отслеживаем прибыль;

б) считаем сигналы, взводим флажок в случае убытка, если пока ещё не было другого сигнала на торговлю, сбрасываем флажок при поступлении первого сигнала после убытка;

в) смотрим флажок и принимаем решение, торговать или ждать.

ГПТ примениять удобнее, они сохраняются при авариях терминала, простые переменные в коде могут сброситься от любого чиха и советник будет работать с ошибками.

Все понял, кроме одного . Как сделать счётчик сигнала? 
Так?:
if("Условие"== тру)
 i ++;
 
Leanid Aladzyeu:
Все понял, кроме одного . Как сделать счётчик сигнала? 
Так?:
if("Условие"== тру)
 i ++;
Например так: Статические переменные.
 

плюется

sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS));

 possible loss of data due to type conversion .mq4 1697 29

 тип Добле у СЛ. 

 


Причина обращения: