Ciao a tutti!
Devo precisare subito che ho cercato di fare queste domande nel thread pertinente qui, ma in qualche modo la domanda non ha avuto l'attenzione che meritava. Anche se, mi sembra, gli argomenti toccati almeno una volta toccano/emergono nella mente di molte persone. Un po' come le domande delle FAQ (anche se potrei sbagliarmi). Duplicherò qui direttamente le domande stesse:
1. C'è una differenzatra Mql4 e Mql5 (sito e linguaggio di programmazione). Esiste Metatrade 4 e Metatrader 5 con Mql4 e Mql5 rispettivamente. Ci sono anche due diversi siti web corrispondenti. Allo stesso tempo, tutti gli Expert Advisors che ho guardato in MT4 portano a quel sito. Quale è più rilevante? Quale forum è più "vivace"? Dov'è il posto migliore per postare domande? Esiste una retrocompatibilità tra diverse versioni di MT e Mql? Personalmente sto scrivendo il mio Expert Advisor MT4 rispettivamente su Mql4. Questo perché il broker che uso per testare la demo usa MT4. ...
...
Sarebbe logico mettere le mie domande relative a MQL4 nel "quarto" forum. Anche se la differenza tra MQL5 e MQL4 non è molto significativa. Siamo passati da MQL4. Pertanto, se volete fare una domanda sul "4" in questo forum, è meglio specificare nell'intestazione dell'argomento che si tratta di MT4. In questo modo sarà più chiaro.
...
Ha senso indirizzare le domande di MQL4 al "quarto" forum. Anche se le differenze tra MQL5 e MQL4 non sono significative. È una transizione da MQL4. Pertanto, se volete fare una domanda sul "4" in questo forum, è meglio specificare nell'intestazione dell'argomento che si tratta di MT4. In questo modo sarà più chiaro.
Per la seconda domanda, vedere input, sinput, ParametrGetRange(...), ParametrSetRange(...).
Non ho chiesto come impostare i parametri esterni dell'Expert Advisor. Ho imparato a farlo molto tempo fa (input, extern). Ho chiesto come e se è possibile cambiare dinamicamente l'insieme dei parametri visualizzati nelle impostazioni. ParametrGetRange e ParametrSetRange non si trovano in mql. Queste non sono funzioni integrate? Dove cercarli?
P.S. L'uso di sinput può essere usato solo come suggerimento che il parametro non può essere ottimizzato da solo senza essere legato ad altri parametri. Ma non posso nemmeno cambiare dinamicamente l'input in sinput a seconda dei parametri che ho già scelto per suggerire quali parametri recuperare nell'ottimizzazione (quali parametri sono significativi dati i parametri scelti) così non devo perdere tempo a scorrere i parametri che attualmente non hanno senso
Niente può essere cambiato programmaticamente nella scheda "Parametri". Potete saltare il set di parametri disabilitati restituendo INIT_PARAMETERS_INCORRECT da OnInit().
È possibile cambiare l'inizio, il passo, l'arresto e il permesso di ottimizzazione programmaticamente: https://www.mql5.com/ru/docs/optimization_frames
- www.mql5.com
Niente può essere cambiato programmaticamente nella scheda dei parametri. Un set di parametri disattivato non può essere saltato - uno stub può essere attivato per non fare calcoli inutili.
È possibile cambiare programmaticamente la risoluzione di inizio, passo, arresto e ottimizzazione: https://www.mql5.com/ru/docs/optimization_frames
L'argomento si chiama "domande di base da un principiante", e come principiante non capisco niente. Bene, qui è dove otterrò una risposta alla mia domanda elementare (o piuttosto spero). Ho cercato di seguire una guida passo dopo passo per scrivere il mio Expert Advisor. Mi sono bloccato sull'aspetto di come chiudere forzatamente una posizione aperta in MKL5 (senza aspettare lo SL o il TP), quando appare un certo segnale indicatore, come all'intersezione di due MA, o quando il restringimento delle linee di Bollinger o altri segnali? Ci deve essere una funzione come ClosePos(), ma dov'è e come la ottengo? Chiedo un pezzo di codice dettagliato, perché io stesso non capisco le sfumature - sono ancora un bambino in MKL5.
L'argomento si chiama "domande di base da un principiante", e come principiante non capisco niente. Bene, qui è dove otterrò una risposta alla mia domanda elementare (o piuttosto spero). Ho cercato di seguire una guida passo passo per scrivere il mio Expert Advisor. Mi sono bloccato sull'aspetto di come chiudere forzatamente una posizione aperta in MKL5 (senza aspettare lo SL o il TP), quando appare un certo segnale indicatore, come all'intersezione di due MA, o quando il restringimento delle linee di Bollinger o altri segnali? Ci deve essere una funzione come ClosePos(), ma dov'è e come la ottengo? Chiedo uno snippet di codice dettagliato, poiché io stesso non capisco le sfumature - in MKL5 è ancora un bambino.
Ho a che fare con questo da meno di un mese. La questione è se vuoi farlo da solo o chiedere sul forum. Domande semplici di solito non chiedono, perché non è molto buono (si può guardare nella Guida, cercare risposte pronte su Internet). Ecco perché ho fatto quelle domande piuttosto estese che sono venute fuori durante questo mese. Per quanto riguarda la tua domanda... Viene chiamata la funzione OrderClose. Ci sono molti esempi del suo utilizzo. È nel campione MACD incorporato. Ecco il codice utilizzato per chiudere gli ordini dai segnali MACD (qui c'è un esempio di codice per l'implementazione del Trailing Stop)
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
//--- long position is opened
if(OrderType()==OP_BUY)
{
//--- should it be closed?
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
else // go to short position
{
//--- should it be closed?
if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
}
}
Io stesso lo faccio da meno di un mese. La questione è se vuoi farlo da solo o se vuoi fare domande sul forum. Di solito non faccio domande semplici, perché non è proprio il caso (puoi fare qualche ricerca nell'Helpdesk o cercare le risposte su Internet). Ecco perché ho fatto quelle domande piuttosto estese che sono venute fuori durante questo mese. Per quanto riguarda la tua domanda... Viene chiamata la funzione OrderClose. Ci sono molti esempi del suo utilizzo. È nel campione MACD incorporato. Ecco il codice utilizzato per chiudere gli ordini tramite i segnali MACD (qui c'è un codice di esempio di come implementare il meccanismo di Trailing Stop)
Grazie per una risposta così rapida! Ho pensato che probabilmente sarebbe stato dato da qualcuno che ha avuto a che fare con questo tipo di cose per molto tempo.
Solo che OrderClose è in MKL4, ma non in MKL5. C'è solo la funzionePositionClose nella classe CTrade nella libreria standard, e non mi è affatto chiaro come tirarla fuori da lì. Penso che per questo si debba in qualche modo chiamare da un codice alla libreria, poi alla classe CTrade.... Tutto sommato, è una foresta oscura per me. Non avevo intenzione di studiare MKL5, ho solo deciso di automatizzare la mia strategia di discreto successo (per me), quindi ho iniziato a seguire le istruzioni passo dopo passo. E ora sono bloccato...
Grazie per una risposta così rapida! Ho pensato che probabilmente sarebbe venuto da qualcuno che è nuovo a questo.
Tranne che OrderClose è in MKL4, ma MKL5 non ce l'ha. C'è solo la funzionePositionClose nella classe CTrade nella libreria standard, e non mi è affatto chiaro come tirarla fuori da lì. Penso che per questo si debba in qualche modo chiamare da un codice alla libreria, poi alla classe CTrade..... Tutto sommato, è una foresta oscura per me. Non avevo intenzione di studiare MKL5, ho solo deciso di automatizzare la mia strategia di discreto successo (per me), quindi ho iniziato a seguire le istruzioni passo dopo passo. E ora sono bloccato...
- www.mql5.com
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ciao a tutti!
Devo precisare subito che ho cercato di fare queste domande nel thread pertinente qui, ma in qualche modo la domanda non ha avuto l'attenzione che meritava. Anche se, mi sembra, gli argomenti toccati almeno una volta toccano/emergono nella mente di molte persone. Un po' come le domande delle FAQ (anche se potrei sbagliarmi). Duplicherò qui direttamente le domande stesse:
1. C'è una differenzatra Mql4 e Mql5 (sito e linguaggio di programmazione). Esiste Metatrade 4 e Metatrader 5 con Mql4 e Mql5 rispettivamente. Ci sono anche due diversi siti web corrispondenti. Allo stesso tempo, tutti gli Expert Advisors che ho guardato in MT4 portano a quel sito. Quale è più rilevante? Quale forum è più "vivace"? Dov'è il posto migliore per postare domande? Esiste una retrocompatibilità tra diverse versioni di MT e Mql? Personalmente sto scrivendo il mio Expert Advisor MT4 rispettivamente su Mql4. Questo è dovuto al fatto che il broker che sto usando per testare la demo utilizza MT4. Come posso identificare la lingua in cui è scritto il mio Expert Advisor? Intendo solo per estensione (.mq4 e .mq5). Se rinomino un file, verrà compilato (di nuovo, riguardo alla compatibilità)?
2. Parametri esterni dinamici di Expert Advisor. È possibile cambiare dinamicamente i parametri regolabili di un Expert Advisor? Lasciatemi spiegare... Per esempio, c'è un parametro esterno extern bool a. Se è vero, deve essere impostato un parametro aggiuntivo extern int b. Se a=falso, il parametro b non è necessario. C'è un modo per visualizzarlo/non visualizzarlo a seconda del valore corrente di un selezionato? Tenendo conto del fatto che non ho potuto trovare alcun gestore di cambio di parametro esterno e non c'è nessun #if ... #endif, ho il sospetto che non si possa fare... Se è così, ma potresti suggerire il modo migliore di procedere in questa situazione, per non sovraccaricare il processo di impostazione dei parametri esterni? Per esempio, potrei mettere a=falso, dimenticare che il parametro b non è usato, ma includerlo comunque nell'ottimizzazione (anche se non avrebbe senso, perderebbe solo del tempo in più). E una cosa è quando c'è un solo parametro b. Ma se, per esempio, faccio un parametro esterno enum e ci sono diverse varianti a discesa di TC. Hanno una parte comune (quindi è logico implementarli in un solo EA, piuttosto che scriverne diversi), ma ce ne sono anche diversi con molti parametri diversi. Allora è molto facile confondere quali parametri sono rilevanti per il TS selezionato.
Ottimizzazione automatica di Expert Advisor. IMHO, è molto utile e utile. Ho trovato qui un articolo sull'ottimizzazione automatica del robot di trading nel trading reale. Tuttavia, per quanto ho capito, viene utilizzata una seconda istanza di MT che viene eseguita per l'ottimizzazione dall'esterno (da un'istanza di MT in esecuzione) e i risultati dell'ottimizzazione vengono letti da un report in forma di html. Questo non è molto conveniente e non è corretto. Logicamente dovrei scrivere la mia funzione/dll di ottimizzazione ed eseguirla direttamente da Expert Advisor. Quindi ecco la domanda. Per quanto ho capito, un algoritmo di ottimizzazione genetica è stato programmato nel tester di strategie. Conosco questi algoritmi molto brevemente. Ma sono noti da molto tempo, da qui la domanda - perché reinventare la ruota?) C'è un algoritmo pronto che viene usato direttamente in MT? Forse esiste già da qualche parte nelle librerie del terminale stesso... Forse c'è un codice sorgente separato o una dll pronta. In generale, vi prego di condividere la vostra esperienza in materia.
Grazie in anticipo per le risposte ad almeno una parte di queste domande.