Cette stratégie se base sur les signaux de trading générés par l'estimateur Faytterro. L'estimateur Faytterro est un indicateur qui évalue les tendances en calculant le taux de convergence et de divergence des prix.
Le noyau de cette stratégie est l'estimateur de Faytterro. Son calcul est: d'abord calculer le taux de convergence et de divergence (CR) des prix, puis construire une fonction quadratique, qui peut refléter la forme de la courbe CR en définissant différents coefficients. En observant les points d'inflexion de la courbe quadratique, il juge le changement des tendances des prix.
Plus précisément, la stratégie calcule d'abord le CR des prix. Ensuite, elle construit un array dizi de longueur 2*len, et le remplit avec des valeurs de fonction quadratique séquentiellement. Les coefficients de la fonction quadratique reflètent la valeur de CR. Après cela, en observant les deux valeurs à l'indice len+1+5 et len+1+4, elle détermine si la fonction quadratique a un point d'inflexion. S'il y a un point d'inflexion, elle génère des signaux d'achat ou de vente.
Sur cette base, la stratégie établit également certaines conditions supplémentaires, telles que la fixation de la distance minimale entre les percées de prix pour éviter des transactions fréquentes, la génération de signaux de tailles différentes, etc. Ces conditions sont utilisées pour filtrer certains points de négociation indésirables.
Cette stratégie présente les avantages suivants:
Utiliser l'estimateur Faytterro pour juger des tendances, qui est sensible aux fluctuations des prix et peut détecter les changements de tendance tôt.
Construire une fonction quadratique pour refléter la forme de la courbe CR et trouver des points de flexion directement et efficacement.
La génération de signaux de différentes tailles permet un trading pyramidale à des points idéaux, augmentant le potentiel de profit.
L'augmentation du réglage de la distance minimale filtre efficacement les signaux et évite des échanges fréquents inefficaces.
De nombreux paramètres réglables peuvent être optimisés pour différents produits commerciaux, ce qui améliore l'adaptabilité.
La logique de la stratégie est claire et facile à comprendre, et le code est très lisible, ce qui facilite l'apprentissage.
Il y a aussi quelques risques à prendre en compte pour cette stratégie:
Faytterro Estimator présente un risque d'ajustement de la courbe et peut être moins performant dans certains produits de négociation.
Le jugement basé uniquement sur les points d'inflexion de la courbe quadratique peut être trop brut, conduisant à des jugements erronés.
Les transactions pyramidales fréquentes augmentent le coût des commissions.
Un grand nombre de paramètres réglables accroît la difficulté d'optimisation.
Il ne peut pas traiter efficacement les erreurs d'appréciation en période d'oscillation des prix.
L'absence de mécanisme de stop loss peut entraîner des pertes plus importantes.
Les solutions correspondantes sont:
Optimiser les paramètres pour différents produits afin d'améliorer la robustesse.
Ajouter d'autres indicateurs de filtration pour éviter les erreurs de jugement basées uniquement sur les points d'inflexion.
Réglez le stop-loss pour contrôler les pertes uniques.
Utiliser des méthodes de données volumineuses pour optimiser automatiquement les paramètres.
Ajouter l'identification d'oscillation pour éviter de négocier dans des périodes d'oscillation.
Mettez une logique de stop-loss raisonnable.
Les directions d'optimisation comprennent:
Ajoutez une logique de stop loss pour contrôler une seule perte, telle que la perte de stop trailing ou la perte de stop time.
Ajouter d'autres indicateurs pour éviter les erreurs de jugement basées uniquement sur l'estimateur Faytterro.
Ajouter des mécanismes de confirmation pour éviter d'être arrêté par des retraits à court terme.
Optimiser les paramètres réglables pour différents produits en utilisant des algorithmes génétiques, l'optimisation bayésienne, etc.
Identifier les marchés oscillants en utilisant ATR, DMI, etc. et éviter de négocier pendant les oscillations.
Optimiser la logique pyramidale pour éviter de courir après les tendances. Par exemple, ajuster dynamiquement les positions pyramidales en fonction de la force de la tendance.
Testez les paramètres sur différents délais afin de trouver le délai optimal.
Cette stratégie prend des décisions basées sur les signaux de trading de Faytterro Estimator, et y ajoute des jugements logiques et des signaux d'entrée de différentes tailles pour former une stratégie de suivi de tendance avec des caractéristiques pyramidales. La stratégie est intuitive et facile à comprendre, avec de fortes capacités de capture de tendance. Mais elle présente également des problèmes tels que des mauvais jugements d'indicateur, aucun stop loss, difficulté d'optimisation des paramètres. Les optimisations futures incluent l'ajout de mécanismes de filtration, de logique de stop loss, d'optimisation des paramètres, etc. pour améliorer la robustesse et l'adaptabilité.
/*backtest start: 2022-09-21 00:00:00 end: 2023-08-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © faytterro //@version=5 // strategy("Faytterro Estimator Strategy", overlay=true, pyramiding=100) src=input(hlc3,title="source") len=input.int(10,title="faytterro estimator lenght", maxval=500) len2=100 len3=input.float(500,title="minumum enrty-close gap (different direction)") len4=input.float(500,title="minumum entry-entry gap (same direction)") cr(x, y) => z = 0.0 weight = 0.0 for i = 0 to y-1 z:=z + x[i]*((y-1)/2+1-math.abs(i-(y-1)/2)) z/(((y+1)/2)*(y+1)/2) cr= cr(src,2*len-1) width=input.int(10, title="strong entry size", minval=1) dizi = array.new_float(500) // var line=array.new_line() //if barstate.islast for i=0 to len*2 array.set(dizi,i,(i*(i-1)*(cr-2*cr[1]+cr[2])/2+i*(cr[1]-cr[2])+cr[2])) buy = array.get(dizi,len+1+5)>array.get(dizi,len+1+4) and array.get(dizi,len+1+5)<cr[len] sell = array.get(dizi,len+1+5)<array.get(dizi,len+1+4) and array.get(dizi,len+1+5)>cr[len] bb=buy? hlc3 : na ss=sell? hlc3 : na sbuy= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3*3 ssell= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3*3 buy:= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3 //and close>ta.highest(fixnan(ss),len2)-len3*3 sell:= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3 //and close<ta.lowest(fixnan(bb),len2)+len3*3 alertcondition(buy or sell) if (sbuy) strategy.entry("strong buy", strategy.long,width) if (ssell) strategy.entry("strong sell", strategy.short,width) if (buy) strategy.entry("buy", strategy.long) if (sell) strategy.entry("sell", strategy.short)