Corrección de un error de matriz fuera de rango en MT4 EA

 

Publi

Página 1 de 402 12 ÚltimoÚltimo
Resultados 1 al 10 de 13

Tema: Corrección de un error de matriz fuera de rango en MT4 EA

  1. #1
    Hice un EA usando el siguiente...

    externo int IntIndTF1 = 4;
    externo int IntInd1S1 = dos;
    externo int IntInd1S2 = 14;

    externo int IntIndTF2 = 1;
    externo int IntInd2S1 = 3;
    externo int IntInd2S2 = 9;
    Código insertado PerH1 = High#91;iHighest(SymbolToManage,IntIndTF1,MODE_HIG H,IntInd1S2,IntInd1S1)Número 93;; PerL1 = Reducido #91;iLowest(SymbolToManage,IntIndTF1,MODE_LOW,IntI nd1S2,IntInd1S1)Número 93;; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = High#91;iHighest(SymbolToManage,IntIndTF2,MODE_HIG H,IntInd2S2,IntInd2S1)Número 93;; PerL2 = Reducido #91;iLowest(SymbolToManage,IntIndTF2,MODE_LOW,IntI nd2S2,IntInd2S1)Número 93;; PorM2 = NormalizeDouble((PerH2 PerL2)/2,Digits);
    Funcionó muy bien hasta que comencé a analizar otros símbolos con él, luego apareció el temido error Array out of range, así que lo cambié a...
    Código insertado int BarCount = Bars; cuando (BarCount lt; 1) BarCount = 1; for (int I=0; igt;Bars; I--) PerH1 = High#91;iHighest(SymbolToManage,IntIndTF1,MODE_HIG H,IntInd1S2,I IntInd1S1)#93;; PerL1 = Reducido #91;iLowest(SymbolToManage,IntIndTF1,MODE_LOW,IntI nd1S2,I IntInd1S1)#93;; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = High#91;iHighest(SymbolToManage,IntIndTF2,MODE_HIG H,IntInd2S2,I IntInd2S1)#93;; PerL2 = Reducido #91;iLowest(SymbolToManage,IntIndTF2,MODE_LOW,IntI nd2S2,I IntInd2S1)#93;; PorM2 = NormalizeDouble((PerH2 PerL2)/2,Digits); Los errores de rango fuera de rango parecen haber disminuido. SIN EMBARGO, hoy no puedo hacer que simule las configuraciones anteriores que funcionaban bien...

    externo int IntIndTF1 = 4;
    externo int IntInd1S1 = dos;
    externo int IntInd1S2 = 14;

    externo int IntIndTF2 = 1;
    externo int IntInd2S1 = 3;
    externo int IntInd2S2 = 9;

    He analizado los rangos de 1 y -1, pero el EA ahora no regresa exactamente a los mismos valores calculados para las mismas barras. ¿Cómo modifico el código para deshacerme de los errores? Mantenga los resultados y los valores probados.

    Esto es en realidad en un EA que no usa un indicador. Los valores para los HHLL han estado en el EA. Necesito que tenga la capacidad de leer y recibir exactamente los mismos efectos para la variable.

  2. #2
    El -1 fue agregado por mí a la confianza de las barras de límite y parece funcionar, así que está bien sin afectar ninguna alteración. Para asegurarme de que iLowest/iHigheset no llegue -1 lo hice, bastante seguro de que no es la forma correcta porque los resultados son horribles... Código insertado int BarsCounted1 = TFBars1-MathMax(IntInd1S2,IntInd1S1 1); if (BarsCounted1 lt; 0) return; int LimitBars1 = TFBars1-BarsCounted1; for (BarCount1 = LimitBars1-1; BarCount1 gt;= 0; BarCount1--) (iLowest(SymbolToManage,IntIndTF1,MODE_LOW,IntInd1 S2,BarCount1 IntInd1S1) lt; 0)) return; if ((iHighest(SymbolToManage,IntIndTF1,MODE_HIGH,IntI nd1S2,BarCount1 IntInd1S1) gt; -1) (iLowest(SymbolToManage,IntIndTF1,MODE_LOW,IntInd1 S2,BarCount1 IntInd1S1) gt; -1)) continuar; PerH1 = High#91;iHighest(SymbolToManage,IntIndTF1,MODE_HIG H,IntInd1S2,BarCount1 IntInd1S1)#93;; PerL1 = Low#91;iLowest(SymbolToManage,IntIndTF1,MODE_LOW,I ntInd1S2,BarCount1 IntInd1S1)#93;;/PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits);

  3. #3

    Cita Iniciado por ;
    Sí, eso fue un error de copiar y pegar arriba. No estoy seguro de entender la ejecución y la forma de implementar eso o por qué funciona. Mientras tanto, me he conformado con esto. . .repetido una segunda vez usando un conjunto de factores para el indicador dentro del ea. Los pubs con cambio de tiempo hicieron que las pruebas fueran más controladas y menos al capricho del compilador que era MT4, ya que está analizando cualquier TF pero colocando un gráfico de 4 horas. Eventualmente, quiero que el ea funcione exactamente igual con los mismos resultados Independientemente del gráfico TF que sea...
    Don#8217;olvide el (-1) para convertir de tamaño a posición BarCount1=LimitBars1-1 y asegúrese de que iLowest/iHighest no devuelva -1

  4. #4
    Sí, eso fue un error de copiar y pegar. No estoy seguro de entender la ejecución siguiendo el concepto de la barra 17 y cómo implementar esto o por qué funciona. Mientras tanto, me he conformado con esto. . .repetido otra vez usando otro par de variables para el indicador dentro del ea. Las barras con cambio de tiempo mencionadas por Beerrun crearon la prueba menos al capricho del compilador que era MT4 y más controlada ya que está analizando cualquier TF pero usa un gráfico de 4 horas. Finalmente, necesito que el ea funcione de la misma manera con los mismos resultados, independientemente del gráfico TF en el que se encuentre. Creo que leer TF de Bars() es parte de esta solución. El error de variedad fuera de rango es un problema, ¿cuál es el significado de la barra 17 y cómo hace que el EA funcione después de la barra 17? Código insertado int BarCount1; int TFBars1 = Bars(SymbolToManage,IntIndTF1); int BarsCounted1 = TFBars1-MathMax(IntInd1S2,IntInd1S1 1); debería (BarsCounted1 lt; 0) volver; int LimitBars1 = TFBars1-BarsCounted1; for (BarCount1 = LimitBars1; BarCount1 gt;= 0; BarCount1--) PerH1 = Reducido #91;iHighest(SymbolToManage,IntIndTF1,MODE_HIGH,In tInd1S2,BarCount1 IntInd1S1)#93;; etc.. .

  5. #5

    Cita Iniciado por ;
    Logré encontrar las variables para pasar e imitar los resultados anteriores con mucho cuidado con esto... int counted_bars=Bars-MathMax(MathMax(IntInd1S2,IntInd2S2),MathMax(IntIn d1S1,IntInd2S1)); for(int I=Bars-counted_bars-1;igt;0;I--) { PerH1 = High[iHighest(SymbolToManage,IntIndTF1,MODE_HIGH,IntInd 1S2,I IntInd1S1)]; PerL1 = Reducido [iLowest(SymbolToManage,IntIndTF1,MODE_LOW,IntInd1S 2,I IntInd1S1)]; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = High[iHighest(SymbolToManage,IntIndTF2,MODE_HIGH,IntInd 2S2,I IntInd2S1)]; PerL2 = Reducido [iLowest(SymbolToManage,IntIndTF2,MODE_LOW,IntInd2S 2,I IntInd2S1)];...
    ¿Estás seguro de que estás obteniendo el error de lo anterior? Debido a que esto no satisface ninguna matriz, asigna el último valor my y puede ciclos innecesarios. ¡Hola! Ofc podría alcanzar un nivel bajo o alto fuera de rango. Para eso, simplemente configure el ea para que se ejecute siguiendo la barra que estaba en el 17.

  6. #6

    Cita Iniciado por ;
    Bueno, todavía obtengo errores de matriz fuera de rango en otros símbolos durante las evaluaciones con esto. No soluciona el problema aunque Ponerlo lo hace más rápido es un plus. De vuelta a la lucha libre.
    Tal vez use la función Bars() que toma el símbolo y el marco de tiempo como parámetros, en lugar del factor de Barras que se limita al símbolo del gráfico actual y al marco de tiempo. Una cosa adicional a considerar es que si iLowest/Highest produce un error, #8217; estaría haciendo Low[-1]

  7. #7
    Me las arreglé para encontrar las variables para pasar y simular los últimos resultados con bastante cuidado con esto... Código insertado int counted_bars=Bars-MathMax(MathMax(IntInd1S2,IntInd2S2),MathMax(IntIn d1S1,IntInd2S1)); for(int I=Bars-counted_bars-1;igt;0;I--) { PerH1 = High#91;iHighest(SymbolToManage,IntIndTF1,MODE_HIG H,IntInd1S2,I IntInd1S1)#93;; PerL1 = Low#91;iLowest(SymbolToManage,IntIndTF1,MODE_LOW,I ntInd1S2,I IntInd1S1)#93;; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = High#91;iHighest(SymbolToManage,IntIndTF2,MODE_HIG H,IntInd2S2,I IntInd2S1)#93;; PerL2 = Low#91;iLowest(SymbolToManage,IntIndTF2,MODE_LOW,I ntInd2S2,I IntInd2S1)#93;; PorM2 = NormalizeDouble((PerH2 PerL2)/2,Digits); IntInd1S2,I IntInd1S1 se establecieron anteriormente en 2 y 14 y actualmente funcionan en 1 y 13, lo que tiene sentido. Sin embargo, sigue obteniendo errores de variedad fuera de rango.

  8. #8
    Bueno, todavía obtengo una variedad de errores fuera de rango en los símbolos durante las evaluaciones con esto. Ponerlo hecho es un plus pero no solucionará el asunto que es original. De vuelta a la lucha libre. Código insertado int counted_bars=IndicatorCounted(); for(int I=Bars-counted_bars-1;igt;0;I--) PerH1 = HighNumber 91;iHighest(SymbolToManage,IntIndTF1,MODE_HIGH,Int Ind1S2,IntInd1S1)Number 93;; PerL1 = Low#91;iLowest(SymbolToManage,IntIndTF1,MODE_LOW,I ntInd1S2,IntInd1S1)Número 93;; PerM1 = NormalizeDouble((PerH1 PerL1)/2,Digits); PerH2 = High#91;iHighest(SymbolToManage,IntIndTF2,MODE_HIG H,IntInd2S2,IntInd2S1)Número 93;; PerL2 = Low#91;iLowest(SymbolToManage,IntIndTF2,MODE_LOW,I ntInd2S2,IntInd2S1)Número 93;; PorM2 = NormalizeDouble((PerH2 PerL2)/2,Digits);

  9. #9

    Cita Iniciado por ;
    cita Sí, debería funcionar. De lo contrario, cree una variable para mantener un conteo continuo. De lo contrario, es probable que se ejecute el ciclo para cada barra en cada marca.
    Esto es lo que hice... Código insertado int counted_bars=IndicatorCounted(); for(int I=Bars-counted_bars-1;igt;0;I--) etc. etc. etc. Parece que se ha ocupado bien de la variedad fuera del rango, quiero verificar otros símbolos para probar. Una prueba por garrapata tomó una eternidad. Así que revisé cuándo y dónde se llama a este código y lo saqué de la sección superior de void OnInit y lo configuré siguiendo el Código insertado static datetime prevtime = Time#91;0#93;; when (prevtime == Time#91;0#93;-RRB- return; prevtime = Time#91;0#93;; que tengo cerca de la base de OnInit No tenía que ser evaluado tick por tick, simplemente por publicación, mientras que otras partes de la estrategia de salida exigen un seguimiento de tic a tic. Creo que debería funcionar hoy. Debo probarlo con otros símbolos que me ofrecían el problema, pero sacar el código de la evaluación de tic a tic hace que sea correr mucho más rápido, por supuesto.

  10. #10

    Cita Iniciado por ;
    citar El código está dentro de un ea solo, no es un indicador ¿IndicatorCounted () seguirá funcionando dentro de un ea?
    Sí, debería funcionar. Si no, haga una variable para llevar un conteo. De lo contrario, ejecutará el bucle.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Cookies
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información y política de cookies aquí.