Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 413

 
first_may:
¿No está claro lo que se quería decir?
Significado:Insertar el código correctamente en el foro
 
Karputov Vladimir:
Me refería a lo siguiente:Insertar el código correctamente en el foro

Ya veo. Compruebo la ubicación del tenkan y el kinjun en la primera y segunda vela. Si hay una señal, introduzco una alerta. Pero me gustaría que fuera algo único. Por favor, ayúdame. Aquí está el código.

 
//+------------------------------------------------------------------+
//|                                                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:

Ya veo. Compruebo la ubicación del tenkan y el kinjun en la primera y segunda vela. Si hay una señal, introduzco una alerta. Pero me gustaría que fuera algo único. Por favor, ayúdame. Aquí está el código.

No más de una alerta en una barra:

//+------------------------------------------------------------------+
//|                                                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:

No hay más de una alerta por barra:

¡¡¡Muchas gracias!!!
 

¡Hola a todos!

¿Cómo hacer que un EA omita 1 señal después de una operación perdedora? ( muy buena estrategia Z )

Explicar en palabras, el propio código es capaz de implementar.

 
Leanid Aladzyeu:

¡Hola a todos!

¿Cómo hacer que un EA omita 1 señal después de una operación perdedora? ( muy buena estrategia Z )

Explicar en palabras, el propio código es capaz de implementar.

En caso de pérdida, dé un valor determinado a la variable global del terminal y póngala a cero a la primera señal. La función de negociación controla este valor y decide si se abre una nueva operación o no.

En otras palabras, la orden de trabajo es aproximadamente la siguiente:

a) Beneficio de la pista;

b) cuente las señales, marque la casilla de verificación en caso de pérdida, si no hay ninguna otra señal para operar todavía, restablezca la casilla de verificación cuando se produzca la primera señal después de la pérdida;

c) marque la casilla y decida si quiere operar o esperar.

Es más conveniente utilizar GPT, se guardan cuando el terminal se bloquea, las variables simples en el código se pueden restablecer por cualquier estornudo y el Asesor Experto funcionará con errores.

 
Vitalie Postolache:

En caso de pérdida, asigna un valor determinado a la variable global del terminal y ponlo a cero a la primera señal. La función de negociación controla este valor y decide si se abre una nueva operación o no.

Es decir, el orden de trabajo es aproximadamente el siguiente:

a) Beneficio de la pista;

b) contar las señales, marcar la casilla en caso de pérdida, si aún no hemos tenido otra señal para operar, restablecer la casilla cuando llegue la primera señal después de una pérdida;

c) marque la casilla y decida si quiere operar o esperar.

GPT es más cómodo de usar, se guardan cuando el terminal se bloquea, las variables simples en el código se pueden restablecer por cualquier estornudo y el Asesor Experto funcionará con errores.

Todos entendidos excepto uno . ¿Cómo hacer un contador de señales?
¿Y qué?
if("Condición" == тру)
i ++;
 
Leanid Aladzyeu:
Lo tengo todo menos uno. ¿Cómo hacer un contador de señales?
¿Verdad?
if("Condición"==true)
i ++;
Así:Variables estáticas.
 

escupe

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

posible pérdida de datos debido a la conversión del tipo .mq4 1697 29

tipo Doble en SL.