Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 784

 
Leonid123456:

per questo EA ultimo)). In realtà ha funzionato, era l'ultimo)). L'Expert Advisor è per testare... Quindi, il lavoro per diverse valute e il trading manuale (insieme) non è ancora previsto...

Puoi darmi qualche consiglio per il futuro, sarebbe bello sapere come farlo bene...

Grazie ancora.

Se ne hai bisogno, dovresti distinguere un ordine a mercato da uno in sospeso. Il primo che hai incontrato, secondo tutti i criteri (simbolo, mago, tipo) è di solito il più fresco. Ma sarebbe meglio guardare anche l'ora di apertura in modo che sicuramente non fosse più giovane.

Nel tester potete scegliere subito

OrderSelect(OrdersTotal()-1,SELECT_BY_POS))

per lavorare con l'ultimo ordine aperto. Se il sistema non ha ordini pendenti, tutto funzionerà bene. Ma se ci sono sia ordini pendenti che a mercato, questo non funzionerà, per non parlare del vero lavoro.

 
Leonid123456:

per questo EA ultimo)). In realtà ha funzionato, era l'ultimo)). L'Expert Advisor è per testare... Quindi, il lavoro per diverse valute e il trading manuale (insieme) non è ancora previsto...

Puoi darmi qualche consiglio per il futuro, sarebbe bello sapere come farlo bene...

Grazie ancora.

È più corretto non scrivere cose inutili. Perché hai messo dei cicli annidati? Dopotutto, tutto ciò di cui avete bisogno può essere fatto in un solo ciclo con una sola selezione d'ordine.

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


Non sono riuscito a entrare in quel posto dove ci sono i commenti a più righe. Mi sembrava che ci potesse essere un errore di compilazione... Fate attenzione ai miei commenti nel codice.

 
Zhunko:
Qual è il punto?
grazie per il vostro aiuto!
 
AlexeyVik:

Non scrivere cose inutili. Perché hai messo dei cicli annidati? Perché tutto ciò di cui avete bisogno può essere fatto in un solo ciclo con una sola selezione d'ordine.


Non sono riuscito a capire quel posto dove avete commenti a più righe. Mi sembrava che ci potesse essere un errore di compilazione... Fate attenzione ai miei commenti nel codice.

Non ci sono errori, ma c'è un suggerimento per controllare le funzioniOrderSend,OrderClose eOrderDelete

il valore di ritorno di 'OrderSend' dovrebbe essere controllato .

Grazie per i vostri commenti.

 

Cercare il minimo dell'indicatore "ZigZag" nell'array usando"ArrayMinimum".

Posso impostare la ricerca per ignorare i valori nulli o dovrò usare un ciclo per trovarli?

 
Non riesco a capire come codificare. Ho bisogno che l'EA aspetti per un certo periodo di tempo se l'ultima posa non è stata redditizia. Hai qualche idea?
 
Forexman77:

Cercare il minimo dell'indicatore "ZigZag" nell'array usando"ArrayMinimum".

Posso impostare la ricerca per ignorare i valori nulli o dovrò usare un ciclo per trovarli?

Molto probabilmente dovrete usare un ciclo
 
Vinin:
Probabilmente dovrai usare un ciclo
Grazie!
 

Come troviamo la correzione più profonda tra il massimo e il minimo? Il massimo e il minimo ci sono noti, non è un problema trovarli usando iHighest e

Se usiamo iHighest e iLowest, troveremo a volte degli estremi vicini, ma non è sempre il caso, come mostrato nell'immagine. In generale, abbiamo bisogno dell'identificazione della formazione ABC.

Ho provato ad applicare ZigZag, ma non porta risultati esatti.

е.

 

Forexman77:

Come troviamo la correzione più profonda tra il massimo e il minimo? Il massimo e il minimo ci sono noti, non è un problema trovarli usando iHighest e

Se usiamo iHighest e iLowest, troveremo a volte degli estremi vicini, ma non è sempre il caso, come mostrato nell'immagine. In generale, abbiamo bisogno dell'identificazione della formazione ABC.

Ho provato ad applicare ZigZag per questo, ma non porta risultati esatti.

Tutto sarà facile se per determinare su quale profondità dovrebbe cercare. Invece di iLowest potete usare CopyLow e ArrayMinimum()

Motivazione: