Un bug nella funzione OrderSend() ? - pagina 10

 
Roger:
Non puoi farlo. Se non si ottiene la condizione giusta al primo segno di spunta, l'intera ora andrà sprecata.


Su H1 la condizione dura 60 minuti, cioè fino alla prossima barra

//+------------------------------------------------------------------+
//|                                                     чернoвик.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

static datetime LastTime = 0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if(NewBar()==true)
       {
        
           int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Bid-250*Point,Ask+250*Point," ",16384,0,Green);
        
       }
  Comment ("LastTime   ",LastTime,"   NewBar   ",NewBar());  
//----
   return(0);
  }
//+------------------------------------------------------------------+
bool NewBar() 
    {
       
       if (iTime(NULL,0,0) != LastTime) 
       {
          LastTime = iTime(NULL,0,0);      
          return (true);
       } 
       else
          return (false);
     
    }

Cerca il commento nel tester.

 
pako:


tenere una sola posizione aperta su ogni barra

Pako, sono sorpreso! Mi hai punzecchiato con il "codice albanese" durante tutto questo thread, ma cosa hai offerto? :) La stessa cosa, solo di lato! Dopo tutto, avete la stessa funzione di una nuova barra, solo usata in modo più primitivo. E poi c'è la funzione di inviare un ordine, bypassando tutti i segnali e così via. E la soluzione del problema non era qui! Quindi avete l'albanese.

Swan:
Taki poi
solo se l'ordine è aperto sulla barra corrente. cioè questa linea nella funzione OpenBuy/Sell sposta





Cigno, grazie! Questo è ciò che doveva essere fatto! Se il tempo della nuova barra è assegnato nella funzione di apertura dell'ordine, allora nessuna lacuna. L'ho già controllato e non riesco a capacitarmi di come tutto funzioni bene. Il mio Expert Advisor funziona esattamente come dovrebbe essere.

Ho ancora una domanda. Perché l'esempio precedente non ha funzionato? Anche l'esempio precedente ha avuto la condizione:

// Проведение торговых операций
   if (signal != SIGNAL_NO)
       if (!Trade(signal))
           return (0);

Pensavo che il codice si leggesse così... se la funzioneTrade(signal) restituisce false, allora uscite dalla funzione... e prima che la variabilelastBarTime nella linea sia aggiornata:

lastBarTime = iTime(NULL, 0, 0);

non sarà aggiornato. Ma, a quanto pare, non è così. Posso chiederle di spiegare questo punto? È anche molto interessante. Sono incuriosito.

 
hoz:

Cigno, grazie! Questo è ciò che doveva essere fatto! Se il nuovo tempo della barra è assegnato nella funzione di ordine aperto, allora . nessuna omissione. L'ho già controllato e non riesco a capacitarmi di come tutto funzioni bene. Il mio Expert Advisor funziona esattamente come dovrebbe essere.

Rimane una domanda. Perché l'ultima opzione non ha funzionato? Anche lì c'era una condizione:

Pensavo che il codice si leggesse così... se la funzioneTrade(signal)) restituisce false, allora uscite dalla funzione... e prima che la variabilelastBarTime nella linea sia aggiornata:

non sarà aggiornato. Ma, a quanto pare, non è così. Posso chiederle di spiegare questo punto? È anche molto interessante. Sono incuriosito.

Sì, ma se
signal == SIGNAL_NO

al primo tick di una nuova barra lastBarTime è aggiornato...


forse senza...

   if (signal != SIGNAL_NO)
funzionerà come previsto... È difficile per il codice, devi controllarlo)
 
hoz:

Pako, sono sorpreso! Mi hai punzecchiato con il "codice albanese" durante tutto questo thread, ma cosa hai suggerito? :) La stessa cosa, solo di lato! Dopo tutto, avete la stessa funzione di una nuova barra, solo usata in modo più primitivo. E poi la funzione di invio dell'ordine, bypassando tutti i segnali e così via. E la soluzione del problema non era qui! Quindi sei tu l'albanese.

pako:
Se non ti dispiace formulare di nuovo il ToR, perché hai bisogno di controllare una nuova barra?


hoz:
Formulare e facile! Non ho ancora pensato a 1 punto, ma spiegherò tutto.

Non ci dovrebbero essere limiti al numero di ordini. Cioè gli ordini possono essere aperti in qualsiasi quantità... ... non importa quanti ne abbiamo, ma abbiamo bisogno di 1 solo ordine da aprire nella barra corrente. Questo è tutto.

Cioè, si apre una nuova barra, quindi possiamo aprire 1 ordine durante questa barra, ma non più di 1 ordine nella barra corrente. L'ordine successivo può essere aperto solo sulla barra successiva, non prima.

È chiaro ora?

Ho scritto secondo i ToR che una posizione è aperta su una nuova barra

Non vedo altro nel ToR.

Buona fortuna a voi

Motivazione: