EA N7S_AO_772012 - pagina 30

 
SHOOTER777 >> :

А

purtroppo, questa osservazione è spiacevole... anche notato...

 

SHOOTER potrebbe dirci brevemente che cosa esattamente i gruppi di parametri ottimizzano

  • x
  • y
  • z
  • X
  • Y
  • Z
Probabilmente ne capisco qualcosa, ma non riesco ancora ad avere tutto il quadro nella mia testa.
 

Ecco un'altra stranezza, o forse solo un difetto

double BTS() {
	if (( prcptrnz1() > 0 || F==0) && bu< HM_Up_X) {
		if ( prcptx1 > 0 && Delta_G12>0) {
			sl = slx; 
			tp = tpx * slx; 
			mn = mnx1; 
			return (1);
		}
	} 
	if (( prcptrnz1() < 0 || F==0) && sll< HM_Dn_Y) {
		if ( prcpty1 > 0 && Delta_G12<0) {
			sl = sly; 
			tp = tpy * sly; 
			mn = mny1;
			return (-1);
		}
	}
	return (0);
}

Si scopre che se ora F == 0 e non ci sono posizioni aperte - allora possiamo entrare prima nel primo blocco e poi nel secondo, il che porterà successivamente a risultati errati.

O mi manca qualcosa?

 

Probabilmente no, però. Non possiamo entrare in entrambi i blocchi allo stesso tempo perché non ci fanno entrare.

Delta_G12

non ci lasciano entrare.

 
ShestkoFF писал(а) >>

Non mi piace criticare le cose che funzionano. Vi darò solo qualche critica al codice:

cpsb. Non prendo le critiche come critiche, ma come una guida all'azione, cioè leggere almeno un po' del manuale MQL

  • Non ho bisogno di scrivere tutto in righe, perché è impossibile leggere il codice.

Accettato, ma probabilmente in lavori futuri. Ho ottenuto questa "scrittura" dopo alcuni altri progetti più globali e a causa della bassa risoluzione del mio monitor da 12 pollici. La tua versione sembra senza dubbio migliore, ma dovrei costantemente scorrere avanti e indietro nell'elenco. Ma siccome non sono qui per me stesso, lo dirò di nuovo - lo terrò a mente.

  • Nominare le variabili in modo significativo

Vedi sopra! Anche se mi piacciono i miei nomi, bisogna solo abituarsi, come ci siamo abituati alle abbreviazioni GOELRO, OBHSS, IMHO ecc. Se guardate bene, ho dato ad alcune variabili nomi più o meno significativi, ma ho abbreviato tutte le vocali.

  • Non rendere le variabili globali se sono locali.

Non ho ancora capito le variabili. Quando si scrive codice da zero non si ha idea di dove sarà una variabile, quindi quasi tutto è globale.

  • Non ha senso non rendere statiche le variabili globali. Se questo non è il caso, si prega di spiegare.

empiricamente non è così, mi ricorderò dove l'ho incontrato - penso che fosse nella funzione BuSll ()

  • Utilizzare le costanti standard definite nel linguaggio. Per esempio, la specificazione di un intervallo di tempo. double iA_C (int pr){int tmfr=60; return(iAO(Symbol(), tmfr, pr));} Penso sia meglio sostituirlo con double iA_C (int pr){return(iAO(Symbol(), PERIOD_H1, pr));}.

Sono d'accordo, correggiamolo, di nuovo, quando si scrive un blocco da zero non si ha ancora idea di quali parametri si passeranno nella funzione, e poi l'occhio si "sporca" e non si presta attenzione a tali "inezie" ))

 
ShestkoFF писал(а) >>

SHOOTER potrebbe dirci brevemente che cosa esattamente i gruppi di parametri ottimizzano

  • x
  • y
  • z
  • X
  • Y
  • Z
Probabilmente capisco in parte, ma non riesco ancora ad avere il quadro completo nella mia testa.

La principale forza motrice e di guida dell'Expert Advisor è la famigerata)) funzione G12(). È questa la funzione in cui vengono calcolate le direzioni commerciali preferite in base agli indicatori. Ma una direzione non è sufficiente - abbiamo bisogno di punti di ingresso. Nei "classici", se su un timeframe vengono cercati o i patterron, o l'indicatore stesso viene abbinato se ci sono parametri esterni, se ce ne sono due o più, anche questi vengono ottimizzati. Ho provato un altro metodo nuovo per me NN

