Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 614

 
yan720:
Grazie per aver risposto. Se non ti dispiace, mandami l'EA di cui parli (o una parte di esso, che è con il canale) - sarebbe interessante vedere un'altra implementazione.

Non riesco a dare un senso a qualcosa che ho fatto qualche anno fa. Non funziona per qualche motivo, anche se ricordo che prima funzionava e commerciava. Lasciatemi prima sistemare il codice, sistemarlo e poi postarlo. Forse domani. Non voglio mettermi in imbarazzo se ci sono degli errori infantili.

 
yan720:

L'idea generale, naturalmente, è questa. E come si determina la larghezza del canale (gamma nel vostro caso)? Lo faccio attraverso la dimensione della candela media e in più è tutto legato alla lunghezza del canale, perché la presenza del canale non viene controllata su un numero rigido di barre, ma, per esempio, su una lunghezza da 10 a 30 barre.

Quello che mi interessa è la questione di selezionare la larghezza dalla lunghezza...

Si possono fare diversi parametri esterni per la larghezza del canale in un indicatore. E fare calcoli separati per ogni parametro.

 

Per la lunghezza, lo stesso vale.

 
Example2:
Salve. Il basket Expert Advisor dovrebbe chiudere tutti gli ordini quando arriva la condizione, ma prima chiude l'ordine, poi prova a chiuderlo di nuovo (il server ci dà un errore dicendo "Invalid ticket") e solo allora va avanti. Ecco un codice di esempio e l'EA stesso.

Nella vostra funzione CloseOrders(), se l'ordine viene chiuso, il ciclo while(cnt<=5 ) invierà ancora una volta il codice per chiudere l'ordine, e si verificherà un errore, ovviamente, quindi uscire attraverso if(). pausa;

                    int cnt=0;
                    while(cnt<=5){
                      Result[0]=OrderClose(OrderTicket(),OrderLots(),MarketInfo("USDCAD",MODE_BID),slip,Blue);
                      if(!Result[0]){
                        Answer=ERRORS(GetLastError());
                        if (Answer==1)continue; cnt++;
                        if (Answer==2)break;
                      }
                    }

Nella funzione ProtectionClose(), avete già aggiunto delle linee con il corretto while exit.

 if(Result[0])break;
 }continue;
Prova a scavare qui.
 
pu6ka:

Nella vostra funzione CloseOrders(), se l'ordine viene chiuso, il ciclo while(cnt<=5) invierà ancora una volta il codice per chiudere l'ordine, e si verificherà un errore, ovviamente, quindi uscire attraverso if(). pausa;

Nella funzione ProtectionClose(), avete già aggiunto delle linee con la corretta uscitawhile

Prova a fare qualche ricerca qui.


Ma nel caso che ho descritto, è la funzione ProtectionClose() che chiude l'ordine. Correggerò questo errore.
 
Example2:

Tuttavia, è la funzione ProtectionClose() che chiude gli ordini nel caso che ho descritto. Correggerò questo errore.

Non ho scavato a fondo nel codice, non ho potuto eseguirlo in tester, non c'è nessun indicatore.

Ma, per esempio, le vostre funzioni OpenUsdbuy(); OpenSellusd() sono consecutive.

OpenSellusd() apre GBPUSD, EURUSD, AUDUSD, NZDUSD, ecc. Sarai il primo a chiuderli nell'ordine inverso di NZDUSD, AUDUSD, ecc.

Solo tre coppie nella funzione ProtectionClose() hanno un while exit in due varianti: USDCAD, USDCHF e USDJPY.

In altre valute, si può uscire da while() solo con un errore if(!Result[...]).

 
FOReignEXchange:

È possibile fare diversi parametri esterni per la larghezza del canale in un indicatore. E fare calcoli separati per ogni parametro.

