Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 215

 
AlGuru Si prega di avvisare. Come specificare nell'Expert Advisor di chiudere sulla prossima candela?
datetime Time[] - Array Timecontenente il tempo di apertura di ogni barra del grafico corrente.Time[0] - Il tempo di apertura dell'ultima barra. Se OrderOpenTime() è inferiore aTime[0] - questo significa che l'ordine è stato aperto sull'ultima barra, e secondo la tua strategia, è il momento di chiudere questo ordine.
 
STARIJ:
datetime Time[] -Array temporalecontenente il tempo di apertura di ogni barra del grafico corrente.Time[0] - Il tempo di apertura dell'ultima barra. Se il OrderOpenTime () è aperto a meno di Time[0]- questo significa che l'ordine è stato aperto sull'ultima barra, e secondo la tua strategia, è il momento di chiudere questo ordine.
Oppure, è stato dimenticato ed è stato aperto un anno fa, per esempio ;)
 
STARIJ:
datetime Time[] - Array Serie temporale, che contiene il tempo di apertura di ogni barra del grafico corrente.Time[0] - tempo dell'ultima barra aperta . Se OrderOpenTime() è inferiore aTime[0] - questo significa che l'ordine è stato aperto sull'ultima barra, e secondo la tua strategia, è il momento di chiudere questo ordine.


Grazie! Ho appena risolto il problema con la funzione iTime. Non sono ancora bravo con gli array )).

 
AlGuru:


Grazie! Ho appena risolto il problema usando la funzione iTime. Non sono ancora bravo con gli array )).

Mostrami come l'hai risolto.

C'è qualcosa che forse non avete considerato:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Tutte le domande dei neofiti su MQL4, aiuto e discussione su algoritmi e codici

Artyom Trishkin, 2017.05.25 19:43

STARIJ:
datetime Time[] -Time array, che contiene il tempo di apertura di ogni barra del grafico corrente.Time[0] - Il tempo di apertura dell'ultima barra. Se OrderOpenTime () èinferiore a Time[0]- significa che l'ordine è statoaperto sull'ultima barra, e secondo la tua strategia, è il momento di chiudere questo ordine.

O è stato dimenticato ed è stato scoperto un anno fa, per esempio ;)

 
Artyom Trishkin:

Mostrami come l'hai risolto.

Ci sono solo alcune cose che potresti non aver considerato:



OrderOpenTime() < iTime(Symbol(), 0, 0)
 
AlGuru:

OrderOpenTime() < iTime(Symbol(), 0, 0)

E se il tempo di apertura dell'ordine fosse una settimana fa? Allora non è sicuramente sull'ultima candela (se il grafico non è settimanale). Dovremmo chiudere anche questo?

Naturalmente, tutto dipende dai requisiti del tuo TS, ma io andrei nella direzione opposta...

 
Artyom Trishkin:

E se il tempo di apertura dell'ordine fosse una settimana fa? Allora non è sicuramente sull'ultima candela (se il grafico non è settimanale). Dovremmo chiudere anche questo?

Naturalmente tutto dipende dai requisiti del tuo TS, ma io andrei nella direzione opposta...


Questa è una condizione aggiuntiva. Una posizione dovrebbe essere chiusa quando il prezzo raggiunge la linea MA. A volte il prezzo apre proprio sulla linea e apre e chiude posizioni su ogni tick. Ho risolto questo problema chiudendo una posizione non prima della prossima candela.
 

Buona giornata a tutti!

Per favore consigliate come codificare la seguente azione nel tester di strategia

Idea generale

1. ordine aperto N -X (volume = 0,1)

2.Se questo ordine è chiuso su SL, allora, per compensare la perdita, immediatamente al prezzo di chiusura su SL di un ordine N X, aprire l'ordine N - X1 (volume = 0,3)

DOBBIAMO FARE.

3 Se l'ordine (volume = 0,3) viene chiuso su SL, solo il valore dell'ora di apertura dell' ordine N - X sarà ricordato per compensare le perdite a cui è stato aperto.

So come aprire entrambi gli ordini, ma non riesco a trovare la mia strada fino alla fine, come memorizzare il valore dell'ora per un ordine con volume di 0,1 lotti che è stato chiuso sullo SL.

NOTA: Questo è legato alle chiusure degli ordini sullo stesso tick.

A volte più di un ordine con il volume di 0,1 e 0,3 sono chiusi in un tick.

Se 3 ordini di 0,1, per esempio, vengono chiusi in un solo tick su uno SL, invece di aprire 3 ordini di 0,3. - solo 1 ordine di 0,3 lotti è aperto

In questo caso se chiudo solo 1 ordine di 0,3 lotti sullo SL, non otterrò i valori dell'ora in cui vengono aperti due ordini di 0,1 lotti che compensano le loro perdite.

Cioè, ho bisogno di 3 ordini di 0,3 lotti da aprire in questo caso, non uno.


A volte 3 ordini di 0,3 lotti saranno chiusi da uno SL in un tick, nonostante il fatto che i loro corrispondenti ordini di 0,1 lotti siano stati aperti in tick diversi (ma solo a un prezzo).

In questo caso il programma salva il valore giusto solo per un ultimo ordine di 0,1 lotto.

Ho bisogno che il programma salvi il valore orario di ogni ordine (0,1 lotto) chiuso da SSL.


Ecco il mio codice, che dobbiamo modificare.

Grazie per il vostro aiuto.

int  A2;
int A1;
int A;
int start()                                             
{                                               
int ot = OrdersTotal();                                         
int Ht = OrdersHistoryTotal();
                                                
                                                
if(Bid == iOpen(NULL,PERIOD_H1,0))
if ( A!= Hour() )
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
A = Hour();
}                                               
//**************************************************************************************
int Счет=0, Номер=OrdersHistoryTotal()-1;
//int A1=0;
  for( ; Номер>=0; Номер--)
  {
    if(!OrderSelect(Номер, SELECT_BY_POS, MODE_HISTORY)) continue;
    A1=OrderOpenTime();
    if(OrderProfit()>=0) break;
    Счет++;
    if(Счет ==1&&A2!=OrderOpenTime())
    {
    A2=OrderOpenTime();
     OrderSend(Symbol(),OP_SELL,0.3,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
    }
  }
//************************************************************************************** 
return;
}

Ecco un esempio di una situazione in cui diversi ordini sono chiusi in un tick

        08:51:38.906    2017.03.27 13:09:44  Tester: stop loss #200  at 1.08858 (1.08856 / 1.08858)
2       08:51:38.906    2017.03.27 13:09:44  1 = 1 = 1 = 1 EURUSD,M1: open #214  sell 0.30 EURUSD at 1.08856 sl: 1.09258 tp: 1.08658 ok
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #192  at 1.08879 (1.08877 / 1.08879)
0       08:51:38.906    2017.03.27 13:10:28  Tester: stop loss #193  at 1.08879 (1.08877 / 1.08879)
2       08:51:38.906    2017.03.27 13:10:28  1 = 1 = 1 = 1 EURUSD,M1: open #215  sell 0.30 EURUSD at 1.08877 sl: 1.09279 tp: 1.08679 ok
0       08:51:38.906    2017.03.27 13:10:29  Tester: stop loss #194  at 1.08880 (1.08878 / 1.08880)
 
AlGuru:

Questa è una condizione aggiuntiva. Una posizione viene chiusa quando il prezzo attraversa la linea МА. A volte il prezzo apre proprio sulla linea e apre e chiude una posizione su ogni tick. Ho risolto il problema chiudendo la posizione prima della prossima candela.

Un tale problema dovrebbe essere risolto controllando se c'è, o c'è stata, una posizione aperta e chiusa proprio su questa barra.

Altrimenti si accumulerà tutto. La funzione di segnale dovrebbe inviare segnali, mentre la funzione di trading dovrebbe già controllare la validità del segnale.

 

Salve. Perché le coppie di valute euro vs usdmostrano 149.16325 invece di 1.0616?


Motivazione: