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

 
borilunad:
Entonces vea lo de arriba, ¡corregido!
Resulta que cuando me acusaron de falta de lógica booleana -se referían a los paréntesis extra en los operadores.... pero son reglas de formato de expresiones y operadores.... ¿es lógica booleana?
 
T-G:

Hola a todos. Necesito ayuda.

En mi tablero se abre una serie de órdenes, en la cantidad establecida por el parámetro MaxOrders, a continuación he indicado como se ve por ejemplo, no juzgue estrictamente por lotes

Pedido de 1 lote = 128

Pedido de 2 lotes=256

lote-orden-lote=512

4-lotes-orden-lotes=1024

Lote de 5 órdenes=2048

Todo esto es para el probador.

MaxOrders=5, y 5 órdenes están abiertas. El problema es que en el Probador de Estrategias mi broker tiene un límite de 1000 lotes y por lo tanto las órdenes 4 y 5 no se abren como debería.

He buscado en Internet la manera de cambiar este parámetro en el Probador de Estrategias, pero no he encontrado cómo hacerlo.

Por lo tanto, he decidido resolver esta cuestión mediante la programación. He decidido abrir varios pedidos para 4 pedidos y conseguir dos

4-order-lot=1000

lote de 4 órdenes=24

para 5 pedidos 3:

Lote de 5 órdenes=1000

Lote de 5 órdenes=1000

lote de 5 órdenes=48

pero hay dos problemas aquí,

- cómo romper correctamente el MM para que se descomponga en lotes según el lote máximo

- Y cómo abrir órdenes adicionales sin romper la orden, es decir, habrá más órdenes que en el MaxOrders, pero no contar las órdenes adicionales que se abren para cumplir con el volumen.

Quizás debamos dividir los lotes, es decir, abrir varias posiciones que estén conectadas entre sí con comentarios donde se coloquen los tickers de las órdenes padre e hijo. El pedido padre con el volumen de 1000 tendrá un ticket del pedido con el volumen de 24, y el pedido hijo con el volumen de 1000 tendrá un ticket en este orden. Y tendremos que cerrar, modificarlas de la misma manera... O más sencillo: una microcuenta y lotes muy pequeños. En los cálculos para el seguimiento visual multiplica los lotes por el coeficiente, para que tomen el valor que necesitas...

No se me ocurre nada más, excepto una empresa de corretaje que permita mayores volúmenes.

O... divide por 100 tus lotes

 
artmedia70:

No hace falta ser un experto en álgebra booleana para plantear las condiciones con claridad...

Permítame facilitarle la vida... Sustituya if por el habitual si, else por otherwise, && por and, || por or , etc. Entonces podrás leer con tus propias palabras normales lo que está escrito o decidir lo que quieres escribir.

Lo que has escrito (omitamos por ahora la descripción de la condición incorrecta):

1. if (ot==0) Si no hay órdenes de mercado (ni órdenes de mercado, ni pendientes, ni abiertas por este EA, ni por otro EA, ni manualmente)... Si la respuesta es afirmativa, se ejecuta la línea 2, si es negativa, se pasa a la línea 3.

2. if (Bid==Price) Si el precio es igual al precio de apertura de la vela actual... Si lo es, se ejecuta la línea 3, si no, pasamos a la línea 4.

3. if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point)) Si el precio de apertura de la primera vela es superior al precio de cierre de la primera vela en más de 100 puntos y menos de 120 puntos... Si lo es, pase a la línea 4, si no, pase a la línea 5.

4. if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point)) Si el máximo de la primera vela es superior al precio de apertura de la primera vela en más de 40 puntos y menos de 60 puntos... Si lo es, entonces ejecutamos la línea 5, si no, pasamos a la línea 6.

5. if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point)) Si el cierre de la primera vela es superior al mínimo de la primera vela en más de 40 puntos y menos de 60 puntos. Si lo es, se ejecuta la línea 6, si no, se pasa a la línea 7.

6.

7.

Como puedes ver en esta descomposición, o bien haces que todas las líneas de código se ejecuten una tras otra (en caso de que cada línea devuelva true), o bien te saltas la línea que viene después de la que devuelve false.

Para evitar confusiones sobre sus condiciones y para que la lógica sea correcta, encierre todas las sentencias entre llaves, independientemente de si se debe ejecutar una sola línea después del valor de verdad, o un bloque entero.

Por ejemplo:

Por lo tanto, trata de descomponer tu código en componentes, eliminando los paréntesis extra, que son innecesarios en este caso...

Muchas gracias por su exhaustiva respuesta.

 
solnce600:
Resulta que cuando me acusaron de falta de lógica booleana -se referían a los paréntesis extra en los operadores.... pero son reglas de formato para expresiones y operadores.... ¿es esto lógica booleana?

No - ausencia de corchetes donde son necesarios. Aplicando al bloque de lógica de búsqueda del tamaño de las velas en su EA
 
solnce600:

Muchas gracias por su exhaustiva respuesta.

He corregido tu código, para que siga controlando el cierre por parada - he asignado un valor al mago por ti. No lo he comprobado yo mismo.
 

Buenas tardes. Estimado, por favor aconsejar cómo implementar esta condición en el Asesor de Expertos.

Las operaciones se abren en el marco de tiempo horario bajo ciertas condiciones, pero tenemos que hacer que las operaciones se abran sólo bajo las condiciones del gráfico de 4 horas.

Por ejemplo: Si en el gráfico horario las medias cruzadas abren una operación, siempre que en el gráfico de 4 horas las medias con otros parámetros se crucen en la misma dirección. Agradecería respuestas y ayuda.

 
teplovoz:

Buenas tardes. Estimado, por favor aconsejar cómo implementar esta condición en el Asesor de Expertos.

Las operaciones se abren en el marco de tiempo horario bajo ciertas condiciones, pero tenemos que hacer que las operaciones se abran sólo bajo las condiciones del gráfico de 4 horas.

Por ejemplo: Si en el gráfico horario las medias cruzadas abren una operación, siempre que en el gráfico de 4 horas las medias con otros parámetros se crucen en la misma dirección. Agradecería respuestas y ayuda.

Se aplica a las MA para obtener datos de H4 para la primera y segunda barra:

double MA1_H4=iMA(Symbol(),PERIOD_H4,ma_period,ma_shift,ma_method,appled_price,1);
double MA2_H4=iMA(Symbol(),PERIOD_H4,ma_period,ma_shift,ma_method,appled_price,2);

Para obtener los datos de H1 para la primera y segunda barra:

double MA1_H1=iMA(Symbol(),PERIOD_H1,ma_period,ma_shift,ma_method,appled_price,1);
double MA2_H1=iMA(Symbol(),PERIOD_H1,ma_period,ma_shift,ma_method,appled_price,2);

Haga lo mismo con otros períodos e indicadores.

 
artmedia70:

Aplicar a las MAs para datos H4 para la primera y segunda barra:

Haga lo mismo con otros períodos e indicadores.



Vaya, soy tan tonto que supongo que sólo tengo que especificar el plazo requerido en los parámetros del asistente y ya está. Gracias, mi cerebro se niega a trabajar estos días :)
 
artmedia70:
He corregido tu código para que siga el seguimiento del cierre de la parada - he asignado un valor al mago por ti. No lo he comprobado yo mismo.


Lo haré de nuevo. Muchas gracias.
 
No pasa nada, todos los tenemos de vez en cuando...