Hoper23 >> : Il problema è che l'obiettivo del compito è chiaro, ma la possibilità della sua implementazione in MQL sembra poco chiara, dato che non ho ancora familiarità con la funzione built-in array del tester-optimizer. Sto cercando di rileggere il manuale MQL ma non ho ancora trovato questo blocco. E l'ottimizzatore autocostruito da thecore non è tanto inaffidabile quanto poco comprensibile. Le variabili sono composte in modo piuttosto strano, non ci sono annotazioni e sono fondamentalmente diverse dalla versione funzionante menzionata nel link sopra. Se non è difficile, caro thecore, spiega il tuo punto di vista dell'ottimizzatore, in modo da poter adattare tutti i 19 parametri e auto-sostituire il risultato.
Mi sembra strano sentirlo dire da un programmatore, ma cercherò di spiegarlo (non di sillabarlo):
1. Supponiamo di avere una funzione con N parametri di ingresso
Funzione(n1,n2,...,n19);
2.Parametri
n1 varia da n1Min a n1Max con passo n1Step
....
n19 cambia da n19Min a n19Max con n19Step
È necessario:
- Passa attraverso tutti (per il metodo lineare) i parametri in entrata o non tutti (per il metodo della convergenza veloce) i parametri in entrata.
Ci sono molti metodi di convergenza veloce, uno dei quali è l'algoritmo genetico.
- Ogni volta che si inserisce un nuovo gruppo di parametri, si ottiene il risultato della funzione in uscita.
- Dovete scrivere un blocco per analizzare questi risultati e decidere se il risultato è
bene.
Ho capito che hai problemi con l'unità di analisi. Perché se non sapete come scrivere una funzione o come
o come guardare attraverso i parametri di input, non è per me, è per le classi di programmazione o per le persone a cui piace scrivere
le basi della programmazione.
Cosa fa l'unità di analisi:
1.Prende la barra BAR_Y più vecchia che volete analizzare, e infila i dati attuali al tempo Y nel vostro
funzione. Cioè, la vostra funzione pensa che BAR_Y sia TimeCurrent.
2.Ora prendete tante barre nella profondità della storia quante ne prenderebbe la vostra Function(n1,n2,...,n19) se fosse alla barra 0.
e ottenere qualche risultato.
Per esempio, la tua strategia sta cercando un estremo lungo iMA3,iMA2,iMA1. Allora abbiamo iMA_Y+2,iMA_Y+1,iMA_Y
Se è un punto estremo, ci fermiamo, altrimenti facciamo Y++;
OK. Troviamo il punto di estremo nella posizione t, cioè iMAt+2,iMAt+1,iMAt
Ora abbiamo bisogno di calcolare se il TP o lo SL saranno attivati
Cioè dal punto t scendiamo le barre t-1 e analizziamo la distanza da Open[t] a High[t] e a Low[t],
e poi da Open[t] a High[t-1] e a Low[t-1], se non raggiungiamo TP o SL andiamo oltre - prendiamo t-2 e così via fino a quando non funziona
TP o SL o entrambi.
Abbiamo trovato la PRIMA condizione per Funzione(n1,n2,...,n19).
Salviamo il risultato,
Poi facciamo t-- e procediamo con l'analisi fino alla barra 0.
4. Spostiamo Y e ripetiamo il processo.
Così troviamo tutte le occorrenze della nostra funzione Function(n1,n2,...,n19) fino al momento attuale.
5. Analizzare il momento attuale e vedere se ci sono state situazioni simili in passato e come sono finite.
6. Salvare il risultato.
7.Prendere la prossima serie di parametri n1,,n19 per Function(n1,n2,...,n19) e controllarla
8.Ripetere fino ad esaurire i parametri.
9. scegliamo il miglior set di parametri o diversi set, e secondo le loro raccomandazioni, impostiamo BUY, SELL o
non fare nulla.
Questo è tutto.
Spero che sia difficile, perché è davvero difficile.
Hoper23 >> : Il problema è che lo scopo del compito è chiaro, ma la possibilità della sua implementazione in MQL sembra poco chiara, dato che non ho ancora familiarità con la funzione dell'array incorporato del tester-optimizer. Sto cercando di rileggere il manuale MQL ma non ho ancora trovato questo blocco. E l'ottimizzatore autocostruito da thecore non è tanto inaffidabile quanto poco comprensibile. Le variabili sono scritte in modo abbastanza bizzarro lì, non ci sono annotazioni e sono fondamentalmente diverse dalla versione funzionante menzionata nel link di cui sopra. Se non è difficile, caro thecore, spiega il tuo punto di vista dell'ottimizzatore, in modo che io possa stipare tutti i 19 parametri e il risultato di autocompletamento.
A proposito, non iniziate con il blocco di enumerazione - è molto più facile da scrivere che il parser.
E se trovate tutto ciò che ho detto troppo complicato, cercate l'auto-ottimizzatore di xeon.
Utilizza l'ottimizzatore MetaTrader. Non cercate la funzione di auto-ottimizzazione incorporata. Non c'è nessuno.
thecore==> secondo il tuo ragionamento, così come il mio, si ottiene for(S = Sstart; S <= Send; S += Sstep), bene, in termini generali. Ecco cosa ho ottenuto
void Optimization(){int StartBar =iBarShift(Symbol(),0,TimeCurrent()-60*( EndDate+ OptimDuration));int EndBar =iBarShift(Symbol(),0,TimeCurrent()-60* EndDate);int Count =0;double CurRF =-999999;ArrayInitialize( EqualProfit,0);ArrayInitialize( TransCount,0);ArrayInitialize( MaxDrowDown,0);for( S = Sstart; S <= Send; S += Sstep)for( O = Ostart; O <= Oend; O += Ostep)for( I = Istart; I <= Iend; I += Istep)for( G = Gstart; G <= Gend; G += Gstep)for( M = Mstart; M <= Mend; M += Mstep)for( CC = CCstart; CC <= CCend; CC += CCstep)for( CCI = CCIstart; CCI <= CCIend; CCI += CCIstep)for( F_EMA = F_EMAstart; F_EMA <= F_EMAend; F_EMA += F_EMAstep)for( S_EMA = S_EMAstart; S_EMA <= S_EMAend; S_EMA += S_EMAstep)for( SMA = SMAstart; SMA <= SMAend; SMA += SMAstep)for( stK = stKstart; stK <= stKend; stK += stKstep)for( stP = stPstart; stP <= stPend; stP += stPstep)for( stD = stDstart; stD <= stDend; stD += stDstep)for( W = Wstart; W <= Wend; W += Wstep)for( H = Hstart; H <= Hend; H += Hstep)for( C = Cstart; C <= Cend; C += Cstep)for( Skill = Skillstart; Skill <= Skillend; Skill += Skillstep)for( SkillMAX = SkillMAXstart; SkillMAX <= SkillMAXend; SkillMAX += SkillMAXstep)for( shirina = shirinastart; shirina <= shirinaend; shirina += shirinastep){int CurTrans =0;double CurOpenPrice =0;int EqualMax =0;int EqualMin =0;for(int i = StartBar; i >= EndBar; i--){
EqualMin =MathMin( EqualProfit[ Count], EqualMin);if( EqualProfit[ Count]> EqualMax){
MaxDrowDown[ Count]=MathMax( MaxDrowDown[ Count], EqualMax- EqualMin);
EqualMax = EqualProfit[ Count];
EqualMin = EqualMax;}
MaxDrowDown[ Count]=MathMax( MaxDrowDown[ Count], EqualMax- EqualMin);if( EqualProfit[ Count]!=0)if( CurRF < MaxDrowDown[ Count]/ EqualProfit[ Count]){
CurRF = MaxDrowDown[ Count]/ EqualProfit[ Count];int Num = Count;int BestS = S;int BestO = O;int BestI = I;int BestG = G;int BestM = M;int BestCC = CC;int BestCCI = CCI;int BestF_EMA = F_EMA;int BestS_EMA = S_EMA;int BestSMA = SMA;int BeststK = stK;int BeststP = stP;int BeststD = stD;int BestW = W;int BestH = H;int BestC = C;int BestSkill = Skill;int BestSkillMAX = SkillMAX;int Bestshirina = shirina;}
Count++;}// Цикл переменных Alert("Оптимизация завершена. Прибыль max ", EqualProfit[ Num]," пунктов. Сделок ", TransCount[ Num],". Просадка ", MaxDrowDown[ Num]);Alert("Параметры: S = ", BestS,", O = ", BestO,", I = ", BestI,", G = ", BestG,", M = ", BestM,", CC = ", BestCC,", CCI = ", BestCCI,", F_EMA = ", BestF_EMA,", S_EMA = ", BestS_EMA,", SMA = ", BestSMA,", stK = ", BeststK,", stP = ", BeststP,", stD = ", BeststD,", W = ", BestW,", H = ", BestH,", C = ", BestC,", Skill = ", BestSkill,", SkillMAX = ", BestSkillMAX,", shirina = ", Bestshirina);
LastOptim =TimeCurrent();GlobalVariableSet("LastOptimization", LastOptim);if( CurRF <0)if(MessageBox("Фактор восстановления меньше нуля./nПринимать данные оптимизированные параметры?","Вопрос", MB_YESNO)== IDNO)return;
BestS = S;
BestO = O;
BestI = I;
BestG = G;
BestM = M;
BestCC = CC;
BestCCI = CCI;
BestF_EMA = F_EMA;
BestS_EMA = S_EMA;
BestSMA = SMA;
BeststK = stK;
BeststP = stP;
BeststD = stD;
BestW = W;
BestH = H;
BestC = C;
BestSkill = Skill;
BestSkillMAX = SkillMAX;
Bestshirina = shirina;GlobalVariableSet("AutoS", S);GlobalVariableSet("AutoO", O);GlobalVariableSet("AutoI", I);GlobalVariableSet("AutoG", G);GlobalVariableSet("AutoM", M);GlobalVariableSet("AutoCC", CC);GlobalVariableSet("AutoCCI", CCI);GlobalVariableSet("AutoF_EMA", F_EMA);GlobalVariableSet("AutoS_EMA", S_EMA);GlobalVariableSet("AutoSMA", SMA);GlobalVariableSet("AutostK", stK);GlobalVariableSet("AutostP", stP);GlobalVariableSet("AutostD", stD);GlobalVariableSet("AutoW", W);GlobalVariableSet("AutoH", H);GlobalVariableSet("AutoC", C);GlobalVariableSet("AutoSkill", Skill);GlobalVariableSet("AutoSkillMAX", SkillMAX);GlobalVariableSet("Autoshirina", shirina);
Ulteriore stallo - non so come fissare il risultato positivo e sostituire la variabile automaticamente.
yyyy ..... "Il link che ti ha portato a questa pagina è "morto" o cancellato". Un po' simile alla direzione di andare a farsi fottere. (senza offesa, solo per divertimento).
Ecco un grazie), a me per il link, a klot'y per la soluzione effettivamente pronta su un piatto), lì hai sia il tester che l'ottimizzatore, basta modificarlo un po' per soddisfare le tue esigenze... E tutto si apre.
thecore==> secondo il tuo ragionamento, così come il mio, si ottiene for(S = Sstart; S <= Send; S += Sstep), bene, in termini generali. Ecco cosa ho ottenuto
1.Non cercare di risolvere il problema di petto.
Perché è necessario salvare TUTTE le varianti di tutte le soluzioni possibili.
Non stai risolvendo un problema di matematica. Stai guardando la storia per una situazione simile a quella che hai
oggi e ora per decidere cosa fare.
Quindi, prima descrivete la situazione attuale e cercate in modo specifico.
Questo ridurrà il numero di passaggi, variabili e risultati di MOLTO.
Poi, stop - non so come fissare un risultato positivo e metterlo in una variabile automaticamente.
Nella prima fase, l'ho salvato in un file. Ricevuto sulla storia di circa 10.000-50.000 opzioni vincenti.
Poi analizzati in Excel.
2. Non cercare una corrispondenza esatta. Non è che stiamo descrivendo un'onda sinusoidale.
3.Scrivete prima un'unità di raccolta dati per UNA variabile, fate il debug, e poi aggiungete altre 18 o quante variabili avete.
Bene. L'idea è logica. Allora, come si risolve la formula per ottimizzare su combinazioni con un solo parametro? Il punto è che in questo esempio sono interconnessi. Non conosco ancora un altro esempio a causa della mia limitata conoscenza del linguaggio MQL.
E NON FUNZIONA NULLA... o meglio si incasina da solo, stressa la CPU, ma nessun cambiamento nelle variabili e fa tutto velocemente - un paio di secondi e basta. Non capisco.
Questa assurdità è stata progettata per ottimizzare la
Viene fornito con una bibbia.
E poi c'è la biblah.
E non funziona... o meglio, fa un po' di confusione, stressa la CPU, ma nessun cambiamento nelle variabili e rende tutto veloce - un paio di secondi e basta. Non capisco.
Avete iniziato a lavorare con l'auto-ottimizzatore di xeon
Il problema è che l'obiettivo del compito è chiaro, ma la possibilità della sua implementazione in MQL sembra poco chiara, dato che non ho ancora familiarità con la funzione built-in array del tester-optimizer. Sto cercando di rileggere il manuale MQL ma non ho ancora trovato questo blocco. E l'ottimizzatore autocostruito da thecore non è tanto inaffidabile quanto poco comprensibile. Le variabili sono composte in modo piuttosto strano, non ci sono annotazioni e sono fondamentalmente diverse dalla versione funzionante menzionata nel link sopra. Se non è difficile, caro thecore, spiega il tuo punto di vista dell'ottimizzatore, in modo da poter adattare tutti i 19 parametri e auto-sostituire il risultato.
Mi sembra strano sentirlo dire da un programmatore, ma cercherò di spiegarlo (non di sillabarlo):
1. Supponiamo di avere una funzione con N parametri di ingresso
Funzione(n1,n2,...,n19);
2.Parametri
n1 varia da n1Min a n1Max con passo n1Step
....
n19 cambia da n19Min a n19Max con n19Step
È necessario:
- Passa attraverso tutti (per il metodo lineare) i parametri in entrata o non tutti (per il metodo della convergenza veloce) i parametri in entrata.
Ci sono molti metodi di convergenza veloce, uno dei quali è l'algoritmo genetico.
- Ogni volta che si inserisce un nuovo gruppo di parametri, si ottiene il risultato della funzione in uscita.
- Dovete scrivere un blocco per analizzare questi risultati e decidere se il risultato è
bene.
Ho capito che hai problemi con l'unità di analisi. Perché se non sapete come scrivere una funzione o come
o come guardare attraverso i parametri di input, non è per me, è per le classi di programmazione o per le persone a cui piace scrivere
le basi della programmazione.
Cosa fa l'unità di analisi:
1.Prende la barra BAR_Y più vecchia che volete analizzare, e infila i dati attuali al tempo Y nel vostro
funzione. Cioè, la vostra funzione pensa che BAR_Y sia TimeCurrent.
2.Ora prendete tante barre nella profondità della storia quante ne prenderebbe la vostra Function(n1,n2,...,n19) se fosse alla barra 0.
e ottenere qualche risultato.
Per esempio, la tua strategia sta cercando un estremo lungo iMA3,iMA2,iMA1. Allora abbiamo iMA_Y+2,iMA_Y+1,iMA_Y
Se è un punto estremo, ci fermiamo, altrimenti facciamo Y++;
OK. Troviamo il punto di estremo nella posizione t, cioè iMAt+2,iMAt+1,iMAt
Ora abbiamo bisogno di calcolare se il TP o lo SL saranno attivati
Cioè dal punto t scendiamo le barre t-1 e analizziamo la distanza da Open[t] a High[t] e a Low[t],
e poi da Open[t] a High[t-1] e a Low[t-1], se non raggiungiamo TP o SL andiamo oltre - prendiamo t-2 e così via fino a quando non funziona
TP o SL o entrambi.
Abbiamo trovato la PRIMA condizione per Funzione(n1,n2,...,n19).
Salviamo il risultato,
Poi facciamo t-- e procediamo con l'analisi fino alla barra 0.
4. Spostiamo Y e ripetiamo il processo.
Così troviamo tutte le occorrenze della nostra funzione Function(n1,n2,...,n19) fino al momento attuale.
5. Analizzare il momento attuale e vedere se ci sono state situazioni simili in passato e come sono finite.
6. Salvare il risultato.
7.Prendere la prossima serie di parametri n1,,n19 per Function(n1,n2,...,n19) e controllarla
8.Ripetere fino ad esaurire i parametri.
9. scegliamo il miglior set di parametri o diversi set, e secondo le loro raccomandazioni, impostiamo BUY, SELL o
non fare nulla.
Questo è tutto.
Spero che sia difficile, perché è davvero difficile.
Il problema è che lo scopo del compito è chiaro, ma la possibilità della sua implementazione in MQL sembra poco chiara, dato che non ho ancora familiarità con la funzione dell'array incorporato del tester-optimizer. Sto cercando di rileggere il manuale MQL ma non ho ancora trovato questo blocco. E l'ottimizzatore autocostruito da thecore non è tanto inaffidabile quanto poco comprensibile. Le variabili sono scritte in modo abbastanza bizzarro lì, non ci sono annotazioni e sono fondamentalmente diverse dalla versione funzionante menzionata nel link di cui sopra. Se non è difficile, caro thecore, spiega il tuo punto di vista dell'ottimizzatore, in modo che io possa stipare tutti i 19 parametri e il risultato di autocompletamento.
A proposito, non iniziate con il blocco di enumerazione - è molto più facile da scrivere che il parser.
E se trovate tutto ciò che ho detto troppo complicato, cercate l'auto-ottimizzatore di xeon.
Utilizza l'ottimizzatore MetaTrader. Non cercate la funzione di auto-ottimizzazione incorporata. Non c'è nessuno.
Ecco l' indicatore di klot con l'ottimizzatore GA incorporato nell'indicatore.
Penso che Hoper23 non lo analizzerà geneticamente, non importa se questo link è rotto o no.
Tanto più che non è rotto.
thecore==> secondo il tuo ragionamento, così come il mio, si ottiene for(S = Sstart; S <= Send; S += Sstep), bene, in termini generali. Ecco cosa ho ottenuto
Ulteriore stallo - non so come fissare il risultato positivo e sostituire la variabile automaticamente.yyyy ..... "Il link che ti ha portato a questa pagina è "morto" o cancellato". Un po' simile alla direzione di andare a farsi fottere. (senza offesa, solo per divertimento).
Ecco un grazie), a me per il link, a klot'y per la soluzione effettivamente pronta su un piatto), lì hai sia il tester che l'ottimizzatore, basta modificarlo un po' per soddisfare le tue esigenze... E tutto si apre.
Risposta non aperta!!!
thecore==> secondo il tuo ragionamento, così come il mio, si ottiene for(S = Sstart; S <= Send; S += Sstep), bene, in termini generali. Ecco cosa ho ottenuto
1.Non cercare di risolvere il problema di petto.
Perché è necessario salvare TUTTE le varianti di tutte le soluzioni possibili.
Non stai risolvendo un problema di matematica. Stai guardando la storia per una situazione simile a quella che hai
oggi e ora per decidere cosa fare.
Quindi, prima descrivete la situazione attuale e cercate in modo specifico.
Questo ridurrà il numero di passaggi, variabili e risultati di MOLTO.
Poi, stop - non so come fissare un risultato positivo e metterlo in una variabile automaticamente.
Nella prima fase, l'ho salvato in un file. Ricevuto sulla storia di circa 10.000-50.000 opzioni vincenti.
Poi analizzati in Excel.
2. Non cercare una corrispondenza esatta. Non è che stiamo descrivendo un'onda sinusoidale.3.Scrivete prima un'unità di raccolta dati per UNA variabile, fate il debug, e poi aggiungete altre 18 o quante variabili avete.
Bene. L'idea è logica. Allora, come si risolve la formula per ottimizzare su combinazioni con un solo parametro? Il punto è che in questo esempio sono interconnessi. Non conosco ancora un altro esempio a causa della mia limitata conoscenza del linguaggio MQL.
Questa assurdità è stata progettata per ottimizzare la
Viene fornito con una bibbia.
бла-бла-блаE c'è una biblah per accompagnarlo.
E NON FUNZIONA NULLA... o meglio si incasina da solo, stressa la CPU, ma nessun cambiamento nelle variabili e fa tutto velocemente - un paio di secondi e basta. Non capisco.Questa assurdità è stata progettata per ottimizzare la
Viene fornito con una bibbia.
E poi c'è la biblah.
E non funziona... o meglio, fa un po' di confusione, stressa la CPU, ma nessun cambiamento nelle variabili e rende tutto veloce - un paio di secondi e basta. Non capisco.Avete iniziato a lavorare con l'auto-ottimizzatore di xeon
TestCommander (autoottimizzazione) Strumento del commerciante
Quindi chiedeteglielo.
A proposito, questo prodotto è già pagato, se ricordo bene.
C'è un aiuto in esso, tutto è spiegato chiaramente.