¿Un error en la función OrderSend()?

 

Llevo 4 días luchando y no consigo poner en práctica una cosa aparentemente sencilla. He hecho cosas similares antes con diferentes indicadores y velas. No puedo hacerlo con un reloj de pulsera.

¡La esencia es primitiva! Tan pronto como el precio se acerca a la máscara de un determinado período a una cierta distancia de i_thresholdFromMa (¡en este EA es sólo uno!), se establece una pechina. Ya he eliminado todas las funciones y filtros que estaban disponibles.

Aquí está la función de compra:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
   int ticket = -1;
   double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
   
   if ((ND(OOP) - Ask) >= g_stopLevel)             // Проверка цену открытия на стоплевел          
   {
       if (ND(OOP) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
       {
           Print("Bid = ", Bid);
           Print("Ask = ", Ask);
           Print("fastMa = ", fastMa);
           Print("Цена покупки = ", fastMa + buyHear * pt);
           Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
           ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);
       }
   }
   if (ticket > 0)
   {
       return (true);
   }
   else
    
   Alert (GetLastError());
}

Podemos ver que el OrderSend( ) tiene un precio de apertura igual a la suma de las variables fastMa + buyHear * pt

En la captura de pantalla, podemos ver que ¡NO existe tal precio!

La junta está en la mashka

También puede ver que no hay entradas, donde el precio tocó fastMa (marcador rojo)

Tomé deliberadamente el 1er buffer, es decir, la penúltima barra, para saber con seguridad que la penúltima barra ya ha cerrado y no habrá otro cierre... Quería evitar que el último compás de 0 se volviera a grabar.

Este es el mensaje de la orden:

ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0);

ES OOP:

double OOP = fastMa + buyHear * pt;             // Получаем значение цны открытия
¿Cómo es posible?
Archivos adjuntos:
test_ma_1.mq4  9 kb
 
hoz:

Llevo 4 días luchando y no consigo poner en práctica una cosa aparentemente sencilla. He hecho cosas similares antes con diferentes indicadores y velas. No puedo hacerlo con un reloj de pulsera.

¡La esencia es primitiva! Tan pronto como el precio se acerca a la máscara de un determinado período a una cierta distancia de i_thresholdFromMa (¡en este EA es sólo uno!), se establece una pechina. Ya he eliminado todas las funciones y filtros que estaban disponibles.

Aquí está la función de compra:

Podemos ver que el OrderSend( ) tiene un precio de apertura igual a la suma de las variables fastMa + buyHear * pt

En la captura de pantalla, podemos ver que ¡NO existe tal precio!

También puede ver que no hay entradas, donde el precio tocó fastMa (marcador rojo)

Tomé deliberadamente el 1er buffer, es decir, la penúltima barra, para saber con seguridad que la penúltima barra ya ha cerrado y no habrá otro cierre... Quiero evitar que la última barra cero no se registre.

Este es el mensaje de la orden:

A OOP:

¿Cómo es posible?

¿Todavía no vas a traer los troncos?
 
Vinin:

¿Todavía no me vas a dar los registros?


Esto es lo que hay en los registros:

2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: open #3 buy stop 0.10 EURUSD at 1.31074 ok
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.3107
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: fastMa = 1.3097
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Ask = 1.3099
2013.02.06 17:54:05     2011.01.13 07:00  test_Ma_1 EURUSD,H1: Bid = 1.3099
2013.02.06 17:54:05     2011.01.12 14:32  Tester: order #2, buy 0.10 EURUSD is opened at 1.29876
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: open #2 buy stop 0.10 EURUSD at 1.29876 ok
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.2988
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: fastMa = 1.2978
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Ask = 1.2978
2013.02.06 17:54:05     2011.01.12 14:00  test_Ma_1 EURUSD,H1: Bid = 1.2978
2013.02.06 17:54:05     2011.01.12 12:11  Tester: order #1, buy 0.10 EURUSD is opened at 1.29953
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: open #1 buy stop 0.10 EURUSD at 1.29953 ok
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: i_thresholdFromMa * pt = 0.0005
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Цена покупки = 1.2995
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: fastMa = 1.2985
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Ask = 1.2987
2013.02.06 17:54:05     2011.01.12 12:00  test_Ma_1 EURUSD,H1: Bid = 1.2986
2013.02.06 17:54:04     test_Ma_1 inputs: i_TF=0; i_fastMaPeriod=10; i_magic=3333021; i_thresholdFromMa=5; buyHear=10; SellHear=10; 

Es decir, si crees en los registros, la compra está donde debería estar. Si te fijas en la captura de pantalla, no está en absoluto... La captura de pantalla anterior muestra que la orden pendiente está en el lugar equivocado. 10 de fastMa no es ni siquiera cerca...

 

¡Hola, Víctor! Se abre para mí, pero gotea. Se abre cuando retoco un poco una línea:

   if ((ND(OOP) - Ask) >= MathMax(g_stopLevel,g_spread))// Проверка цену открытия на стоплевел          
¡Añade lo mismo para sall! Buena suerte.
 
borilunad:

¡Hola, Víctor! Se abre para mí, pero gotea. Y se abre cuando retoqué un poco una línea:

¡Me gustaría añadir lo mismo para sall! Buena suerte.


Hola, Boris. Bueno, se abre en los mismos lugares que antes. Donde no se abrió, sigue sin abrirse. Funciona de forma muy extraña en el H1.

Cambié a M15 y puse la máscara a MODE_OPEN en la barra 0(cero).

En general, si lo observamos, las órdenes pendientes se colocan donde se necesitan (me refiero a M15 TF ), pero las órdenes pendientes no se colocan donde obviamente deberían abrirse. Aquí hay una captura de pantalla como ejemplo:

Una junta con las pausas

borilunad:

¡Hola Victor! Lo tengo abierto, pero me jode.

Boris, y será... Quiero decir, es sólo la primera etapa... Es un largo camino hasta la meta. Todas las condiciones vendrán después, y se decidirán gradualmente. Por ahora, sólo tenemos que resolver los matices actuales.
 
hoz:


Hola Boris. Bueno, se abre en los mismos lugares que antes. Donde no se abrió, sigue sin abrirse. Funciona de forma muy extraña en el H1.

Cambié a M15 y puse la muñeca en MODE_OPEN en 0(cero) barra.

En general, si lo observamos, las órdenes pendientes se colocan donde se necesitan (me refiero a M15 TF ), pero las órdenes pendientes no se colocan en los lugares donde obviamente deberían abrirse. Por ejemplo, aquí hay una captura de pantalla:

Boris, y él... Quiero decir, es sólo la primera etapa... Es un largo camino hasta la meta. Todas las condiciones vendrán después, y se decidirán gradualmente. Por ahora, sólo tenemos que resolver los matices actuales.

Victor, debemos estudiar los indicadores y los métodos de su uso en la EA. Me parece que quieres algo que no sabes cómo poner en práctica.

Y otra cosa, no hay que obsesionarse con condiciones muy estrictas, porque seguramente el precio no se comportará como usted quiere en la mitad de los casos. Así que hay que imaginar lo que se podría hacer en los peores casos.

Francamente, sigo sin entender por qué es importante que entre en esta barra y no en la otra. En mi opinión, lo principal es identificar y utilizar la tendencia iniciada en el tiempo, más que un punto de entrada determinado. Pruebe y compare diferentes Mashkeys, y luego aprenda a usarlos como filtros de entradas no deseadas en lugar de señales para entrar, que a menudo fallan, ¡y los otros indicadores no son mejores!

 
Trate de trazar el valor de i_thresholdFromMa y t y observar en el probador, y el resultado de la comparación también se puede trazar allí
 
hoz:


Esto es lo que hay en los registros:

Es decir, si crees en los registros, la compra está donde debería estar. Si te fijas en la captura de pantalla, no está en absoluto... Arriba he dado una captura de pantalla, se puede ver que la orden pendiente está en el lugar equivocado. El 10 de fastMa no está ni de lejos...


A juzgar por el registro, la función OrderSend( ) coloca la orden correctamente, al precio que le pasaste
 

PapaYozh:



A juzgar por el registro, la función OrderSend() coloca la orden correctamente, al precio que se le pasa

¡¡Sí!!

10 de fastMa no es ni de lejos...

Tienes un conjunto de 100 pips.

Más captura de pantalla, es correcta.

 
r772ra:

¡¡Sí!!

10 de fastMa no es ni de lejos...

Tienes 100 p's establecidas.

otro pantallazo, eso es todo.


En relación con el 4 dígito es 10pp. Y en el de 5 dígitos es de 100pp. ¿Cuál es tu problema?
 
PapaYozh:

A juzgar por el registro, la función OrderSend() coloca la orden correctamente, al precio que se le pasa


A juzgar por el registro, es correcto. Pero si intentas hacerlo en el probador con la misma configuración, los pedidos no se están realizando correctamente de forma periódica, lo que ya he dicho. Eso es lo que escribí. He leído el registro, todo está bien y claro... Mirando la captura de pantalla... (Cuando miro el gráfico,observo que la entrada de compra es más baja que la entrada de compra... y esto es contrario a la condición.

Pero también es extraño que no lo haya notado en M5, PERO sí se ha notado que se pierden algunas entradas.