Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 614

 
yan720:
Gracias por responder. Si no te importa, por favor envíame el EA del que hablas (o una parte del mismo, que está con el canal) - sería interesante ver otra implementación.

No puedo darle sentido a algo que hice hace unos años. Por alguna razón no funciona, aunque recuerdo que antes funcionaba y comerciaba. Deja que primero ordene el código, lo arregle y luego lo publique. Tal vez mañana. No quiero avergonzarme si hay algunos errores infantiles.

 
yan720:

La idea general, por supuesto, es ésta. ¿Y cómo se determina la anchura del canal (rango en su caso)? Lo hago a través del tamaño de una vela media y además todo está ligado a la longitud del canal, porque la presencia del canal no se comprueba en un número rígido de barras, sino, por ejemplo, en una longitud de 10 a 30 barras.

Lo que me interesa es la cuestión de seleccionar la anchura a partir de la longitud...

Puede hacer varios parámetros externos para el ancho del canal en un indicador. Y hacer cálculos por separado para cada parámetro.

 

En cuanto a la longitud, ocurre lo mismo.

 
Example2:
Hola. El Expert Advisor de la cesta debería cerrar todas las órdenes cuando llega la condición, pero primero cierra la orden, luego intenta cerrarla de nuevo (el servidor nos da un error diciendo "Entrada no válida") y sólo entonces va más allá. Aquí hay un código de muestra y el propio EA.

En su función CloseOrders(), si la orden se cierra, el ciclo while(cnt<=5 ) enviará de nuevo el código para cerrar la orden, y se producirá un error, por supuesto, para luego salir a través de if(). romper;

                    int cnt=0;
                    while(cnt<=5){
                      Result[0]=OrderClose(OrderTicket(),OrderLots(),MarketInfo("USDCAD",MODE_BID),slip,Blue);
                      if(!Result[0]){
                        Answer=ERRORS(GetLastError());
                        if (Answer==1)continue; cnt++;
                        if (Answer==2)break;
                      }
                    }

En la función ProtectionClose(), ya ha añadido las líneas con el while exit correcto.

 if(Result[0])break;
 }continue;
Intenta cavar aquí.
 
pu6ka:

En su función CloseOrders(), si la orden se cierra, el ciclo while(cnt<=5) enviará de nuevo el código para cerrar la orden, y se producirá un error, por supuesto, entonces saldrá a través de if(). romper;

En la función ProtectionClose(), ya se han añadido líneas con elwhile exit correcto

Intenta investigar un poco aquí.


Pero en el caso que he descrito, es la función ProtectionClose() la que cierra la orden. Arreglaré ese error.
 
Example2:

Sin embargo, es la función ProtectionClose() la que cierra las órdenes en el caso que he descrito. Arreglaré ese error.

No he profundizado en el código, no he podido ejecutarlo en tester, no hay indicador.

Pero, por ejemplo, sus funciones OpenUsdbuy(); OpenSellusd() son consecutivas.

OpenSellusd() abre GBPUSD, EURUSD, AUDUSD, NZDUSD, etc. Será el primero en cerrarlos en orden inverso a NZDUSD, AUDUSD, etc.

Sólo tres pares en la función ProtectionClose() tienen un while exit en dos variantes: USDCAD, USDCHF y USDJPY.

En otras monedas, se puede salir de while() sólo por un error if(!Resultado[...]).

 
FOReignEXchange:

Es posible realizar varios parámetros externos para el ancho del canal en un indicador. Y hacer cálculos por separado para cada parámetro.

La cuestión es que no quiero establecer el ancho del canal a la fuerza - el Asesor Experto/indicador debe detectar la presencia del canal independientemente del par de divisas y/o la volatilidad actual. En consecuencia, establezco la longitud mínima y máxima del canal a partir de parámetros externos, y esto sólo en el proceso de depuración del algoritmo - después estos parámetros serán cosidos en él. En esta fase, hay algunas quejas. Aunque puedo captar los canales en general (la imagen fue tomada del código de trabajo), me gustaría ver otras soluciones de este tema.

 
pu6ka:

No he profundizado en el código, no he podido ejecutarlo en tester, no hay indicador.

Pero, por ejemplo, sus funciones OpenUsdbuy(); OpenSellusd() son consecutivas.

OpenSellusd() abre GBPUSD, EURUSD, AUDUSD, NZDUSD, etc. Será el primero en cerrarlos en orden inverso a NZDUSD, AUDUSD, etc.

Sólo tres pares en la función ProtectionClose() tienen una salida while en dos variantes: USDCAD, USDCHF y USDJPY.

En otras monedas se puede salir de while() sólo por un error if(!Resultado[...])


Gracias por el consejo, se me olvidó dejar el bucle en este caso, ahora debería funcionar. Si quieres puedo pegar el indicador como agradecimiento.
 
yan720:

La idea general, por supuesto, es ésta. ¿Y cómo se determina la anchura del canal (rango en su caso)? Lo hago a través del tamaño de una vela media y además todo está ligado a la longitud del canal, porque la presencia del canal no se comprueba en un número rígido de barras, sino, por ejemplo, en una longitud de 10 a 30 barras.

Lo que me interesa es la cuestión de elegir la anchura de la longitud...

Esta longitud de 10 barras es la cifra fundamental. Me refiero a no menos de 10... y si es más largo, es el destino. Llévalo al exterior para poder experimentar. El rango puede ser un tamaño medio de la vela, no es importante, pero es mejor ponerlo fuera también. Tal vez quieras establecer los rangos máximo y mínimo, por lo que tendrás que establecer dos variables Max_ y Min_. Luego en cada barra compruebas el tamaño medio de una vela en estas 10 barras y si te conviene, dibujas tendencias en la parte superior e inferior de 10 barras. Para la siguiente barra, ya puede comprobar 11 barras y si se cumple la condición, ObjectSet(...); sólo cambiaOBJPROP_PRICE1 para la primera coordenada , y OBJPROP_PRICE2 y OBJPROP_TIME2 para la segunda y así en cada barra. O bien, puede no recalcular nada y considerar el canal ya formado y esperar la ruptura de este canal. Esto depende de su gusto.

Bueno, en mi caso, sugerí una opción más ligera desde la linterna para asignar la altura del canal y el número mínimo de barras también.


yan720:

La cuestión es que no quiero establecer el ancho del canal a la fuerza - el Asesor Experto/indicador debe detectar la presencia del canal independientemente del par de divisas y/o la volatilidad actual. Por lo tanto, sólo establezco la longitud mínima y máxima del canal a partir de parámetros externos, y esto sólo en el proceso de depuración del algoritmo - después estos parámetros serán cosidos en él. En esta fase, hay algunas quejas. Aunque puedo captar los canales en general (la imagen fue tomada del código de trabajo), me gustaría ver otras soluciones de este tema.

Bueno, en primer lugar, los parámetros no harán ninguna diferencia si están en los externos o en los incrustados. Y en segundo lugar, si no fijas el ancho del canal, ¿con qué lo vas a comparar cuando calcules las 10 barras que has especificado? ¿Cómo quieres determinar si es un canal o no? Y tercero, en mi opinión, el tamaño medio de las velas no funcionará adecuadamente. Si las 10 barras son alcistas, pero el tamaño medio de la barra no es mayor que el cheque. ¿Es un canal o no? Puede ser un canal, pero sólo es uno inclinado y estamos analizando uno horizontal según su dibujo.
 
yan720:

El punto es que no quiero establecer el ancho del canal a la fuerza - el Asesor Experto/indicador tiene que determinar la presencia del canal, independientemente del par de divisas y/o la volatilidad actual. En consecuencia, establezco la longitud mínima y máxima del canal a partir de parámetros externos, y esto sólo en el proceso de depuración del algoritmo - después estos parámetros serán cosidos en él. En esta fase, hay algunas quejas. Aunque puedo captar los canales en general (la imagen era de un código de trabajo), me gustaría ver otras soluciones para este tema.

Bueno, hay una idea para atrapar 2 fractales superiores consecutivos o 2 iHighest que consisten en, digamos, 5-10 velas. Atrapamos este caso dentro de un determinado rango de longitud. Si los valores de estos picos son cercanos, entre estos dos picos encontraremos iLowest.

Del mismo modo, busca primero los dos picos inferiores y luego el pico superior entre ellos.

Entonces bailaremos desde esos picos encontrados. En primer lugar, dibujamos niveles por ellos. Luego enseñamos el código para pensar más allá.

Esta opción eliminará el parámetro externo como Channel_width.

Se mire como se mire, creo que necesitamos al menos algunos parámetros para la duración.