[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 129

 

Saludos a todos, me he descargado el Búho, en el tester todo es normal y vende y compra, lo he puesto en la demo en Alpari, solo compra.....

¿Quizás falte algo ahí? No sé cómo funcionaría....

/* descompilado borrado */

 

Quiero que mi Asesor Experto compre cuando el precio se acerque al precio de la máscara + sangríai_thresholdFromMa. Lo escribí así para una posición larga:

bool OpenBuy(double fastMa)
{
   int ticket = -1;
   
   //if (Bid > fastMa)
   if (High[0] == fastMa || Low[0] == fastMa)
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

El valor defastMa se pasa a través de los parámetros de la función. Luego comparo los valores de la corriente alta y baja con el valor del golpe rápidofastMa.

Si el valor de high o low es igual al valor de la válvula rápidafastMa , entonces lógicamente se debe abrir una orden al precio (valor de la válvula rápidafastMa+ desplazamiento de la mismai_thresholdFromMa).

La función no funciona. ¿Cuál es la razón? El Asesor Experto no envía ningún error al diario.

 
hoz:

Quiero que mi Asesor Experto compre cuando el precio se acerque al precio de la máscara + sangríai_thresholdFromMa. Lo escribí así para una posición larga:

El valor defastMa se pasa a través de los parámetros de la función. Luego comparo los valores de la corriente alta y baja con el valor del golpe rápidofastMa.

Si el valor de high o low es igual al valor de la válvula rápidafastMa , entonces lógicamente se debe abrir una orden al precio (valor de la válvula rápidafastMa+ desplazamiento de la mismai_thresholdFromMa).

La función no funciona. ¿Cuál es la razón? El Asesor Experto no envía ningún error al diario.

Buenas noches, ¡estás en medio de la noche!

Las igualdades entre fracciones nunca serán fijas. Las garrapatas se deslizarán y no habrá señal. Por eso es mejor así:

   if (High[0] >= fastMa && Low[0] <= fastMa)
 

Estoy de acuerdo con Boris, pero añadiría que cualquier comparación de precios es mejor hacerla así

no Bid>fastMA sino Bid-fastMA>Zero

No High[0]>=fastMA , sino High[0]-fastMA>-Zero , y así sucesivamente:)

En la sección global:

#define Zero 0.00000001 , o algo similar.

 
tara:

Estoy de acuerdo con Boris, pero también añadiría que cualquier comparación de precios es mejor hacerla así

no Bid>fastMA sino Bid-fastMA>Zero

No High[0]>=fastMA , sino High[0]-fastMA>-Zero , y así sucesivamente:)

En la sección global:

#define Zero 0.00000001 , o algo similar.

Y estoy de acuerdo con Alexei, pero no he entrado en detalles, ¡sólo he corregido la evidente incorrección! El resto se encontrará comprobando, probando a gusto de cada uno.
 

Alexey y Boris gracias por su valioso comentario.

#define Zero 0.00000001 , creo que sería muy pequeño :) Supongo que se puede poner sin problemas medio punto aquí o un punto de propagación...

 
hoz:

Alexey y Boris gracias por su valioso comentario.

#define Zero 0.00000001 , creo que sería muy pequeño :) Supongo que se puede poner sin problemas medio punto aquí o un punto de propagación...

¡Prueba a poner una variable en lugar de Cero y así determinas el espaciado necesario! Y lo más probable es que tengas que dejarlo, porque su valor cambiará en función del estado del mercado.
 
borilunad:
¡Prueba a poner una variable en lugar de Cero y así defines la holgura necesaria! Y lo más probable es que debas dejarlo, porque su valor cambiará en función del estado del mercado.


Sí, si hay una variable, debemos probarla y observar los resultados del mercado. Mientras tanto, lo estoy escribiendo para ejecutarlo en el probador e identificar los puntos fuertes y débiles de mi ST.

Esta es mi lógica:

bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   //if (Bid > fastMa)
   //if (High[0] == fastMa || Low[0] == fastMa)
   if ( (MathAbs(High[0] - fastMa) <= 1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

He puesto 1 en lugar de la holgura variable por ahora para la prueba, y luego lo pondré en la externa.

Según tengo entendido será la variante más correcta. Si el precio toca la barra o no, será importante para obtener una señal. La vela tiene dos extremos (alto y bajo). Significa que comprobamos por sus 2 extremos. Por eso escribí el hueco para que fuera más corto que 1.

Pero me pregunto si se abre a la distancia dei_umbralDeMa(sangría), es decir, no desde la muñeca, sino desde el extremo de la vela.

Lepediré que no preste atención a la condición para entrar en la función de apertura, por supuesto que la incluiré en la función de señal.

Aquí hay una captura de pantalla, por ejemplo,

Captura de pantalla del momento

La bola roja es fastMA.i_thresholdFromMa(sangría de la ondulación) es 5 en las variables externas. El resto de las condiciones son de compra. Aquí vemos 2 órdenes de stop azules por debajo del fastMa rojo. No veo ninguna lógica en esto. La orden se envía precisamente al precioND(fastMa + i_thresholdFromMa * pt) y puedo verlo en la función dada...

 
hoz:


Sí, si es variable, debe probarse y observarse en el mercado, qué tipo de resultados muestra. Mientras tanto, escribo esto para ejecutarlo en el probador e identificar los puntos fuertes y débiles del ST.

Esta es mi lógica:

He puesto 1 en lugar de la holgura variable por ahora para la prueba, y luego la pondré en la externa.

Según tengo entendido será la variante más correcta. Si el precio toca la barra o no, será importante para obtener una señal. La vela tiene dos extremos (alto y bajo). Significa que comprobamos por sus 2 extremos. Por eso escribí el hueco para que fuera más corto que 1.

Pero me pregunto si se abre a la distancia dei_umbralDeMa(sangría), es decir, no desde la muñeca, sino desde el extremo de la vela.

Lepediré que no preste atención a la condición para entrar en la función de apertura, por supuesto que la incluiré en la función de señal.

Aquí hay una captura de pantalla, por ejemplo,

La marca roja es fastMA.i_thresholdFromMa(sangría de la ondulación) es 5 en las variables externas. Por todas las condiciones el resto es comprar. Aquí vemos 2 órdenes de stop azules por debajo del fastMa rojo. No veo ninguna lógica en esto. La orden se envía exactamente al precioND(fastMa + i_thresholdFromMa * pt) y puedo verlo en la función dada...

Si quiere que la posición se abra antes, en medio de una barra, tiene que especificar Barra baja para el Bai y Barra alta para el Sall.

   if ( MathAbs(fastMa - Low[0]) <= 1 * pt )//для бая

   if ( MathAbs(High[0] - fastMa) <= 1 * pt )// для сэлла
   
 
borilunad:

Si quiere que la posición se abra antes, en medio de una barra, debe especificar Barra baja para el Bai y Barra alta para el Sall.

if ( MathAbs(fastMa - Low[0]) <= 1 * pt )//для бая

   if ( MathAbs(High[0] - fastMa) <= 1 * pt )// для сэлла


Bueno, no tienes que hacerlo antes. No sé desde qué lado se acerca la vela a la máscara. Arriba o abajo. Esa es la cuestión. Por eso es inapropiado. ¿No es así?

De todos modos, el precio de apertura en mi función OrderSend() es diferente y de todos modos es mayor que la máscara:

Aquí imprimo los valores de la función:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ( (MathAbs(High[0] - fastMa) <= 1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
   {
       if ((fastMa + i_thresholdFromMa * pt) > Ask)            // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
      Print("fastMa = ", DoubleToStr(fastMa,Digits));
      Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits));
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
      Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits));
   }
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

Esto es lo que muestra el registro:

2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #110 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #110 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #110 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #109 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #109 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #109 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #108 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #108 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #108 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #107 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #107 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:14     D_Aleks_first_pattern EURUSD,H1: loaded successfully

Es obvio, el precio de apertura debe ser fijado por mí. Se está calculando. Se añade un hueco al valor de la máquina. Y puedes verlo en la impresión...