Optimisation de la stratégie adaptative intelligente multifactorielle du pêcheur Hull


Date de création: 2024-01-16 15:10:06 Dernière modification: 2024-01-16 15:10:06
Copier: 1 Nombre de clics: 606
1
Suivre
1617
Abonnés

Optimisation de la stratégie adaptative intelligente multifactorielle du pêcheur Hull

Aperçu

La stratégie est une stratégie multifonctionnelle auto-adaptative combinant la moyenne mobile de Hull, l’indicateur de dérivation des pêcheurs et l’indice des voies de marchandises. Elle est capable de reconnaître intelligemment les tendances et d’ajuster automatiquement les paramètres pour s’adapter à différentes variétés et périodes.

Principe de stratégie

La logique de base de la stratégie est basée sur la conversion de l’indicateur de la fourche dorée du pêcheur pour juger des entrées et des sorties. L’indicateur de la conversion du pêcheur combine les avantages de la moyenne mobile et de l’indicateur de choc pour déterminer plus précisément le point de basculement de la tendance.

La stratégie consiste à calculer d’abord la moyenne mobile de la coque et l’indicateur de déviation des pêcheurs. Ensuite, elle est combinée avec le jugement auxiliaire de l’indicateur de passage des marchandises pour former les conditions d’entrée.

Les conditions de sortie sont inversées: les fourches font des lots avec les fourches mortes; les fourches mortes font des lots avec les fourches dorées. Ainsi, les croisements entre les indicateurs sont utilisés pour capturer les virages de tendance.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans l’adaptation multifactorielle. Elle utilise à la fois les avantages des moyennes mobiles, des indicateurs de choc et des indicateurs de tendance, ce qui lui permet de bien performer dans les marchés à la baisse. Les paramètres peuvent être ajustés en fonction de la variété et de la période, ce qui permet une adaptation.

De plus, la stratégie est dotée d’un mécanisme d’arrêt automatique des pertes. Lorsque le prix revient à la moyenne mobile de Hull, il est automatiquement arrêté. Cela réduit considérablement le risque de perte de la stratégie.

Risques et solutions

Le plus grand risque de cette stratégie réside dans la production de signaux d’erreur entre les indicateurs. Lorsque les prix sont en train de se déplacer dans des zones, les indicateurs peuvent produire des croisements inutiles. Cela peut entraîner des entrées et des arrêts inutiles.

La solution consiste à ajuster les paramètres de l’indicateur de manière appropriée, en filtrant certains petits signaux. Ou en combinant plus d’indicateurs auxiliaires pour confirmer. Par exemple, en ajoutant un indicateur de trafic pour juger du vrai signal.

Direction d’optimisation

Cette stratégie peut être optimisée dans les directions suivantes:

  1. L’ajout d’algorithmes d’apprentissage automatique permet l’optimisation automatique des paramètres. Les paramètres de l’indicateur peuvent être ajustés en temps réel en fonction de l’entraînement des données historiques.

  2. L’augmentation du nombre de combinaisons d’indicateurs pour les évaluations, la prise de décisions stratégiques et l’amélioration de la précision des décisions.

  3. Augmentation des mécanismes de confirmation de rupture, en utilisant des niveaux et des canaux importants pour la reconfirmation des prix, afin d’éviter les erreurs.

  4. Ajout d’un module d’évaluation des risques permettant d’ajuster automatiquement la taille de la position et le stop loss en fonction des conditions du marché.

Résumer

La stratégie est globalement un très bon cadre d’adaptation multifactorielle. Elle est combinée avec la détermination de la tendance des moyennes mobiles, la détermination de l’achat et de la vente excessive des indicateurs de choc et l’application croisée des indicateurs de tendance, formant un ensemble complet de mécanismes d’entrée et de sortie. Si elle peut être optimisée davantage, en ajoutant des composants d’adaptation et d’intelligence, elle deviendra un produit stratégique extrêmement précieux pour le commerce.

Code source de la stratégie
/*backtest
start: 2023-01-09 00:00:00
end: 2024-01-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is free to copy/paste/use. no permission required. just do it!
// © @SeaSide420 
//@version=4
strategy(title="Hull Fisher",currency="USD",default_qty_type=strategy.percent_of_equity,default_qty_value=100,commission_type=strategy.commission.percent,commission_value=0.25)

//=================================== Inputs =========================================================
period =input(title="HullMA Length", type=input.integer, defval=14, minval=2)
length =input(9, minval=1, title="Signal Length")
line1 = input(5, minval=2, title="Top Line")
line5 = input(-5, maxval=-2, title="Bottom Line")
price = input(open, type=input.source, title="Price data")
entry1 =input(true,type=input.bool, title="Open when HullFisher crossover outside Lines")
entry2 =input(true,type=input.bool, title="Open when HullFisher past zero")
useHMA =input(true,type=input.bool, title="Include Hull_moving_average")
useCCI =input(true,type=input.bool, title="Include Commodity_channel_index")
fishclose=input(true,type=input.bool, title="Close order when Fisher crossover")
HMAclose=input(true,type=input.bool, title="Close order when Hull crossover")

//================================ Calculations ======================================================
HMA = hma(price,period)
HMA2 = HMA[1]
high_ = highest(HMA, length)
low_ = lowest(HMA, length)
round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val
value = 0.0
value := round_(.66 * ((HMA - low_) / max(high_ - low_, .001) - .5) + .67 * nz(value[1]))
value1 = 0.0
value1 := .5 * log((1 + value) / max(1 - value, .001)) + .5 * nz(value1[1])
value2 = value1[1]
CCI1 = cci(price,period)
CCI2 = CCI1[1]
line2 = line1/2
line4 = line5/2

//================================ Draw Plots =======================================================
colorchange1 =CCI1>CCI2?color.lime:color.red
colorchange2 =value1>value2?color.lime:color.red
a =plot(line1,style=plot.style_line,color=color.red,transp=50,linewidth=2,title="Top Line")
b =plot(line2,style=plot.style_line,color=color.red,transp=50,linewidth=2,title="Upper Line")
c =plot(0,style=plot.style_line,color=color.black,transp=50,linewidth=2,title="Middle Line")
d =plot(line4,style=plot.style_line,color=color.lime,transp=50,linewidth=2,title="Lower Line")
e =plot(line5,style=plot.style_line,color=color.lime,transp=50,linewidth=2,title="Bottom Line")
f =plot(value1, color=color.black,transp=50,linewidth=2, title="Value 1")
g =plot(value2, color=color.black,transp=50,linewidth=2, title="Value 2")
h =plot(CCI1/50,style=plot.style_area, color=colorchange1,transp=50,linewidth=2, title="CCI")
fill(f,g,color=colorchange2,transp=20,title="Color fill")
plot(cross(value1, value2) ? value1 : na, style=plot.style_circles, color=color.black, linewidth=10)
plot(cross(value1, value2) ? value1 : na, style=plot.style_circles, color=color.white, linewidth=8)
plot(cross(value1, value2) ? value1 : na, style=plot.style_circles, color=colorchange2, linewidth=5)

//============================= Entry conditions ====================================================
// Outside Lines crossover or zero lines crossover
LongCondition1 = value1>value2 and value1<line5 and entry1 and not useCCI and not useHMA
ShortCondition1 = value1<value2 and value1>line1 and entry1 and not useCCI and not useHMA
LongCondition2 = value1>value2 and value1>0 and entry2 and not useCCI and not useHMA
ShortCondition2 = value1<value2 and value1<0 and entry2 and not useCCI and not useHMA

// Use CCI
LongCondition3 = value1>value2 and value1<line5 and CCI1>CCI2 and entry1 and useCCI and not useHMA
ShortCondition3 = value1<value2 and value1>line1 and CCI1<CCI2 and entry1 and useCCI and not useHMA
LongCondition4 = value1>value2 and value1>0 and CCI1>CCI2 and entry2 and useCCI and not useHMA
ShortCondition4 = value1<value2 and value1<0 and CCI1<CCI2 and entry2 and useCCI and not useHMA

// Use HMA
LongCondition5 = value1>value2 and value1<line5 and CCI1>CCI2 and HMA>HMA2 and entry1 and not useCCI and useHMA
ShortCondition5 = value1<value2 and value1>line1 and CCI1<CCI2 and HMA<HMA2 and entry1 and not useCCI and useHMA
LongCondition6 = value1>value2 and value1>0 and CCI1>CCI2 and HMA>HMA2 and entry2 and not useCCI and useHMA
ShortCondition6 = value1<value2 and value1<0 and CCI1<CCI2 and HMA<HMA2 and entry2 and not useCCI and useHMA

//Use CCI & HMA
LongCondition7 = value1>value2 and value1<line5 and CCI1>CCI2 and HMA>HMA2 and entry1 and useCCI and useHMA
ShortCondition7 = value1<value2 and value1>line1 and CCI1<CCI2 and HMA<HMA2 and entry1 and useCCI and useHMA
LongCondition8 = value1>value2 and value1>0 and CCI1>CCI2 and HMA>HMA2 and entry2 and useCCI and useHMA
ShortCondition8 = value1<value2 and value1<0 and CCI1<CCI2 and HMA<HMA2 and entry2 and useCCI and useHMA

//========================= Exit & Entry excecution =================================================
if HMAclose and fishclose and value1<value2 and HMA<HMA2
    strategy.close("BUY")
if HMAclose and fishclose and value1>value2 and HMA>HMA2
    strategy.close("SELL")
if HMAclose and HMA<HMA2
    strategy.close("BUY")
if HMAclose and HMA>HMA2
    strategy.close("SELL")
if fishclose and value1<value2
    strategy.close("BUY")
if fishclose and value1>value2
    strategy.close("SELL")    
if LongCondition1 or LongCondition2 or LongCondition3 or LongCondition4 or LongCondition5 or LongCondition6 or LongCondition7 or LongCondition8
    strategy.entry("BUY", strategy.long)
if ShortCondition1 or ShortCondition2 or ShortCondition3 or ShortCondition4 or ShortCondition5 or ShortCondition6 or ShortCondition7 or ShortCondition8
    strategy.entry("SELL", strategy.short)