Avere il prezzo aperto della candela in un'ora specifica. - pagina 2

 
Kane59:

Ok, ho inserito il tuo codice nel mio EA e funziona perfettamente! Ho sorriso quando ho visto l'EA eseguirsi come volevo!!!

Grazie mille ......

E' in backtest perché il mercato è chiuso...

Ma c'è un problema:

L'Ea apre correttamente le posizioni, ma gli acquisti non vengono mai chiusi e le vendite vengono immediatamente chiuse quando vengono aperte.

Non vuoi sapere se il tuo OrderClose() ha fallito e se sì perché? Perché non stai controllando il valore di ritorno della funzione OrderClose() e segnalando eventuali errori? Potresti scoprire che sia il Buy che il Sell stanno cercando di chiudere immediatamente ma il Buy OrderClose() fallisce...

Cosa sono i valori di ritorno della funzione? Come posso usarli?

 

Non c'è nessun errore nella scheda Journal.


Metterò dei valori di ritorno. Posso farlo?

Close = CloseOrder(....)

if (Close < 1)

Print ("Close Failed", GetLastError())
 
Kane59:

Non c'è nessun errore nella scheda Journal.


Metterò dei valori di ritorno. Posso farlo?

Chiudere ha un significato diverso . . . OrderClose() restituisce un bool . . .

if ( ! OrderClose(....) )

Print ("Close Failed", GetLastError())
 
RaptorUK:

Close ha un significato diverso . . . OrderClose() restituisce un bool . . .


Ok ok lo farò, grazie :)
 

Ho inserito:

if(OrdersTotal()>0)
            { 
               for(int i=OrdersTotal()-1; i>=0; i--)
               {
                  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  {
                     if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1))
                     {
                        if(OrderType() == OP_BUY)
                        {
                           OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);
                           {
                              if(! OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE))
                              {
                                 Print ("Close Buy Failed", GetLastError());
                              }
                           }
                        }
                        if(OrderType() == OP_SELL)
                        {
                           OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);
                           {
                              if(! OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE))
                              {
                                 Print ("Close Sell Failed", GetLastError());

Nessun errore scritto.

 
Kane59:

Ho inserito:

Nessun errore scritto.

Non si può chiudere due volte lo stesso ordine.

 OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);            //  first attempt to close
    {
    if(! OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE))       //  second attempt to close
 

Ho risolto il problema, le condizioni di loop non erano codificate correttamente...

Grazie ancora.

 

Ciao a tutti,

Ho usato il codice dato da WHRoeder, ma vedo con il tempo che EA prende solo un "#define" per essere un riferimento per le 4 diverse ore.

    #define HR0900 23400    // 9*3600
    #define HR1500 54000
    #define HR1900 68400
    #define HR2300 59800

Ho provato in modo diverso:

Ho costruito un arraysize con Int che sono riferimento alla candela ed è lo stesso, solo uno è considerato non il 4 numero, come posso risolvere?

 
Kane59:

Ok, ho inserito il tuo codice nel mio EA e funziona perfettamente! Ho sorriso quando ho visto l'EA eseguirsi come volevo!!!

Cosa hai fatto per rompere il codicediWHRoeder?
 
Kane59:

. . . come posso risolverlo?

Penso che tu debba mostrare il tuo codice.
Motivazione: