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

 
vovan-gogan:

¿No es lo mismo en mi ejemplo? ¿En qué se diferencia? Excepto que no he añadido una función de inicio.


Mejor aún, es así.

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }


                 
         
      
 
vovan-gogan:

Pero no veo la diferencia para intentarlo. Por favor, dígame qué he hecho mal.

Prueba y escribe el resultado. Es posible que la orden no se ajuste a su condición, debido a la falta de comprobaciones necesarias al establecerla. Además, no estaría de más añadir un gestor de errores cuando no se instala por una u otra razón, el deslizamiento hacer > 0 - esto es lo primero que muestra inmediatamente.
 
¿Se refiere al deslizamiento de una orden pendiente?
 
vovan-gogan:
¿Se refiere al deslizamiento de una orden pendiente?


No se metan con el texto - sólo lo ponen y ya está... Compruébenlo.

Por lo menos en el probador todo debería funcionar - si no se establece una orden debido a una distancia corta, se establecerá la próxima vez - su pregunta era sobre otra cosa - entonces terminará todo lo demás - comprobar como es en el probador.

 
Roman.:


No se metan con el texto, pónganlo y ya está... Compruébenlo.

Al menos en el probador todo debería funcionar - si no se establece una orden debido a una pequeña distancia, se establecerá la próxima vez - su pregunta era sobre otra cosa - entonces terminará todo lo demás - comprobar como es, en el probador.


Gracias por querer ayudar, pero en esta situación particular me gustaría que primero me ayudaras a entender mi error. Si utilizo constantemente soluciones desarrolladas por otros, y no me doy cuenta de mis errores, es poco probable que crezca como programador. Espero que estés de acuerdo con eso
 
vovan-gogan:

¿No es lo mismo en mi ejemplo? ¿En qué se diferencia? Excepto que no he añadido la función de inicio.


Vuelve a leer el concepto de variables locales y globales. Además, debido a esta construcción

 if (OrdersTotal()>= 1) return(0);  

si una posición se abre manualmente o por otro EA en la misma cuenta de operaciones, el EA no establecerá una orden pendiente cuando la condición de la operación se active para establecer una orden pendiente, funcionará bien para un probador de estrategias.

En el caso general, es necesario organizar un bucle por las órdenes abiertas o establecidas por este mismo Asesor Experto, dependiendo de la lógica de su algoritmo - TS, en la ausencia de órdenes pendientes, establecerlo y aumentar el contador de órdenes e imprimir la información.

 
vovan-gogan:

Gracias por tu disposición a ayudar, pero en esta situación particular me gustaría que me ayudaras en primer lugar a entender mi error. Si utilizo constantemente soluciones escritas por otros y no me doy cuenta de mis errores, difícilmente podré crecer como programador. Espero que estés de acuerdo con eso


De acuerdo. Vuelva a leer el concepto de variables locales y globales en el terminal del cliente.



int start()                            // Спец. функция start
  {
    int Orders=0;    
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          int ticket = OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic);     
          if (ticket>0)              // Если ордер установлен
             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)  Sleep(100); // Если ордер выбран         
          Orders++;
          Alert ("Ордер выставлен.Orders = ",Orders );
             
        }   
         
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
vovan-gogan:

Gracias por su disposición a ayudar, pero en esta situación particular me gustaría que me ayudara a entender mi error primero.


Haz la pregunta ya... :-Р

Prueba la variante de mi anterior post.

Lea el tutorial y la documentación aquí - no he visto más detallada picada en cualquier lugar todavía.

 
Gracias por el consejo sobre las variables globales y locales) Voy a leer más)
 
Alexandr24:
Dime por qué cuando abro un gráfico (en tiempo real) con Plazo de la M30 y aplico el indicador con el parámetro int shift=iBarShift(NULL,PERIOD_M5,some_time); el shift será como debe ser, pero cuando paso el mismo indicador por el tester con el periodo M30 el shift no se calcula?

¿Quién sabe cómo resolver este problema?