Aiuto per aggiungere MaxTradesPerBar all'EA - pagina 2

 
serpentsnoir:

megamixx,

Se sei ancora là fuori, posso suggerire alcune modifiche al codice che faranno ciò che stai cercando. Fammi sapere se sei ancora interessato.

Poi ricompila per assicurarti che sia senza errori. Fammi sapere quando hai questo e incollerò il prossimo cambiamento.

Ottenuto e compilato con successo grazie sn.
 
megamixx:

Preso e compilato con successo grazie sn.


Ok, bene.

Poi, c'è un blocco di codice come questo

int openPositions()
{
//... blah...
}

copiate l'intero blocco, incollatelo subito dopo e rinominatelo in OpenTradesOnThisCandle

Poi, ricompila per assicurarti che sia senza errori.

Ora sono fuori per lavoro, quindi non mi sentirete fino a più tardi. Posta le modifiche se ti blocchi.

 

Ho copiato questo blocco e l'ho rinominato, ora assomiglia a questo

int OpenTradesOnThisCandle( )
{ int op =0;
for(int i=OrdersTotal()-1;i>=0;i--) // scansiona tutti gli ordini e le posizioni...
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
{
if ( OrderType() == OP_BUY ) op++;
if ( OrderType() == OP_SELL ) op++;
}
}
return(op);
}

Spero di averlo fatto bene sn. Ho compilato e non ho avuto errori ma un avvertimento:

Lafunzione "OpenTradesOnThisCandle" non è referenziata e sarà rimossa dal file exp
0 error(s), 1 warning(s)

 

Bene. Il messaggio è solo un avvertimento e andrà via presto.

Ora cambia la linea dove vedi MODE_TRADES con MODE_HISTORY nella nuova subroutine che hai creato.

Ora sostituite entrambe le due istruzioni if con OrderType() con questa

if (OrderOpenTime() > Time[0]) op++;

Quando l'avrai fatto (e otterrai lo stesso avvertimento) compilalo per assicurarti che sia privo di errori.

 
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
  1. Cosa sono i valori di ritorno delle funzioni? Come si usano? - MQL4 forum
  2. Se ci sono chiamate al server nel ciclo è necessario fare il conto alla rovescia E controllare i codici di ritorno Loop e chiusura o cancellazione di ordini - MQL4 forum
 

Ecco come appare ora il blocco:

int OpenTradesOnThisCandle( )
{ int op =0;
for(int i=OrdiniTotali()-1;i>=0;i--) // scansiona tutti gli ordini e le posizioni...
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
se (OrderMagicNumber() != MagicNumber) continua;
if ( OrderSymbol()==Symbol() )
{
se (OrderOpenTime() > Time[0]) op++;
if (OrderOpenTime() > Time[0]) op++;
}
}
return(op);
}

Compilato, 0 errori, 1 avvertimento

 

Ciao Megamix,

Non leggo il thread dall'inizio, però...

1. Usa il pulsante SRC quando posti il codice

2. Il ritorno di OrderSelect() è o vero o falso, quindi questo è il modo corretto di scrivere OrderSelect(),

int OpenTradesOnThisCandle( )
  { 
  int op =0;
  for(int i = OrdersTotal() - 1;i >= 0; i-- ) // scan all orders and positions...
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true   // if order select is true ...
        && OrderMagicNumber() != MagicNumber                  // ... and magic number is our magic number ...
        && OrderSymbol()      == Symbol() )                   // ... and symbol is chart symbol
        { 
        if (OrderOpenTime() > Time[0]) op++;             
        if (OrderOpenTime() > Time[0]) op++; 
        }
    } 
    return(op);
  }

:D

 
onewithzachy:

Ciao Megamix,

Non leggo il thread dall'inizio, però...

1. Usa il pulsante SRC quando posti il codice

2. Il ritorno di OrderSelect() è o vero o falso, quindi questo è il modo corretto di scrivere OrderSelect(),

:D


Grazie per la dritta sulla pubblicazione del codice. Ha senso. Per quanto riguarda il punto 2, mi rimetto a sn perché mi sta guidando attraverso i passi e non voglio rovinare il suo processo. Molto apprezzato!

 
megamixx:


Grazie per la dritta sulla pubblicazione del codice. Ha senso. Per quanto riguarda il punto 2, mi rimetto a sn perché mi sta guidando attraverso i passi e non voglio rovinare il suo processo. Molto apprezzato!


Lo terremo semplice per ora. onewithzacky ha ragione, il controllo dei codici di ritorno è una buona abitudine.

if (OrderOpenTime() > Time[0]) op++; <<== questo deve esserci solo una volta. Quindi toglietene uno.

La prossima cosa da fare è trovare questo codice e duplicarlo proprio sotto.

     if(TradesInThisSymbol > 0) 
     {
      return(0);
     }

Poi cambiate

(TradesInThisSymbol > 0)

a

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Poi compilate - l'errore dovrebbe sparire.

 
serpentsnoir:


Lo terremo semplice per ora. onewithzacky ha ragione, controllare i codici di ritorno è una buona abitudine.

if (OrderOpenTime() > Time[0]) op++; <<== questo deve esserci solo una volta. Quindi toglietene uno.

La prossima cosa da fare è trovare questo codice e duplicarlo proprio sotto.

Poi cambiate

(TradesInThisSymbol > 0)

a

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Poi compilate - l'errore dovrebbe sparire.


Fatto.

Eliminato il duplicato if (OrderOpenTime() > Time[0]) op++;

e trovato e cambiato

(TradesInThisSymbol > 0)

a

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Molte grazie per la vostra utile assistenza su questo.