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

 
Leonid123456:

para esta última EA)). En realidad, funcionó. Fue el último)). Este EA es para probar... Por lo tanto, el trabajo para varias monedas y el comercio manual (juntos) no está previsto todavía...

Me puedes dar algunos consejos para el futuro, sería bueno saber cómo hacerlo bien...

Gracias de nuevo.

Si lo necesitas, debes distinguir una orden de mercado de una pendiente. La primera que te encuentres, por todos los criterios (símbolo, mago, tipo) suele ser la más fresca, pero sería mejor mirar también la hora de apertura para que seguramente no fuera más joven.

En el probador puede elegir de una vez

OrderSelect(OrdersTotal()-1,SELECT_BY_POS))

para trabajar con la última orden abierta. Si el sistema no tiene órdenes pendientes, todo funcionará bien. Pero si hay órdenes pendientes y de mercado, esto no funcionará, por no hablar del trabajo real.

 
Leonid123456:

para esta última EA)). En realidad, funcionó. Fue el último)). El Asesor Experto es para probar... Por lo tanto, el trabajo para varias monedas y el comercio manual (juntos) no está previsto todavía...

Me puedes dar algunos consejos para el futuro, sería bueno saber cómo hacerlo bien...

Gracias de nuevo.

Es más correcto no escribir cosas innecesarias. ¿Por qué has puesto bucles anidados? Al fin y al cabo, todo lo que necesita se puede hacer en un solo bucle con una selección de pedidos.

if(New_Bar)
{
OrderSend(Symbol(),OP_BUYSTOP,Lotpers,Ask+step,100,0,0,NULL,MagicNumber,0,DarkTurquoise);
OrderSend(Symbol(),OP_SELLSTOP,Lotpers,Bid-step,100,0,0,NULL,MagicNumber,0,Yellow);
}

 for(int b=0; b<OrdersTotal(); b++)
  {
   if(OrderSelect(b, SELECT_BY_POS) && OrderSymbol() == _Symbol && OrderMagicNumber() == MagicNumber)
    {
     lastlot = OrderLots();
   // Здесь надо в переменную засунуть тикет выбранного ордера
     if(OrderType() == OP_BUYSTOP||OrderType() == OP_BUY)
      orderprisebuy = OrderOpenPrice();
   
      if(OrderType() == OP_SELLSTOP||OrderType() == OP_SELL)
       orderprisecell = OrderOpenPrice(); 
         
        SL_VirtualCell = orderprisecell+step1*Point;
        SL_VirtualBuy = orderprisebuy-step1*Point;

                          /*  if(Mas_Tip[0] >0|| Mas_Tip[1] >0)
                                               {
if (New_Bar&&/*valsar1<Ask &&  osma0>0&&osma1<0    /*&& Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_BUY,NormalizeDouble( lastlot*Marti,2),Ask,100,0,0,NULL,MagicNumber,0,DarkTurquoise);

if (New_Bar&& /*valsar1>Bid && osma0<0&&osma1>0    /* && Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_SELL,NormalizeDouble( lastlot*Marti,2),Bid,100,0,0,NULL,MagicNumber,0,Yellow);       
         
}*/

CheckEvents(MagicNumber); // Вот здесь теряется выбранный ордер при переборе ордеров в вызванной функции

/*if ( eventSellClosed_SL >0|| eventBuyClosed_SL >0)
{        as();
                

 }
  /* ///   if ( eventBuyClosed_TP > 0 )
   //     Alert( Symbol(), ": Buy-позиция закрыта по ТейкПрофиту!" );

   */
    if(eventBuyStopOpened > 0)
     {
      OrderSend(Symbol(),OP_SELLSTOP,NormalizeDouble( Lotpers,5),orderprisecell,0,0,0,NULL,MagicNumber,0,clrKhaki); 
 
      if (OrderType() == OP_SELL)
       OrderClose(OrderTicket(),OrderLots(), Ask, 3,clrIvory );  // Здесь может быть чужой OrderTicket() Возможны и другие аналогичные потери
     }//завершение блока if(eventBuyStopOpened > 0)
 ///

  if(eventSellStopOpened > 0)
  {
  OrderSend(Symbol(),OP_BUYSTOP,NormalizeDouble( Lotpers,5),orderprisebuy,0,0,0,NULL,MagicNumber,0,clrPlum);
 
   if (OrderType() == OP_BUY)
    OrderClose(OrderTicket(),OrderLots(), Bid, 3,clrIvory );  
  }//завершение блока if(eventSellStopOpened > 0)
 }//завершение блока if(OrderSelect(b
}//завершение блока for(int b=0


No logré entrar en ese lugar donde se tienen comentarios de varias líneas. Algo me pareció que podría haber un error de compilación allí... Presta atención a mis comentarios en el código.

 
Zhunko:
¿Qué sentido tiene?
Gracias por su ayuda.
 
AlexeyVik:

No escribas cosas innecesarias. ¿Por qué has puesto bucles anidados? Porque todo lo que necesita se puede hacer en un solo bucle con una selección de pedidos.


No he conseguido entender ese lugar donde tienes comentarios de varias líneas. Algo me pareció que podría haber un error de compilación allí... Presta atención a mis comentarios en el código.

No hay errores, pero se sugiere comprobar las funcionesOrderSend.OrderClose. yOrderDelete

El valor de retorno de 'OrderSend' debe ser comprobado .

Gracias por sus comentarios.

 

Buscando el mínimo del indicador "ZigZag" en el array usando"ArrayMinimum".

¿Puedo configurar la búsqueda para que ignore los valores nulos o tendré que utilizar un bucle para encontrarlos?

 
No sé cómo codificar. Necesito que el EA espere un tiempo determinado si la última postura no fue rentable. ¿Tienes alguna idea?
 
Forexman77:

Buscando el mínimo del indicador "ZigZag" en el array usando"ArrayMinimum".

¿Puedo configurar la búsqueda para que ignore los valores nulos o tendré que utilizar un bucle para encontrarlos?

Lo más probable es que tenga que utilizar un bucle
 
Vinin:
Probablemente tenga que utilizar un bucle
Gracias.
 

¿Cómo encontramos la corrección más profunda entre el máximo y el mínimo? El máximo y el mínimo son conocidos por nosotros, no es un problema encontrarlos usando iHighest y

Si utilizamos iHighest y iLowest, a veces encontraremos extremos cercanos, ya que no siempre es así, como se muestra en la imagen. En general, necesitamos la identificación de la formación ABC.

Intenté aplicarle ZigZag pero no trae aciertos exactos.

е.

 

Forexman77:

¿Cómo encontramos la corrección más profunda entre el máximo y el mínimo? El máximo y el mínimo son conocidos por nosotros, no es un problema encontrarlos usando iHighest y

Si utilizamos iHighest y iLowest, a veces encontraremos extremos cercanos, ya que no siempre es así, como se muestra en la imagen. En general, necesitamos la identificación de la formación ABC.

Intenté aplicar ZigZag para eso pero no trae aciertos exactos.

Todo será fácil si se determina en qué profundidad se debe buscar. En lugar de iLowest puede utilizar CopyLow y ArrayMinimum()

Razón de la queja: