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.
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.
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.
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.
È 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.
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.
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.
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.
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.
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.
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;
Nella funzione ProtectionClose(), avete già aggiunto delle linee con il corretto while exit.
Prova a scavare qui.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.
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[...]).
È 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.
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.
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...
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.
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.
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.