Qui questa funzione

doppio prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1);

se (MathAbs(qw)>at) return(qw);altrimenti return(0);}

una sorta di perceptron e progettato per ottenere.... qualcosa. Ecco qui in dettaglio alcune risposte a molte domande, e meglio di quanto avrei risposto io. 'Come trovare una strategia di trading redditizia' e Ricette di reti neurali. Ammetto che io stesso ho letto tutto in diagonale e sono diventato più interessante studiando il lavoro di altri, vedi sotto.

Questo EA è "creato sulla base di" MTS "Neural network + MACD" di Batohov, MTS "Сombo", "Combo_Right" & AI di Reshetov, PROphet di PraVedNiK,RSI_Test di zerkmax, auto_optimization.mqh di Igor Malcev e alcuni altri.

 
ShestkoFF писал(а) >>

Ecco un'altra stranezza, o forse solo un difetto

Si scopre che se ora F == 0 e non ci sono posizioni aperte - allora possiamo entrare prima nel primo blocco e poi nel secondo, il che porterà successivamente a risultati errati.

O forse non capisco qualcosa?

F == 0 solo nelle prime due fasi di ottimizzazione, quando oltre a Delta_G12 ci sono Trd_Up_X e Trd_Dn_Y.

Se tutti i sei passi sono passati correttamente e i set-file di ottimizzazione sono usati in modo sequenziale, allora F dovrebbe essere sempre uguale a 1.

E ho trovato l'altro errore rivedendo il codice. Vedo che le ultime versioni funzionano peggio. Questo errore è apparso nelle versioni 7 e 9.

Qualcuno l'ha notato?

 
SHOOTER777 >> :

Qui questa funzione

doppio prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1);

se (MathAbs(qw)>at) return(qw);altrimenti return(0);}

una specie di perceptron e destinato a ottenere.... qualcosa.

Questo è un po' un mistero per me al momento. Certo, capisco cosa fa e a cosa serve. Ma la formula stessa è un po' insolita.
Il risultato del lavoro dei neuroni dovrebbe essere un numero che somma gli ingressi dei neuroni moltiplicati per i pesi di questi ingressi.
Cioè logicamente dovrebbe essere qualcosa come il seguente:

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Chiaramente entrambi sono qualche funzione di 4 variabili (o sono 8?) coinvolte nel trovare il massimo (equilibrio risultante), ma è ancora strano :)

 
ShestkoFF писал(а) >>

Questa funzione è ancora un mistero per me. Certo, capisco cosa fa e perché lo fa. Ma la formula stessa è un po' insolita.
Il risultato del lavoro dei neuroni dovrebbe essere un numero che somma gli ingressi dei neuroni moltiplicati per i pesi di questi ingressi.
Quindi, logicamente dovrebbe essere qualcosa del genere:

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Chiaramente entrambi sono qualche funzione di 4 variabili (o sono 8?) che è coinvolta nel trovare il massimo (equilibrio risultante), ma è ancora strano :)

Hai dato una versione semplificata della funzione, almeno è così che l'ho capita

Qui è dove si discute

MTS 'Sombo'.

Ad essere onesti, non è una rete neurale nella sua forma più pura. In primo luogo, manca un valore di soglia senza il quale la capacità di divisione del NS è molto più piccola. In secondo luogo, IMHO, vale la pena aggiungere una soglia di attivazione dell'uscita. Cosa significa? Per restituire il segnale al commercio solo se la soglia di attivazione viene superata. Per esempio:

double res = (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 // )/Close[0] - T); // Dividi per Close[0] per l'unificazione
if (MathAbs(res) > ActivityThreshold) return(res); // ActivityThreshold -- soglia di attivazione

 
gorby777 писал(а) >>

Le versioni precedenti usavano Close(0) nella formula z1 del perceptron, ma in 7 e 9 Close(1). È di questo che stiamo parlando?

No, non credo che si tratti di questo, dopo tutto c'è una regola per lavorare su barre formate.

Ma il fatto che il flag Flq=falso; uno per comprare e uno per vendere influenza fortemente la divisione di queste direzioni di trading e quindi i risultati.

Motivazione: