Domande da un "manichino" - pagina 56

 
Interesting:

A differenza del gestore di tick, il timer sarà eseguito dopo un certo periodo di tempo, impostato dal periodo.

In un'elaborazione pesante del timer è ovviamente meglio disabilitarlo per un tempo per slittamento o prima del primo tick (ci sono molte varianti), ma se l'elaborazione del timer non è molto pesante e il periodo è abbastanza lungo il timer può essere disabilitato.

Anche nell'elaborazione del timer è possibile fornire un controllo se si tratta di un giorno lavorativo o meno.

Se necessario, è possibile programmare calcoli pesanti per il fine settimana (per esempio, l'auto-ottimizzazionedi EA) ed eseguire questo processo dal timer. Alla fine dei calcoli (o all'inizio dei calcoli), il timer può essere correttamente disattivato.

Per quanto riguarda i test nel tester usando la funzione OnTimer() dell'EA multivaluta. Supponiamo che il timer sia impostato a intervalli di 10 secondi. Sarà in funzione durante tutti i fine settimana del periodo di prova? Credo che sia questo che intendeva Vladimir. Quindi, se indichiamo al timer che il sabato e la domenica sono saltati, il test sarà molto più veloce.
 
tol64:
Per quanto riguarda i test nel tester attraverso la funzione OnTimer() dell'Expert Advisor multivaluta. Supponiamo che il timer sia impostato su un intervallo di 10 secondi. Sarà in funzione tutti i fine settimana durante il periodo di test? Credo che sia questo che intendeva Vladimir. Quindi, se indichiamo al timer che il sabato e la domenica sono saltati, il test sarà molto più veloce.

1. Ho provato a spegnere il timer nei fine settimana quando i calcoli non erano molto complicati, non ho sentito molta differenza (anche se c'erano differenze, ovviamente), ora ho deciso di non spegnere il timer per il momento.

2. Sì, se il timer è impostato, non fa differenza nel tester o in modalità normale l'innesco avverrà fino a quando il timer non sarà spento. Se stiamo parlando di un tester, allora ad un intervallo di 10 secondi scatterà per tutto il periodo di prova - ogni 10 secondi.

Quando si ferma il timer per il fine settimana ci sono diverse soluzioni:

а. Spegnere il timer con la scrittura dello stato in una variabile. Al primo ticchettio da parte dello strumento principale (o da un segnale "spia") il timer può essere fatto ripartire. Questo metodo ha degli svantaggi legati alla probabilità di saltare i tick o al ritardo dei tick nel mercato illiquido. Il salto dei tick può anche essere causato da una mancanza di connessione al server di trading.

б. Freni a slittamento, per un certo periodo di tempo. La cosa buona è che il periodo è specificato con precisione, ma la cosa cattiva è che in questo metodo, non solo il timer, ma l'intero Expert Advisor sarà inattivo fino all'ora X.

Anche se tutte le posizioni e gli ordini saranno elaborati nel tester.

в. È possibile realizzare una pausa aumentando il periodo del timer. È conveniente sapere in anticipo quando il timer deve "svegliarsi" e il lavoro dell'esperto non si ferma. Scomodo per il fatto di dover tenere traccia del timer in stato di lavoro o in modalità standby.

в. Dividete il riempimento del timer in due gruppi, il primo viene eseguito tutto il tempo (per esempio, determinando lo stato della connessione), e il secondo secondo secondo le condizioni (giorni lavorativi, connessione presente, il trading è permesso, ecc.)

 
Interesting:


Se necessario, i calcoli pesanti possono essere programmati per il fine settimana (ad esempio l'auto-ottimizzazionedell'EA) ed eseguire questo processo dal timer. Alla fine (o all'inizio) dei calcoli, il timer può essere correttamente disattivato.

Ciao! Ho avuto un'idea simile ieri, ma non ho avuto il tempo di scrivere un post con domanda su di esso:

1.E 'possibile fare questo? Come questo può apparire nel codice, in particolare l'apertura e la chiusura trade.Or solo la loro posizione e calcolo-calcoli.I.e. al fine settimana sul timer va a una funzione definita, che ciclicamente riavvolge la storia, e determina i migliori parametri.Per questo tick online non sono necessari, e la funzione sarà solo ruotare nel ciclo ...

2. C'è un posto in qualche ramo in cui posso leggere qualcosa al riguardo?

3.Se applicato al campionato, non sarà caricato sulla macchina? Questa è probabilmente una domanda per gli organizzatori.

 
MetaDriver:
Poi calcola tutto nell'Expert Advisor su un timeframe adatto, e stampa il risultato in OnTester(). Non è necessario fare trading. Hai qualche problema?

Grazie mille

Ho un'altra domanda, come faccio achiudere una posizione a tempo, se il prezzo non ha raggiunto né take né stop loss?

Ho letto le librerie che sembrano avere librerie per lavorare con gli ordini... L'ho collegato... Il programma giura di non avere una tale procedura...

Quindi, la mia domanda è che tipo di codice dovrebbe essere per chiudere l'ordine dopo un certo tempo (per esempio 1 giorno)

 

AccountInfoDouble(ACCOUNT_BALANCE) != AccountInfoDouble(ACCOUNT_EQUITY)

questo è il modo in cui devo controllare se un trade è aperto...

OrdersTotal ()!=0 non funziona )))) glitch molto interessante)

 
papaklass:
C'è PosirionTotal() per le posizioni. OrdersTotal() solo per gli ordini in sospeso.

se ( PositionsTotal() == 1 )

stessa cosa ... nessuna reazione

// si apre normalmente

se ( TimeActivation ( 1 )

{

if ( _1_operazione == 1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

}

// non può chiudere prima di prendere o fermare

se ( TimeActivation ( 2 )

{

if ( PositionsTotal() == 1 ) /// NOT WORKING))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operazione == -1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

}

}

 
BaTTLeBLooM:

Grazie mille

Quindi domanda, quale codice dovrebbe essere approssimativamente, per chiudere l'ordine dopo un certo tempo (per esempio 1 giorno)

Per favore.

Approssimativamente così: si risparmia il tempo dell'apertura in una variabile. Aggiungete immediatamente il periodo di tempo desiderato (per esempio 1 giorno = 60*60*24).

Poi ad ogni tick (o tempo), controllate se il tempo corrente è più lungo del tempo di controllo. Se lo è - lo chiudete // if (TimeCurrent() > MyControlTime) CloseMyPosition();

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Дата и время / TimeCurrent - Документация по MQL5
 
BaTTLeBLooM:

se ( PositionsTotal() == 1 )

stessa cosa ... nessuna reazione

// si apre normalmente

se ( TimeActivation ( 1 )

{

if ( _1_operazione == 1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operation == -1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

}

// non può chiudere prima di prendere o fermare

se ( TimeActivation ( 2 )

{

if ( PositionsTotal() == 1 ) /// NOT WORKING))

{

if ( _1_operation == 1 && Sell ( 0.10 ) == 1 ) { Sleep (600000); }

if ( _1_operazione == -1 && Buy ( 0.10 ) == 1 ) { Sleep (600000); }

}

}

In realtà, non è chiaro cosa hai scritto qui, ma PositionTotal() chiaramente non ha niente a che fare con questo.

Mettere Print() prima del controllo, =1 ?

Print("PositionsTotal=",PositionsTotal());
if ( PositionsTotal() == 1 ) /// НЕ ХРЕНА НЕ РАБОТАЕТ )))
 
tol64:

Konstantin Gruzdev ha suggerito un metodo interessante con "spie" e "agenti" nel suo articolo. )) Ma il suo "agente" exSpy Control panel MCM non vuole lavorare per me.

Ora darò un'occhiata alla variante presentata nell'articolo. Finora ha fatto diversi esperti di spie, funziona benissimo.

MetaDriver:

Penso che questa tecnologia non funzionerà nel tester.

Funziona.

 
MetaDriver:

Per favore.

Approssimativamente in questo modo: è necessario memorizzare il tempo di apertura in una variabile. Aggiungete immediatamente l'intervallo di tempo necessario (per esempio 1 giorno = 60*60*24).

Poi ad ogni tick (o tempo), controllate se il tempo corrente è più lungo del tempo di controllo. Se lo è - lo chiudete // if (TimeCurrent() > MyControlTime) CloseMyPosition();

In una variabile è un'opzione, ma se hai bisogno di una chiusura più affidabile, anche dopo aver riavviato il terminale/advisor, puoi usare un medjic per identificare l'ordine e controllare il tempo della sua apertura.

//закрывает ордера с заданным меджиком по прошествию определенного периода(в сек)
void closeOrderByTime(int magic,int period) {
        MqlTradeRequest request;
        MqlTradeResult tradeResult;
        MqlTradeCheckResult checkResult;
        ulong ticket = -1;
        int cnt = OrdersTotal();
        for (int i=cnt-1; i>=0; i--) {  
                ticket = OrderGetTicket(i);
                if (OrderGetInteger(ORDER_MAGIC) == magic && ticket>0 && TimeCurrent() > OrderGetInteger(ORDER_TIME_SETUP)+period) {
                        request.action = TRADE_ACTION_REMOVE;
                        request.order = ticket;
                        if(OrderCheck(request,checkResult) ) {
                                OrderSend(request, tradeResult);
                        } else {
                                MessageBox("Ошибка");
                        }
                }
        }
}
Motivazione: