Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Grazie all'autore per la libreria!
Aggiungete la riga "cnt++;" nel ciclo della funzione di ricerca genitore, altrimenti potrebbe entrare in un ciclo eterno!
In effetti, in alcuni casi può verificarsi una situazione in cui il ciclo può diventare infinito - quando c'è un solo individuo nella popolazione.
Grazie per il post, apporterò le modifiche a breve.
PS Molto probabilmente ho dimenticato di inserire cnt++, del resto è per questo che ho inserito questa variabile. :)
Ricordo che volevo fare il ciclo con l'operatore for(), in modo da poter regolare la "persistenza" della ricerca di diversi genitori, ma poi ho cambiato idea, non vedendo molto senso in questo.
@joo È possibile utilizzare la vostra libreria per la selezione dei parametri degli indicatori Ishimoku, MAKD, ecc.
Se mi chiedessi: "Per quali compiti di ottimizzazione del trader è impossibile utilizzare la libreria?". - non saprei cosa rispondere.
Certo che è possibile.
Se mi chiedeste: "Per quali compiti di ottimizzazione del trader è impossibile usare la libreria?". - non saprei cosa rispondere.
Certo che si può.
Scusate la domanda stupida, non sono un programmatore. Se possibile, vi prego di condividere il codice in cui la vostra libreria viene utilizzata per selezionare diversi parametri per un indicatore (ad esempio, Ishimoku, MAKD) per chiarire il suo lavoro.
La domanda non è affatto stupida.
Utilizzate il secondo esempio dell'articolo. Al posto dell'indicatore ZZ, sostituitelo con un altro qualsiasi. Al posto della lettura dei top ZZ, dovete scrivere le vostre condizioni (MACD, ad esempio, otterrete lo stesso zigzag alternativo, ma secondo le regole da voi stabilite). Non c'è nulla di complicato. Provate, scrivete il codice. Se non riuscite, fate domande, dimostrando i punti problematici del codice. Chi è interessato vedrà come risolvere i propri compiti, voi e tutti ne trarrete beneficio. Se non volete imparare il linguaggio, contattate"Work".
2joo:
Potreste dirmi l'essenza della funzione RemovalDuplicates()? La domanda è la seguente: se abbiamo due cromosomi identici, devono essere entrambi contrassegnati come duplicati o uno di essi deve rimanere non contrassegnato come duplicato per un ulteriore utilizzo?
Inoltre, per velocizzare questa funzione, suggerisco che il ciclo Ch2 inizi con il valore Ch+1, poiché non ha senso che Ch2 parta da zero:
//Выбираем второй из пары...
for (Ch2=Ch+1;Ch2<PopulChromosCount;Ch2++)
e se la risposta alla mia domanda è che entrambi i cromosomi sono contrassegnati come duplicati, allora invece di:
do:
E se la risposta è che un cromosoma deve essere lasciato NON marcato come duplicato, allora il ciclo Ch2 dovrebbe iniziare comunque con il valore Ch+1.
2joo:
Potresti dirmi l'essenza della funzione RemovalDuplicates()? La domanda è: se abbiamo due cromosomi identici, dovrebbero essere entrambi contrassegnati come duplicati, o uno di loro dovrebbe rimanere non contrassegnato come duplicato per un ulteriore utilizzo?
L'algoritmo di questa funzione è il seguente:
Contrassegniamo tutti i cromosomi con la caratteristica di unicità "1". Riteniamo che tutti i cromosomi siano unici.
Controlliamo se ci sono cromosomi identici. A tal fine, duplichiamo virtualmente la popolazione e confrontiamo tutti i cromosomi tra loro, saltando le coppie con lo stesso numero di sequenza. I duplicati trovati sono contrassegnati dalla caratteristica di duplicazione "0".
Successivamente, copiamo tutti i cromosomi rimanenti non contrassegnati come "0" nell'array temporaneo. Otteniamo un array temporaneo pieno e senza spazi vuoti e sappiamo già quanti cromosomi unici sono rimasti nella popolazione.
Quindi, l'unica cosa che resta da fare è copiare i cromosomi nella popolazione. Come si può vedere, non c'è alcuna cancellazione di cromosomi, i cromosomi unici vengono solo spostati all'inizio della popolazione.
Per testare questa funzione, scrivete uno script e provate ad alimentare combinazioni di array riempiti create manualmente. Si vedrà l'efficienza/inefficienza della funzione. Calcolare il minor numero possibile di controlli delle colonne dell'array e confrontarlo con il numero di volte in cui la funzione RemovalDuplicates() controlla le colonne.
ZY Per testare questa funzione, scrivete uno script e provate ad alimentare manualmente combinazioni insidiose di matrici riempite. Si vedrà l'efficacia/inefficacia della funzione. Calcolate il minor numero possibile di controlli delle colonne dell'array e confrontatelo con il numero di volte in cui la funzione RemovalDuplicates() controlla le colonne.
All'inizio del ciclo "for (Ch2=Ch+1)" il numero di iterazioni necessarie e sufficienti sarà ridotto di 2 volte e uno dei cromosomi duplicati non sarà contrassegnato come duplicato. Mi chiedevo quanto sarebbe stato più corretto lasciare un cromosoma dei duplicati unico! Cioè, il compito della funzione è quello di rimuovere i cromosomi identici, ma una copia dei cromosomi duplicati mi sembra meglio restituirla alla popolazione, perché la presenza dei suoi duplicati non dimostra la sua vitalità. Per esempio: se esiste una matrice di cromosomi {1,3,4,7,7,7,6,7,8,8}, penso che la rimozione ottimale dei duplicati sarebbe questo risultato: {1,3,4,7,6,8}. Quindi i cromosomi 7 e 8 saranno considerati ulteriormente.
La tua precedente osservazione su cnt++ era corretta. Ma questa volta si sbaglia. Vi suggerisco di non speculare su "Cosa succederà se...?" ma di scrivere uno script, testare la funzione e dimostrare il risultato.
Rimane un singolo cromosoma unico, mentre le altre copie esatte vengono riconosciute come duplicati e "cancellate".
Questa è probabilmente una delle funzioni più "mosce" dell'intero algoritmo UGA. Mi ha richiesto più tempo. Ma non ci sono errori.
PS La cosa principale è che non ci dovrebbero essere controlli ripetuti degli stessi cromosomi - questo viene fatto.
Il numero di controlli per l'unicità è il minimo necessario. Se si parla del numero di esecuzioni nell'operatore for(), è possibile ridurle (mentre il numero di controlli di unicità rimarrà lo stesso - il minimo possibile) introducendo una variabile aggiuntiva, aumentando ogni volta di uno quella annidata. Questo rallenterà la funzione.
PPS Se si pone l'accento su:
shurick:
....
quanto sarebbe più corretto lasciare unico un cromosoma dei duplicati! Cioè il compito della funzione è quello di rimuovere i cromosomi identici, ma una copia di cromosomi duplicati mi sembra meglio restituirla alla popolazione, perché la presenza dei suoi duplicati non dimostra la sua vitalità.
Il compito della funzione è quello di rimuovere i duplicati. È così che si chiama. Non si tratta di rimuovere cromosomi identici. Vedete la differenza? Questa funzione non distingue i cromosomi in base alla loro vitalità. Di conseguenza, rimangono solo cromosomi unici, senza duplicati.
PPPS Faccio un'altra precisazione per sicurezza.
Supponiamo di avere una popolazione composta da 20 cromosomi (per semplicità e chiarezza con un singolo gene intero), il problema di massimizzazione:
|7|2|3|9|2|4|5|3|3|5|6|2|4|3|5|10|6|7|7|2|
Ovvero, in una popolazione di cromosomi contenenti il gene
2 - 4 pezzi
3 - 4 pezzi
4 - 2 pezzi
5 - 3 pezzi
6 - 2 pezzi
7 - 3 pezzi
9 - 1 pezzo
10 - 1 pezzo.
Totale - 20 pezzi di cromosomi.
Dopo aver rimosso i duplicati, la popolazione avrà il seguente aspetto, con 8 cromosomi rimanenti:
|7|2|3|9|4|5|6|10|
Rimane quindi un cromosoma unico, gli altri sono duplicati e saranno "cancellati" dopo la chiamata alla funzione.
dopo la chiamata alla funzione.
alla fine della funzione.
La popolazione avrà il seguente aspetto:
|10|9|7|6|5|4|3|2|
PPPS Farò un'altra precisazione per sicurezza.
Grazie mille per il chiarimento, la domanda sulla rimozione dei duplicati ha trovato una risposta soddisfacente. Allego il codice dello script che mostra la funzione originale e quella ottimizzata, che dimostra la riduzione del numero di passaggi nei loop. Nel mio commento attuale NON sto segnalando un bug nella funzione, ma suggerendo la sua ottimizzazione, e il mio obiettivo principale era quello di scoprire il principio della rimozione dei duplicati, al quale ho ricevuto una risposta esauriente. Grazie ancora per la libreria e per le spiegazioni della funzione.