Il punto è che non voglio impostare forzatamente la larghezza del canale - l'Expert Advisor/indicatore deve rilevare la presenza del canale indipendentemente dalla coppia di valute e/o dalla volatilità corrente. Di conseguenza, ho impostato la lunghezza minima e massima del canale da parametri esterni, e questo solo nel processo di debug dell'algoritmo - dopo questi parametri saranno cuciti in esso. In questa fase, ci sono alcune lamentele. Anche se posso prendere i canali in generale (l'immagine è stata presa dal codice funzionante), mi piacerebbe vedere altre soluzioni di questo problema.

 
pu6ka:

Non ho scavato a fondo nel codice, non ho potuto eseguirlo in tester, non c'è nessun indicatore.

Ma, per esempio, le vostre funzioni OpenUsdbuy(); OpenSellusd() sono consecutive.

OpenSellusd() apre GBPUSD, EURUSD, AUDUSD, NZDUSD, ecc. Sarai il primo a chiuderli nell'ordine inverso di NZDUSD, AUDUSD, ecc.

Solo tre coppie nella funzione ProtectionClose() hanno un while exit in due varianti: USDCAD, USDCHF e USDJPY.

In altre valute si può uscire da while() solo con un errore if(!Result[...])


Grazie per il suggerimento, ho dimenticato di lasciare il ciclo in questo caso, ora dovrebbe funzionare. Se vuoi posso incollare l'indicatore come ringraziamento.
 
yan720:

L'idea generale, naturalmente, è questa. E come si determina la larghezza del canale (gamma nel vostro caso)? Lo faccio attraverso la dimensione della candela media e in più è tutto legato alla lunghezza del canale, perché la presenza del canale non viene controllata su un numero rigido di barre, ma, per esempio, su una lunghezza da 10 a 30 barre.

Quello che mi interessa è la questione di scegliere la larghezza dalla lunghezza...

Questa lunghezza di 10 barre è la cifra fondamentale. Voglio dire non meno di 10... e se è più lungo, è il destino. Portalo all'esterno per poter sperimentare. L'intervallo può essere una dimensione media della candela, non è importante, ma è meglio metterlo anche all'esterno. Forse vorrai impostare gli intervalli massimi e minimi, quindi dovrai impostare due variabili Max_ e Min_. Poi su ogni barra controlli la dimensione media di una candela in queste 10 barre e se ti va bene, disegni le tendenze sulla parte superiore e inferiore delle 10 barre. Per la prossima barra, potete già controllare per 11 barre e se la condizione è soddisfatta, ObjectSet(...); solo OBJPROP_PRICE1 cambia per la prima coordinata , e OBJPROP_PRICE2 e OBJPROP_TIME2 cambiano per la seconda e così via ogni barra. Oppure, si può non ricalcolare nulla e considerare il canale già formato e aspettare la rottura di questo canale. Questo dipende dai vostri gusti.

Bene, nel mio caso, ho suggerito un'opzione più leggera della lanterna per assegnare l'altezza del canale e anche il numero minimo di barre.


yan720:

Il punto è che non voglio impostare forzatamente la larghezza del canale - l'Expert Advisor/indicatore deve rilevare la presenza del canale indipendentemente dalla coppia di valute e/o dalla volatilità corrente. Di conseguenza, ho impostato solo la lunghezza minima e massima del canale da parametri esterni, e questo solo nel processo di debug dell'algoritmo - dopo questi parametri saranno cuciti in esso. In questa fase, ci sono alcune lamentele. Anche se posso prendere i canali in generale (l'immagine è stata presa dal codice funzionante), mi piacerebbe vedere altre soluzioni di questo problema.

Beh, in primo luogo, i parametri non faranno alcuna differenza se sono in quelli esterni o in quelli incorporati. E in secondo luogo, se non si imposta la larghezza del canale, con cosa lo si confronta quando si calcolano le 10 barre specificate? Come volete determinare se è un canale o no? E terzo, imho, la dimensione media delle candele non funziona adeguatamente. Se tutte le 10 barre sono rialziste, ma la dimensione media delle barre non è più grande della barra di riferimento. È un canale o no? Può essere un canale, ma è solo un canale inclinato e noi ne stiamo analizzando uno orizzontale secondo il tuo disegno.
 
yan720:

Il punto è che non voglio impostare forzatamente la larghezza del canale - l'Expert Advisor/indicatore deve rilevare la presenza del canale, indipendentemente dalla coppia di valute e/o dalla volatilità corrente. Di conseguenza, ho impostato solo la lunghezza minima e massima del canale da parametri esterni, e questo solo nel processo di debug dell'algoritmo - dopo questi parametri saranno cuciti in esso. In questa fase, ci sono alcune lamentele. Anche se, nel complesso, i canali sono presi (l'immagine era solo dal codice funzionante), mi piacerebbe vedere altre soluzioni per questo problema.

Bene, c'è un'idea per catturare 2 frattali top consecutivi o 2 iHighest composti da, diciamo, 5-10 candele. Prendiamo questo caso entro un certo intervallo di lunghezza. Se i valori di questi picchi sono vicini tra loro, tra questi due picchi troveremo iLowest.

Allo stesso modo, cerca prima i due picchi inferiori e poi il picco superiore tra di essi.

Poi danzeremo su quelle cime ritrovate. Per prima cosa, disegniamo dei livelli da loro. Poi insegniamo al codice a pensare ulteriormente.

Questa opzione eliminerà il parametro esterno come Channel_width.

In qualsiasi modo la si guardi, penso che abbiamo bisogno almeno di alcuni parametri per la lunghezza.

Motivazione: