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

 
Alexey Viktorov:

¿Y la primera parte de la línea y la pregunta en su conjunto?

Bueno, somos programadores. Vasos llenos y vacíos en la mesita de noche y todo eso...

Sin embargo, escribí tres posibles escenarios y lo que sucede durante ellos en el ciclo de cálculo del indicador principal:

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

FAQ de principiantes MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.08.06 15:17

rates_total - prev_calculates es un algoritmo muy eficiente.

  • Si es igual a cero, significa el cálculo en la barra actual por el tick
  • Si es igual a 1, significa que hay una nueva barra y se calcularán dos barras: la anterior y la actual
  • Si es mayor que 1, significa que se trata de la primera ejecución o de un cambio en los datos del historial
Calculamos el límite. Y en el bucle de límite a mayor o igual que cero, calculamos los datos del indicador. Y calcular cuál es el límite al calcular el límite = rates_total - prev_calculates.

La cuarta situación -por debajo de cero- es muy posible. Pero simplemente no se maneja en el bucle calculado for(int i=limit; i>=0; i--) ...

Pocas personas quieren pensar en ello y suelen limitarse a copiar y pegar. En consecuencia, el primer lanzamiento y el cambio de historia se producen cuando limit>1, por lo que deberíamos escribir sobre el primer lanzamiento en dicha situación y no comprobar prev_calculado para que sea cero.

 
Сергей Таболин:

Alexei, estoy interesado )))) Pero no veo el error. Y no hay que avergonzarse de aprender. Y si alguien es más inteligente o tiene más experiencia, tampoco veo nada malo en ello.

Acabo de ejecutar el indicador con un parámetro de entrada grande para el tamaño de una vela. Quiero tener candelabros más pequeños.

Todos los precios de las velas se calculan y se rubrican a partir de los buffers de los indicadores. Todo es correcto. Pero no había ninguna representación. No entiendo por qué.

Te sugerí

Alexey Viktorov:

......... para empezar a seleccionar barras después de un número N, o al menos una última barra cerrada. ¿Lo has probado? ¿Se puede renderizar?

Y una vez más te sugiero que empieces por seleccionar al menos una última barra cerrada. Cuando obtenga un resultado positivo, sólo entonces proceda a los cálculos y condiciones.

 
Alexey Viktorov:

Le he sugerido

y te sugiero que empieces por señalar al menos un último bar cerrado. Cuando obtenga un resultado positivo, sólo entonces proceda a los cálculos y condiciones.

Me temo que no te entiendo... ¿Qué bar propone asignar? ¿La que formé? ¿O en el gráfico?

Si está en la carta, no los necesito a priori. El indicador se considera igual en cualquier marco temporal.

El cálculo anterior se realizó en H1, y ahora es en H4. El resultado es el mismo.

2020.08.08 11:06:14.580 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора.
2020.08.08 11:06:14.789 newCandles (USDJPY,H4)  2019.01.02 06:00:00 >>> Свеча 00000 >> open = 109.419 hihg = 109.462 low = 105.388 close = 105.388 > Сформирована за 122162 тика.
2020.08.08 11:06:15.230 newCandles (USDJPY,H4)  2019.01.03 00:41:15 >>> Свеча 00001 >> open = 105.388 hihg = 109.388 low = 105.268 close = 109.388 > Сформирована за 1336258 тиков.
2020.08.08 11:06:19.056 newCandles (USDJPY,H4)  2019.01.17 21:50:34 >>> Свеча 00002 >> open = 109.388 hihg = 112.398 low = 105.388 close = 105.388 > Сформирована за 11546466 тиков.
2020.08.08 11:06:20.788 newCandles (USDJPY,H4)  2019.08.09 18:57:55 >>> Свеча 00003 >> open = 105.388 hihg = 109.388 low = 104.453 close = 109.388 > Сформирована за 5400916 тиков.
2020.08.08 11:06:22.592 newCandles (USDJPY,H4)  2019.11.07 17:57:24 >>> Свеча 00004 >> open = 109.388 hihg = 112.225 low = 105.384 close = 105.384 > Сформирована за 5555641 тик.
2020.08.08 11:06:22.725 newCandles (USDJPY,H4)  2020.03.06 11:47:26 >>> Свеча 00005 >> open = 105.384 hihg = 105.732 low = 101.377 close = 101.377 > Сформирована за 272724 тика.
2020.08.08 11:06:22.822 newCandles (USDJPY,H4)  2020.03.09 15:37:48 >>> Свеча 00006 >> open = 101.377 hihg = 105.378 low = 101.187 close = 105.378 > Сформирована за 314847 тиков.
2020.08.08 11:06:23.736 newCandles (USDJPY,H4)  2020.03.10 21:05:27 >>> Свеча 00007 >> open = 105.378 hihg = 109.385 low = 103.094 close = 109.385 > Сформирована за 2045775 тиков.
2020.08.08 11:06:27.124 newCandles (USDJPY,H4)  2020.03.19 04:13:11 >>> Свеча 00008 >> open = 109.385 hihg = 111.711 low = 105.385 close = 105.385 > Сформирована за 10250092 тика.
2020.08.08 11:06:27.296 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора закончен.
 
Сергей Таболин:

Me temo que no te entiendo... ¿Qué barra propone destacar? ¿La que se ha formado en mí? ¿O en el gráfico?

Si está en la carta, no los necesito a priori. El indicador se considera igual en cualquier marco temporal.

El cálculo anterior se realizó en H1, y ahora es en H4. El resultado es el mismo.

Alexey te ha dicho que primero debes hacer que tu indicador dibuje velas. Tal como son. Al menos en el bar actual. Si lo consigues, considera que el primer paso hacia la comprensión ha sido superado. Pero es conveniente no tratar de encontrarlo probando diferentes parámetros, sino con su propia mente.

¿Qué tiene que ver esto con el "a priori"? Lo necesitas mucho - si no puedes dibujar una vela con sólo cuatro valores.

 
Artyom Trishkin:

Alexey le dijo que primero debe hacer su indicador por lo menos sólo dibujar velas. Tal como son. Al menos en el bar actual. Si lo consigue, considere que ha superado el primer paso hacia la comprensión. Pero es conveniente no tratar de encontrarlo probando diferentes parámetros, sino con su propia mente.

¿Qué tiene que ver esto con el "a priori"? Realmente lo necesitas ya que no puedes dibujar una vela con sólo cuatro valores.

Lo tengo. Lo haré. ...

 
Hola usuarios del foro. Me pueden decir cómo hacer una recepción secuencial de señales. Por ejemplo, ¿obtengo la primera de 4h timeframe, luego la hora timeframe, 15 minutos y entrar en el comercio sólo en el mínimo? He tomado prestado el código de CodeBase
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool  SearchTradingSignals(void)
  {
   if(m_prev_bars==m_last_deal_in) // on one bar - only one deal
      return(true);
//---
   double  ma[];
   MqlRates  rates_1[],rates_2[],rates_3[],rates_4[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(rates_1,true);
   ArraySetAsSeries(rates_2,true);
   ArraySetAsSeries(rates_3,true);
   ArraySetAsSeries(rates_4,true);
   int  start_pos=0,count=3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_1,start_pos,count,rates_1)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_2,start_pos,count,rates_2)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_3,start_pos,count,rates_3)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_4,start_pos,count,rates_4)!=count)
     {
      return(false);
     }
   int  size_need_position=ArraySize(SPosition);
   if(size_need_position>0)
      return(true);

   if((rates_1[0].open<rates_1[0].close) && (rates_2[0].open<rates_2[0].close) &&
      (rates_3[0].open<rates_3[0].close) && (rates_4[0].open<rates_4[0].close) && ma[2]<ma[1] && ma[1]<ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
     }
   if((rates_1[0].open>rates_1[0].close) && (rates_2[0].open>rates_2[0].close) &&
      (rates_3[0].open>rates_3[0].close) && (rates_4[0].open>rates_4[0].close) && ma[2]>ma[1] && ma[1]>ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+

Four Timeframes 2
Four Timeframes 2
  • www.mql5.com
На одном из таймфреймов (задается через параметр 'MA Trend ') создаётся трендовый индикатор iMA (Moving Average, MA). Именно этот индикатор будет работать в качестве трендового фильтра. Тренд определяется так: MA на трёх барах (#2, #1 и #0) имеет одно направление. Советник проверяет направление бара #0 (это самый правый бар, который Вы видите...
 
Hola. He decidido intentar dominar tanto el lenguaje mql5 como la plataforma mt5. Tengo una pregunta sobre el probador. Mi pregunta es sobre las citas. He puesto el par audcad en la plataforma de Weltrade. Tengo un pequeño panel informativo en mi Asesor Experto. Veo en el modo de visualización que los spreads no son correctos (muy pequeños, similares al spread del eurusd). Me puse en contacto con el soporte técnico de la empresa (Veltrade) y pregunté si hay diferentes spreads para mt4 y mt5. Respondieron que son lo mismo. ¿Qué debo hacer si no hay correspondencia en el probador? Traté de optimizarlo usando el código genético. La carga de mi CPU era del 100%, y después de unos minutos de trabajo mi ordenador se bloqueó (el procesador era un phenom II x4 955 (4 núcleos, 3,2 GHz), el refrigerador estaba de repuesto). Después de dos veces decidí no arriesgarme más. ¿Cómo debo entender esta situación? Entonces, cuando se hace la prueba sin visualización, no hay ninguna información sobre el trato, sólo un gráfico. ¿Es cierto o estoy haciendo algo mal? La información es bastante pobre en el modo de visualización. De hecho, lo que más me preocupa es la incoherencia de los diferenciales. En resumen, mi primera impresión es de completa decepción. Pero lo descuento al hecho de que aún no lo he descubierto.
 
Youri Lazurenko:
Hola. He decidido intentar dominar tanto el lenguaje mql5 como la plataforma mt5. Tengo una pregunta sobre el probador. Tengo una pregunta sobre las cotizaciones. He puesto el par audcad en la plataforma de Weltrade. Tengo un pequeño panel informativo en mi Asesor Experto. Veo en el modo de visualización que los spreads no son correctos (muy pequeños, similares al spread del eurusd). Me puse en contacto con el soporte técnico de la empresa (Veltrade) y pregunté si hay diferentes spreads para mt4 y mt5. Respondieron que son lo mismo. ¿Qué debo hacer si no hay correspondencia en el probador? Traté de optimizarlo usando el código genético. La carga de mi CPU era del 100%, y después de unos minutos de trabajo mi ordenador se bloqueó (el procesador era un phenom II x4 955 (4 núcleos, 3,2 GHz), el refrigerador estaba de repuesto). Después de dos veces decidí no arriesgarme más. ¿Cómo debo entender esta situación? Entonces, cuando se hace la prueba sin visualización, no hay ninguna información sobre el trato, sólo un gráfico. ¿Es cierto o estoy haciendo algo mal? La información es bastante pobre en el modo de visualización. De hecho, lo que más me preocupa es no coincidir con los diferenciales. En resumen, mi primera impresión es de completa decepción. Pero lo descuento al hecho de que aún no lo he descubierto.

Establecer pruebas basadas en ticks reales. Entonces desaparecerán todas las dudas sobre la validez de la difusión.


 
Alexey Viktorov:

Establecer pruebas basadas en ticks reales. Entonces desaparecerán todas las dudas sobre la validez de la difusión.


Gracias, lo probaré ahora. Cuál es su consejo sobre la optimización. Me interesa más la velocidad. Puede que corrija la calidad más adelante, cuando haga las pruebas.

P.D. Lo he hecho tal y como aconsejas, los diferenciales son los mismos. He comprobado a propósito el tipo de cuenta. Se especifica que se extiende en audcad 4.1 (flotante). En la misma cuenta (gráfico de demostración) es 4,7 (flotante). En el probador, mt5, máximo 2,8 (flotando a un lado más pequeño).

 
Youri Lazurenko:

Gracias, lo probaré. ¿Cuál es su consejo sobre la optimización? Me interesa más la velocidad. La calidad puede ajustarse más tarde, al realizar las pruebas.

No puedo darte ningún consejo. No uso la optimización. Creo que es un charlatán.