[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 444

 
Elena56:

Durante el proceso de optimización, compruebo el elemento de visualización y pulso el inicio, tras lo cual el probador de estrategias se desvanece, la marca de visualización desaparece y la prueba avanza a un ritmo muy lento. ¿Qué significa? Estaba cargando citas y actualizando. (MT4)

Se trata de una optimización, no de una prueba.
 

Señores, ayuda plz. Tengo un problema - no quiere escribir el texto en el cierre de la orden, dime por qué plz

   OrderSelect(otbH,SELECT_BY_TICKET);
   if(OrderSelect(otbH,SELECT_BY_TICKET)==true)
   { 
      Print("1");
      if(OrderCloseTime()>0)
      {
         Print("2");
         ObjectCreate("ndp"+OrderTicket(),OBJ_TEXT,0,0,0);
         ObjectSet("ndp"+OrderTicket(),OBJPROP_TIME1,TimeCurrent());
         ObjectSet("ndp"+OrderTicket(),OBJPROP_PRICE1,OrderClosePrice());
         ObjectSetText("ndp"+OrderTicket(),OrderProfit(),5,"Arial",Aqua);
      } 
   }    
   
   

otbH - este es el número de billete. Lo interesante es que el número "1" lo imprime, pero el número "2" se niega... No puedo entender la razón... ...porque selecciona el orden... Explícame...

 
CLAIN:

Señores, ayuda plz. Tengo un problema - no quiere escribir el texto en el cierre de la orden, dime por qué plz

otbH - este es el número de billete. Lo interesante es que el número "1" lo imprime, pero el número "2" se niega... No puedo entender la razón... ...porque selecciona el orden... Explícame...


¿El pedido está cerrado o no?
 

La orden se abre primero y luego se cierra.

Este script se ejecuta en cada tick, por lo que en un momento dado se cerrará definitivamente...

Selecciono el pedido por el billete primero - OrderSelect(otbH,SELECT_BY_TICKET); - lo seleccionará, no importa donde esté, ¿verdad?

Y entonces debería determinar si está cerrado o abierto... pero por alguna razón no lo hace...

 
CLAIN:

La orden se abre primero y luego se cierra.

Este script se ejecuta en cada tick, por lo que en un momento dado se cerrará definitivamente...

Selecciono el pedido por el billete primero - OrderSelect(otbH,SELECT_BY_TICKET); - lo seleccionará, no importa donde esté, ¿verdad?

Y entonces debería determinar si está cerrado o abierto... pero por alguna razón no lo hace...


Intente seleccionar una orden cerrada
 
Dime cómo, no sé cómo.
 
CLAIN:
Dime cómo, no sé cómo.

   int total=OrdersHistoryTotal();
   for (int i=total-1;i>=0;i--) 
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol()==Symbol())
         {
            if(OrderMagicNumber()==MagicNumber )
            {
               // Ваши действия с ордером
            }
         }
      }
   }
 

La pregunta es - el precio de apertura se calcula en el cruce de dos móviles (exagerado), en la prueba - todo está bien, pero cuando se pone en la demo, las aperturas son falsas (porque durante la formación de un precio de la barra dentro de saltar de min a max), por lo tanto, la idea de tener en cuenta el cruce sólo cuando se forma la barra, es decir, la barra se forma (vio el cruce) y luego la próxima entrada en el mercado, teniendo en cuenta el cruce.

 
DOCTORS:

La pregunta es la siguiente: el precio de apertura se calcula mediante el cruce de dos deslizadores (exagerado), en la prueba todo está bien, pero cuando se abre la demo, las aperturas son falsas (porque durante la creación de una barra el precio en el interior salta de min a max), por lo tanto, la idea es considerar el cruce sólo después de la barra se forma, es decir, la barra se forma (vimos el cruce) y luego la próxima entrada en el mercado se hace con el cruce.

Es extraño por qué está bien en el probador - en el probador la barra cero tampoco se forma y habrá falsos cruces también.

Busca los cruces en el primer y segundo compás. Si en el segundo МА1 <= МА2, mientras que en el primero МА1 > МА2, significa que МА1 ha cruzado МА2 de abajo a arriba. En el caso del top-down, es al revés.

Haz la comparación sólo por sustracción:

   double MA1=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,1);
   double MA2=iMA(Symbol(),Period(),ma_period,ma_shift,ma_method,applied_price,2);
   if (NormalizeDouble(MA1-MA2,Digits)<=0)
   if (NormalizeDouble(MA1-MA2,Digits)>0) {
      // MA1 пересекла MA2 снизу-вверх
      }

En el caso de la parte superior, viceversa.

Puede compararlo no con cero, sino con algún valor mínimo, por ejemplo, 0,1*Punto

 
artmedia70:

Es extraño que esté bien en el probador - en el probador la barra de cero tampoco se forma y habrá falsos cruces también.

Busca los cruces en el primer y segundo compás. Si en la segunda MA1 <= MA2 y en la primera MA1 > MA2, entonces MA1 ha cruzado a MA2 de abajo hacia arriba. En el caso del top-down, es al revés.

Haz la comparación sólo por sustracción:

En el caso de la parte superior, viceversa.

Puede compararlo no con cero, sino con algún valor mínimo, por ejemplo, 0,1*Punto


¡Muchas gracias!

Razón de la queja: