[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 444

 
Elena56:

Durante il processo di ottimizzazione, controllo la voce di visualizzazione e premo start, dopo di che il tester di strategia svanisce, il segno di visualizzazione scompare e il test procede a un ritmo molto lento. Cosa significa? Stavo caricando le citazioni e aggiornando. (MT4)

Questa è ottimizzazione, non test.
 

Signori, aiuto plz. Ho un problema - non vuole scrivere il testo alla chiusura dell'ordine, dimmi perché 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 - questo è il numero del biglietto. La cosa interessante è che il numero "1" si stampa, ma il numero "2" si rifiuta... Non riesco a capire il motivo... ...perché seleziona l'ordine... spiegami...

 
CLAIN:

Signori, aiuto plz. Ho un problema - non vuole scrivere il testo alla chiusura dell'ordine, dimmi perché plz

otbH - questo è il numero del biglietto. La cosa interessante è che il numero "1" si stampa, ma il numero "2" si rifiuta... Non riesco a capire il motivo... ...perché seleziona l'ordine... spiegami...


L'ordine è chiuso o no?
 

L'ordine si apre prima, poi si chiude.

Questo script viene eseguito ad ogni tick, quindi ad un certo punto sarà sicuramente chiuso...

Seleziono prima l 'ordine in base al biglietto - OrderSelect(otbH,SELECT_BY_TICKET); - lo selezionerà, non importa dove sia, giusto?

E poi dovrebbe determinare se è chiuso o aperto... ma per qualche motivo non lo fa...

 
CLAIN:

L'ordine si apre prima, poi si chiude.

Questo script viene eseguito ad ogni tick, quindi ad un certo punto sarà sicuramente chiuso...

Seleziono prima l'ordine in base al biglietto - OrderSelect(otbH,SELECT_BY_TICKET); - lo selezionerà, non importa dove sia, giusto?

E poi dovrebbe determinare se è chiuso o aperto... ma per qualche motivo non lo fa...


Prova a selezionare un ordine chiuso
 
Dimmi come, non so come.
 
CLAIN:
Dimmi come, non so come.

   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 domanda è - il prezzo di apertura è calcolato all'incrocio di due mobili (esagerato), nel test - tutto è OK, ma quando si mette sul demo, le aperture sono false (perché durante la formazione di un prezzo bar all'interno saltando da min a max), quindi l'idea di prendere in considerazione l'incrocio solo dopo la barra è formata, cioè bar è formato (visto l'incrocio) e poi l'ingresso al mercato successivo con l'incrocio.

 
DOCTORS:

La domanda è questa: il prezzo di apertura viene calcolato incrociando due slider (esagerati), nel test tutto è ok, ma quando lo si mette sulla demo, le aperture sono false (perché durante la creazione di una barra il prezzo all'interno salta da min a max), quindi l'idea è di considerare l'incrocio solo dopo che la barra si è formata, cioè si forma la barra (abbiamo visto l'incrocio) e poi si fa l'entrata a mercato successiva con l'incrocio.

È strano perché nel tester è OK - nel tester la barra zero non è formata e ci saranno anche falsi incroci.

Cerca i crossover sulla prima e sulla seconda barra. Se sul secondo МА1 <= МА2, mentre sul primo МА1 > МА2, significa che МА1 ha attraversato МА2 dal basso verso l'alto. Per il top-down, è il contrario.

Fate il confronto solo per sottrazione:

   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 снизу-вверх
      }

Per il top-down, viceversa.

Potete confrontarlo non a zero, ma a qualche valore minimo, per esempio 0,1*Punto

 
artmedia70:

È strano perché nel tester va bene - nel tester anche la barra dello zero non è formata e ci saranno anche falsi incroci.

Cerca i crossover sulla prima e sulla seconda barra. Se sul secondo MA1 <= MA2 e sul primo MA1 > MA2, allora MA1 ha attraversato MA2 dal basso verso l'alto. Per il top-down, è il contrario.

Fate il confronto solo per sottrazione:

Per il top-down, viceversa.

Potete confrontarlo non a zero, ma a qualche valore minimo, per esempio 0,1*Punto


Grazie mille!