[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 498

 
yosuf:
¿Es necesario crear programas separados (tareas) para desactivar los terminales habilitados?
Docente, lee con atención el documento del enlace de TarasBY y no te inventes tonterías.
 

Aquí está mi tutorial de búho crudo de prueba:

//+---------------------------------------------------------------------------------------+
//|                               Strategy №1 for H1.mq4                                  |
//|                                        hoz                                            |
//|                                                                                       |
//+---------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

//----- Входные параметры -----------
extern string     H1 = "___ Общие параметры индикаторов ___";
extern int        i_TF = 60;
extern string     H2 = "_____ Параметры быстрой машки _____";
extern int        i_maFastPeriod = 5,
                  i_maFastShift = 0,
                  i_maFastMethod = 1;
extern string     H3 = "____ Параметры медленной машки ____";
extern int        i_maSlowPeriod = 19,
                  i_maSlowShift = 0,
                  i_maSlowMethod = 1;
extern string     H4 = "_______ Параметры Моментума _______";
extern int        i_momPeriod = 18;
extern string     H5 = "_______ Параметры Стохастика ______";
extern int        i_stoch_D = 3,                   // Сигнальная линия
                  i_stoch_K = 13,                  // Главная линия
                  i_stoch_slowing = 3;             // Замедление
                  
int g_ticket,                                      // Тикет текущей позиции
    g_type;                                        // Тип текущей позиции

//Иднентификаторы типов сигналов
#define CROSSINGTOUP                 1             // Пересечение быстрой медленную снизу вверх
#define CROSSINGTODOWN              -1             // Пересечение быстрой медленную сверху вниз
#define CROSSINGWAIT                 0             // Отсуствие пересечения машек

#define SIGNAL_BUY                   1             // Сигнал покупки
#define SIGNAL_SELL                 -1             // Сигнал продажи
#define SIGNAL_NO                    0             // Отсуствие сигнала

//+---------------------------------------------------------------------------------------+
//| Функция инициализации эксперта                                                        |
//+---------------------------------------------------------------------------------------+
int init()
  {
   
   return(0);
  }
//+---------------------------------------------------------------------------------------+
//| Функция деинициализации эксперта                                                      |
//+---------------------------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)
{
      if ((i_maFast2<i_maSlow2) && (i_maFast1>i_maSlow1))             // Если быстрая скользящая пересекла медленную снизу вверх..
      return(CROSSINGTOUP);                                           //.. значит, - пересечение вверх
                                                 
      if ((i_maFast2>i_maSlow2) && (i_maFast1<i_maSlow1))             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
      return(CROSSINGTODOWN);                                         //..значит, - пересечение вниз
 
   return(CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2)
{
   for(int i=1;i<=Bars;i++)
   {
      if((stochD2<stochK2) && (stochD1>stochK1))                     // Если сигнальная линия пересекла главную снизу вверх..
      return(CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if((stochD2>stochK2) && (stochD1<stochK1))                     // Если сигнальная линия пересекла главную сверху вниз..
      return(CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   }
   return(CROSSINGWAIT);                                             // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
void GetMomentumSignal()
{
   double momentum = iMomentum(Symbol(),i_TF,i_momPeriod,0,0);
}

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}

//+---------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                   |
//+---------------------------------------------------------------------------------------+
void FindOrders()
{
   
}
//+---------------------------------------------------------------------------------------+
//| Функция start эксперта                                                                |
//+---------------------------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2) la función obtiene la señal de cruce.

intGetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2) la función recibe la señal del estocástico.

La función void GetMomentumSignal() obtiene el valor del impulso.

La función int GetSignal() obtendrá la señal general basada en las 3 funciones anteriores y no sólo en ellas. La cuestión es la siguiente. Como la funciónint GetSignal() es la principal, por así decirlo, y obtiene la señal principal, obtengo todos los valores de los flaps(i_maFast1,i_maFast2, i_maSlow1 ei_maSlow2) y de los estocásticos(stochD1,stochD2,stochK1,stochK2)

¿He hecho bien en optimizar el código?

Por supuesto, todos los parámetros obtenidos en la funciónGetSignal() se pasan por referencia a las funciones correspondientes.

Pero aquí este fragmento

     if( GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);

hay un error en la compilación:

'&' - variable expected E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 31)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 50)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 69)
'&' - variable expected	E:\Insall'd soft's\Forex\Admiral Markets\experts\Strategy №1 for H1.mq4 (109, 88)
4 ошибок, 0 предупреждений
¿Por qué?

 
No me gusta hurgar en el código de la izquierda, pero enseguida me llamó la atención por qué hay una & (!) después de doble en las funciones. Esto es lo que provoca los errores.
 
hoz:

Aquí está mi tutorial de búho crudo de prueba:

Aparece un error al compilar:

¿Por qué?

Porque sí:

//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal()
{
   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }
      if( GetCrossingMa(i_maFast1, i_maFast2, i_maSlow1, i_maSlow2)==CROSSINGTOUP || i_maFast1>i_maSlow1 )
      return(SIGNAL_BUY);
}
 
borilunad:
No me gusta hurgar en el código personalizado, pero enseguida me di cuenta de por qué hay & (!) después del doble en las funciones. Esto es lo que provoca los errores.

Así que tiene sentido. Se trata de transferir parámetros a través de enlaces.

Para evitar explicar el código en detalle, lo explicaré brevemente.

Hay 3 funciones:(int GetCrossingMa, int GetStochSignal y int GetSignal())

La función int GetSignal() obtiene los valores de los flaps y otros indicadores que se pasan por referenciaa las funcionesno centrales(int GetCrossingMa eint GetStochSignal) para obtener las señales correspondientes en ellas. Quiero hacerlo para evitar obtener los mismos datos en diferentes funciones. No creo que sea prudente calcular la misma máscara en 2 o más funciones. Es más fácil calcularlo una vez y ya está. ¿Por qué gastar recursos adicionales en esto?

 
hoz:

Así que tiene sentido. Se trata de transferir parámetros a través de enlaces.

Para evitar explicar el código en detalle, lo explicaré brevemente.

Hay 3 funciones:(int GetCrossingMa, int GetStochSignal y int GetSignal())

La función int GetSignal() obtiene los valores de los flaps y otros indicadores que se pasan por referenciaa las funcionesno centrales(int GetCrossingMa eint GetStochSignal) para obtener las señales correspondientes en ellas. Quiero hacerlo para evitar obtener los mismos datos en diferentes funciones. No creo que sea prudente calcular las mismas máscaras en 2 o más funciones. Es más fácil calcularlo una vez y ya está. ¿Por qué gastar recursos adicionales en esto?

¿Has programado en otro lenguaje que no sea µl4?

 
hoz:

Aquí está mi tutorial de búho crudo de prueba:

int GetCrossingMa(double& i_maFast1, double& i_maFast2, double& i_maSlow1, double& i_maSlow2) la función obtiene la señal de cruce.

intGetStochSignal(double& stochD1, double& stochD2, double& stochK1, double& stochK2) la función recibe la señal del estocástico.

La función void GetMomentumSignal() obtiene el valor del impulso.

La función int GetSignal() obtendrá la señal general basada en las 3 funciones anteriores y no sólo en ellas. La cuestión es la siguiente. Como la funciónint GetSignal() es la principal, por así decirlo, y obtiene la señal principal, obtengo todos los valores de los flaps(i_maFast1,i_maFast2, i_maSlow1 ei_maSlow2) y de los estocásticos(stochD1,stochD2,stochK1,stochK2)

¿He hecho bien en optimizar el código?

Por supuesto, todos los parámetros obtenidos en la funciónGetSignal() se pasan por referencia a las funciones correspondientes.

Pero aquí este fragmento

hay un error durante la compilación:

¿Por qué?

Esto puede ser una variante de la búsqueda de señales en la barra que necesitamos:

//+---------------------------------------------------------------------------------------+
//| Проверка пересечения скользящих средних                                               |
//+---------------------------------------------------------------------------------------+
int GetCrossingMa (int fi_Bar = 1)
{
    double i_maFast1 = iMA (Symbol(), i_TF, i_maFastPeriod, i_maFastShift, i_maFastMethod, 0, fi_Bar),      // Вычисляем быстрые скользящие..
           i_maFast2 = iMA (Symbol(), i_TF, i_maFastPeriod, i_maFastShift, i_maFastMethod, 0, fi_Bar + 1),    //..средние
           i_maSlow1 = iMA (Symbol(), i_TF, i_maSlowPeriod, i_maSlowShift, i_maSlowMethod, 0, fi_Bar),      // Вычисляем медленные скользящие..
           i_maSlow2 = iMA (Symbol(), i_TF, i_maSlowPeriod, i_maSlowShift, i_maSlowMethod, 0, fi_Bar + 1);    //..средние
//----
    if (i_maFast2 < i_maSlow2) if (i_maFast1 > i_maSlow1)             // Если быстрая скользящая пересекла медленную снизу вверх..
    return (CROSSINGTOUP);                                           //.. значит, - пересечение вверх
    if (i_maFast2 > i_maSlow2) if (i_maFast1 < i_maSlow1)             // Если быстрая скользящая средняя пересекла медленную сверху вниз..
    return (CROSSINGTODOWN);                                         //..значит, - пересечение вниз
//----
    return (CROSSINGWAIT);                                              // Ожидаем пересечения
}

//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Стохастика                                                       |
//+---------------------------------------------------------------------------------------+
int GetStochSignal (int fi_Bar = 1)
{
    double stochD1 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 1, fi_Bar),     // Вычисляем значения сигнальной линии..
           stochD2 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 1, fi_Bar + 1),   //..стохастика
           stochK1 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 0, fi_Bar),     // Вычисляем значения главной линии..
           stochK2 = iStochastic (Symbol(), i_TF, i_stoch_D, i_stoch_K, i_stoch_slowing, 0, 0, 0, fi_Bar + 1);   //..стохастика
//----
      if (stochD2 < stochK2) if (stochD1 > stochK1)                     // Если сигнальная линия пересекла главную снизу вверх..
      return (CROSSINGTOUP);                                          //..значит, - пересечение вверх
      if (stochD2 > stochK2) if (stochD1 < stochK1)                     // Если сигнальная линия пересекла главную сверху вниз..
      return (CROSSINGTODOWN);                                        // ..значит, - пересечение вниз
   }
//----
   return (CROSSINGWAIT);                                             // Ожидаем пересечения
}
//+---------------------------------------------------------------------------------------+
//| Получение сигнала от Моментума                                                        |
//+---------------------------------------------------------------------------------------+
double GetMomentumSignal (int fi_Bar = 0)
{return (iMomentum (Symbol(), i_TF, i_momPeriod, 0, fi_Bar));}
//+---------------------------------------------------------------------------------------+
//| Получение общего сигнала для входа в рынок                                            |
//+---------------------------------------------------------------------------------------+
int GetSignal (int fi_Bar = 1)
{
    int li_Signal;
//----
      double ld_SignalMomentum = GetMomentumSignal (fi_Bar);
      int    li_SignalStoch = GetStochSignal (fi_Bar),
             li_CrossingMA = GetCrossingMa (fi_Bar);
//----
    return (li_Signal);
}

Y en la última función GetSignal() haces una "suma" de todas las señales (por ti mismo).

P.D. Hay un momento "delicado" en la obtención de la señal del indicador. Por ejemplo, se puede fijar el hecho de que maSlow esté por encima/por debajo de maFast, o se puede "coger" el momento de su intersección. El enfoque y el código son diferentes.

 
Roman.:

¿Has programado en otro lenguaje que no sea µl4?


Un poco en Perl y otro poco en Pxp. Pero no me he acercado seriamente a otros idiomas porque no lo he necesitado. ¿Importa?
 
hoz:

Así que tiene sentido. Se trata de transferir parámetros a través de enlaces.

Para evitar explicar el código en detalle, lo explicaré brevemente.

Hay 3 funciones:(int GetCrossingMa, int GetStochSignal y int GetSignal())

La función int GetSignal() obtiene los valores de los flaps y otros indicadores que se pasan por referenciaa las funcionesno centrales(int GetCrossingMa eint GetStochSignal) para obtener las señales correspondientes en ellas. Quiero hacerlo para evitar obtener los mismos datos en diferentes funciones. No creo que sea prudente calcular las mismas máscaras en 2 o más funciones. Es más fácil calcularlo una vez y ya está. ¿Por qué malgastar recursos adicionales en ello?

Las explicaciones son claras, pero las acciones no.
Son estos: "Lafunción int GetSignal() obtiene valores de escalas y otros indicadores" las acciones en su variante son "cuestionables", por decirlo suavemente, porque no hay necesidad de tales acciones.

Este código:

   for(int i=1;i<=Bars;i++)
   {
      double i_maFast1 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i);      // Вычисляем быстрые скользящие..
      double i_maFast2 = iMA(Symbol(),i_TF,i_maFastPeriod,i_maFastShift,i_maFastMethod,0,i+1);    //..средние
      double i_maSlow1 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i);      // Вычисляем медленные скользящие..
      double i_maSlow2 = iMA(Symbol(),i_TF,i_maSlowPeriod,i_maSlowShift,i_maSlowMethod,0,i+1);    //..средние
      double stochD1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i);     // Вычисляем значения сигнальной линии..
      double stochD2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,1,i+1);   //..стохастика
      double stochK1 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i);     // Вычисляем значения главной линии..
      double stochK2 = iStochastic(Symbol(),i_TF,i_stoch_D,i_stoch_K,i_stoch_slowing,0,0,0,i+1);   //..стохастика
   }

completo P.... ¿Te das cuenta de lo que está "pasando" aquí? - Se busca en vano toda la "fila de la barra", y al final del bucle, las variables quedan con valores... Adivina lo que pasa después.

 
Buenos días amigos! ¿Pueden decirle a un profesional cómo empezar a utilizar la plataforma de comercio NZ MT4? No puedo entender la interfaz de la plataforma, por dónde empezar, me refiero a una cuenta demo, cómo comprar una acción con la posterior venta?