Nunca he estudiado programación, pero quiero escribir un EA - página 8

 

¿qué pasa, compañeros programadores?
soy el autor de este hilo y sigo pidiendo consejo.


por lo que en la estructura declarada de la cabecera

y aquí viene lo interesante: ¿QUÉ ES ESTO?
He definido una condición en OnTick que si no hay órdenes abiertas
entonces:
si un swing rápido es mayor que un swing lento,
entonces: abrir una orden.



pregunta. ¿por qué se abre una orden en cada tick?

 
Sergey Lobzankin:

¿Qué pasa, compañeros programadores?
Soy el autor de este hilo y sigo pidiendo consejo.


Así que declaré la estructura en la cabecera

y aquí está lo interesante, ¿QUÉ ES ESTO?
He definido una condición en OnTick que si no hay órdenes abiertas
entonces:
si un swing rápido es mayor que un swing lento,
entonces: abrir una orden



Pregunta: ¿Por qué se abre una orden en cada tick?

Significa que en cada tic se cumple la condición.

Si la condición debe ser un cruce de MA, entonces en la primera barra fue < menos y en la barra cero se convirtió en > más. Pero en tu condición en la barra cero > más y en la primera barra > más.

 

https://code.org/

https://scratch.mit.edu/

Si quieres aprender a programar (en realidad es un estilo de pensamiento, no un lenguaje) en MQL, eso es un verdadero problema para ti y tu entorno.

Haz clic en los enlaces: todo es sencillo, de nivel escolar (incluso elemental en algunos lugares), pero al menos una introducción a los algoritmos y a su escritura. De lo contrario, cada vez que estornude, se pondrá en contacto con el foro y esperará una respuesta, y eso es una pérdida de tiempo, y el tiempo es dinero.

PS/ y aconsejo a todo el mundo que lo lea, scratch es una obra maestra desde dentro - el abuelo de la programación moderna.

Code.org: Любой может научиться
Code.org: Любой может научиться
  • code.org
Каждый студент в каждой школе заслуживает возможность изучения компьютерных наук.
 
Sergey Lobzankin:

¿Qué pasa, compañeros programadores?
Soy el autor del tema y sigo pidiendo consejo.


por lo que en la cabecera se anuncia la estructura

y aquí está lo interesante, ¿QUÉ ES ESTO?
He definido una condición en OnTick que si no hay órdenes abiertas
entonces:
si un swing rápido es mayor que un swing lento,
entonces: abrir una orden.



pregunta. ¿por qué se abre una orden en cada tick?

Entonces, ¿camarada autor del tema?

Te lo aconsejé hace un mes, pero ni siquiera estás prestando atención:

Este es un foro para el comercio, los sistemas automatizados de comercio y las pruebas de estrategia.

Nunca he estudiado programación, pero quiero escribir un Asesor Experto.

Konstantin Nikitin, 2018.04.10 21:18

Bueno, no tienes nada súper natural ahí. Así que la mejor opción. Publíquelo aquí, pero sólo a través de

Alguien sugerirá algo útil.


Y sigues pegando código con una imagen.

 
Hola, me encuentro con el siguiente problema. El EA necesita los datos de la media móvil en cero y en la primera barra para analizar la situación y para los cálculos posteriores.
La función OnCalculate se inventó básicamente para escribir un indicador. He hecho esta función por separado en mi EA, pero no puedo averiguar cómo acceder a ella desde OnTick.
 
Sergey Lobzankin:
Hola, me he encontrado con un problema de este tipo. El Asesor Experto necesita los datos de la media móvil en cero y en la primera barra para analizar la situación y para los cálculos posteriores.
La función OnCalculate se inventó básicamente para escribir un indicador. En mi EA, he hecho esta función por separado, pero no puedo dar una idea de cómo acceder a ella desde OnTick

¡Ni siquiera es necesario intentar llevar OnCalculate de un indicador a un EA! Sólo tiene que aplicar al indicador en el EA (utilizando el mango del indicador) y obtener los datos.

Ejemplo de trabajo con iMA e iStdDev en código iMAiStdDev- código extraído de OnTick, obteniendo datos de los indicadores iMA

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;
 
Vladimir Karputov:

¡Ni siquiera es necesario intentar llevar OnCalculate del indicador al EA! Sólo tiene que aplicar al indicador en el Asesor Experto (utilizando el mango del indicador) y obtener los datos.

Ejemplo de trabajo con iMA e iStdDev en códigoiMA iStdDev- extracto de código de OnTick, obteniendo datos de los indicadores iMA

sospecho que tienes razón))))
ahora voy a tratar de jugar con arrays a través de ...Arreglo...

 

Y esto es lo otro...
Tengo las asas justo en el sombrero del experto

extern int    zazor      = 0;
extern double Lots       = 0.1;
extern int    TrailingStop = 15;
extern int    TrailingStep = 2;
extern int    Magic      = 123;
extern int    Slippage   = 5;
int Digits;

int timeprev=0;

int    ticket;
double price,TP,SL,lastlot;
string;

int ima1_handle          = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);               //хендл
int ima2_handle          = iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
int Stoch_handle         = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
int ATR_handle           = iATR        (Symbol(),0,21);                              //хендл
double ima1_massiv [2];                                                              //статический массив для быстрой машки 

y en los foros, que lo hace... Cada uno lo hace de forma diferente... Algunos en oninit, otros en ontik,
La cuestión es que en mi diseño, copio los datos en un array y obtengo el número de elementos a copiar

void OnTick()
  { 
    int ima_count1 = CopyBuffer(ima1_handle,0,1,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    string str_ima1 = IntegerToString(ima_count1);                 //отладочная
    printf("мой первый хендл = "  + str_ima1);                     //отладочная
   }
P.D., por cierto, el probador vio todos los indicadores cuyas manijas están en la cabecera del Asesor Experto y dibujó todo en el gráfico del visualizador
 

aquí hay un artículo que explica claramente cómo implementar el acceso a los datos del indicador
https://www.mql5.com/ru/articles/43

Pero chicos, los datos se copian en un array, sin duda, pero necesito obtener números específicos, es decir, si la onda en el último tick de la barra actual es 1,32456, entonces necesito obtener este número en el registro (para asegurarme de que el número se obtiene realmente), necesito sacar esta información específica en el tipo double,

para calcular el número de puntos de tipo int entre dos masas diferentes. ¿cómo puedo obtener este valor?


Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Sergey Lobzankin:

Aquí hay un artículo que explica claramente cómo implementar el acceso a los datos del indicador
https://www.mql5.com/ru/articles/43

Pero chicos, los datos se copian en un array, sin duda, pero necesito obtener números específicos, es decir, si la onda en el último tick de la barra actual es 1,32456, necesito obtener este número en el registro (para asegurarme de que el número se obtiene realmente), necesito sacar esta información específica en el tipo double,

para calcular el número de puntos int entre dos mash-ups diferentes. ¿cómo se obtiene este valor?


¿Acaso miras y lees lo que te dicen? Te di un ejemplo en el post. Sólo está obteniendo datos de dos iMAs:

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;

Hay dos indicadores iMA: "Rápido" y "Normal". Los datos de estos dos indicadores se obtienen en las matricesma_fast yma_normal respectivamente. Solicitamos elrecuento de #start_pos de la barra.

Y luego accedemos a los datos obtenidos (en este ejemplo accedemos a los datos de la barra #0)