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

 

Il problema è che questi biglietti sono più di uno. forse 4, non lo so ancora esattamente. ecco perché ho creato una classe con il numero del biglietto e altre informazioni che non sono memorizzate da orderelect. quindi volevo avere accesso al biglietto. ma finora posso solo creare oggetti di classe e metterli in CarrayObj e poi ottenere l'indice, confrontare il biglietto e analizzare ulteriormente. Ma l'ho risolto, grazie, mi do la colpa altrove. SignorievilliveAlexeyVik - grazie per le vostre pronte risposte!

 
Ciao! Si prega di scrivere perché nel tester strategia non si apre mestieri, scrive nel log errore: (2015.07.13 00:22:39.218 TestGenerator: unmatched data error (valore alto 1,31150 a 2013.07.11 05:00 non è raggiunto dal timeframe più basso, prezzo alto 1,31140 mismatches) quotazioni aggiornato. Ecco il codice dell'Expert Advisor:
int ticket;
int init;

int start()
{

int bars0;
int bars1;
int bars2;
int bars3;
int   stoploss=50; 
int   takeprofit=30;
int       slipage=2;

//-------------------------------------------------------------------+
  
  if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
      if (  Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
      if(V1()==true) 
     
       ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
     
//-------------------------------------------------------------------+ 
    if ( OrdersTotal()<1 &&  Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
     if (  Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
      if(V2()==true) 
     
       ticket = OrderSend(Symbol(),OP_SELL,0.1,Bid,slipage,Bid+stoploss*Point,Bid-takeprofit*Point,"",123,0,Red);
      
    
         
//-------------------------------------------------------------------+                    
 return;}
//+------------------------------------------------------------------+
bool V1( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
      return(false);
   }
  }    
 }
 return(true); 
}

bool V2( ){
  int      i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
     if(OrderType()==OP_SELL) {
      return(false);
   }
  }
 }
 return(true); 
}

)
 
rylay:
Ciao! Si prega di scrivere perché nella Strategia Tester non apre i trade, scrive nel log l'errore: (2015.07.13 00:22:39.218 TestGenerator: unmatched data error (high value 1.31150 at 2013.07.11 05:00 is not reached from the lowest timeframe, high price 1.31140 mismatches) quotes updated. Ecco il codice dell'Expert Advisor:
)

Per quanto riguarda l'errore del tester menzionato, questo si verificherà sempre quando si eseguono test sui tick. La cronologia delle quotazioni in MT4 non è perfetta, ci sono sempre delle discrepanze.

Il codice è pieno di errori. Le variabili non sono inizializzate, la funzione di inizio non capisce cosa restituisce, non c'è un controllo dell'esecuzione delle funzioni di trading, quindi per favore correggetelo.

Aggiungete #property strict all'inizio del codice.

E dato che abbiamo creato due funzioni per definire i tipi di ordine, perché non integrare il contatore degli ordini di ogni tipo e scrivere if ( OrdersBuy<1...), if ( OrdersSell<1...) invece di confrontare if( OrdersTotal()<1...)? Sarebbe più corretto.

 

Si prega di consigliare come aprire un solo trade in condizioni di una barra, se il trade avviene all'interno della barra, ma al momento della chiusura il segnale di apertura appare immediatamente sulla stessa barra.

In altre parole - la barra ha dato un segnale per aprire un ordine. È stato aperto e si è innescata una breve ripresa. L'affare è stato chiuso ma l'EA chiude il primo e apre immediatamente il secondo con lo stesso identico ordine perché abbiamo ancora la condizione di aprirlo nella stessa barra. Ho bisogno di aprire solo una posizione su una barra. E per aprire il prossimo trade dovremmo aspettare l'apertura di un'altra barra.

 
Poinson:

Si prega di consigliare come aprire un solo trade in condizioni di una barra, se il trade avviene all'interno della barra, ma al momento della chiusura il segnale di apertura appare immediatamente sulla stessa barra.

In altre parole - la barra ha dato un segnale per aprire un ordine. È stato aperto e si è innescata una breve ripresa. L'affare è stato chiuso ma l'EA chiude il primo e apre immediatamente il secondo con lo stesso identico ordine perché abbiamo ancora la condizione di aprirlo nella stessa barra. Ho bisogno di aprire solo una posizione su una barra. E aspettiamo l'apertura di un'altra barra per aprire il prossimo trade.

Il _already open = false;

if (isNewBar()){ _already opened = false;}

se (!OrderSend(...) ) { /* gestione degli errori */; } else { _already opened = true; }

isNewBar() - standard, come negli articoli, usando datetime statico date = Time[0];

if (_already opened) { return; //non invia il mandato }

 
evillive:

Per quanto riguarda l'errore del tester menzionato, questo si verificherà sempre quando si eseguono test su zecche. La cronologia delle quotazioni in MT4 è imperfetta, ci sono sempre delle discrepanze.

Il codice è pieno di errori. Le variabili non sono inizializzate, la funzione di inizio non capisce cosa restituisce, non c'è un controllo dell'esecuzione delle funzioni di trading, quindi per favore correggetelo.

Aggiungete #property strict all'inizio del codice.

E dato che abbiamo creato due funzioni per definire i tipi di ordine, perché non integrare il contatore degli ordini di ogni tipo e scrivere if ( OrdersBuy<1...), if ( OrdersSell<1...) invece di confrontare if( OrdersTotal()<1...)? Sarebbe più corretto.

Grazie. Lo correggerò. È solo che quando c'era una condizione:
if ( OrdersTotal()<1 &&  Open[bars0]<Close[bars0]
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,slipage,Ask-stoploss*Point,Ask+takeprofit*Point,"",123,0,Red);
non funzionava bene, così ho chiesto.
 
danik:

bool _già aperto = false;

if (isNewBar()){ _already opened = false;}

se (!OrderSend(...) ) { /* gestione degli errori */; } else { _already opened = true; }

isNewBar() - standard, come negli articoli, usando datetime statico date = Time[0];

if (_already opened) { return; //non inviare il mandato }

dice 'isNewBar' - funzione non definita 2015

Non sono davvero un mago. Vorrei un esatto copia e incolla se potete per favore.

 
Poinson:

dice 'isNewBar' - funzione non definita 2015

Non sono proprio un artigiano. Vorrei un esatto copia e incolla se possibile, per favore.

Se è una nuova barra, puoi copiare e incollare la funzione isNewBar(), forse ci riuscirai, non è complicato - confronta il tempo di apertura di una nuova barra (con indice 0, cioè l'ultima), se è più di prima significa che una nuova barra è appena apparsa, e se è apparsa significa che puoi aprire un nuovo trade se hai altre condizioni
 
Poinson:

dice 'isNewBar' - funzione non definita 2015

Non sono proprio un artigiano. Vorrei un esatto copia e incolla se possibile, per favore.

Sì in qualsiasi consulente nel kodobase lo troverebbe!

//в старте перед условиями входа:
      if(NewBar() == true)
      { 
//----------------------
  return(0);
}
// и вне старта:
//----------------------------//  NewBar  \\----------------------------\\
bool NewBar() 
{
  static datetime lastbar = 0;
  datetime curbar = iTime(NULL,15,0);
  if(lastbar != curbar) 
  {
    lastbar = curbar;
    return(true);
  }
  else return(false);
} 
 
borilunad:

Qualsiasi consigliere in un kodobase l'avrebbe trovato!

Grazie )) Il più forte semplicemente! tutto ha funzionato dalla prima volta!

Grazie a tutti!