適応型インテリジェントマルチファクターハル漁師戦略の最適化


作成日: 2024-01-16 15:10:06 最終変更日: 2024-01-16 15:10:06
コピー: 1 クリック数: 606
1
フォロー
1617
フォロワー

適応型インテリジェントマルチファクターハル漁師戦略の最適化

概要

この戦略は,ハル移動平均,漁師転換指数,商品通路指数と組み合わせた自己適応型多要素戦略である. 傾向を賢く認識し,パラメータを自動的に調整し,異なる品種と周期に適応することができる.

戦略原則

この戦略の核心的な論理は,漁師が指数に転換した金叉死叉に基づいて入場と出場を判断する.漁師が指数に転換した指数は,移動平均と振動指数の優位性を組み合わせて,トレンドの転換点をより正確に判断することができる.

戦略は,まず,Hull移動平均と漁師の転向指標を計算する.そして,商品通路指数補助判断と組み合わせて,入場条件を形成する.漁師の転向指標がゼロ軸の上から穿越したり,設定パラメータ範囲の外から穿越したりするときは金叉条件として設定され,多信号を形成する.漁師の転向がゼロ軸の上から下から穿越したり,設定パラメータ範囲の外から穿越したりする時は死叉条件として設定され,空白信号を形成する.

出口条件は逆で,金叉は多項をデッドフォーク平仓に;デッドフォークは空券を金叉平仓に.このように指標間の交差を利用してトレンドの転換点を捉える.

優位分析

この戦略の最大の利点は,複数の要因の自律性である.それは,移動平均,震動指標,およびトレンド指標の利点を同時に利用し,下落市場でも良いパフォーマンスを得ることができる.また,パラメータの設定は,品種および周期に応じて調整され,自律性を実現することができる.

さらに,戦略には自動の止損メカニズムが組み込まれている.価格がHull移動平均を再び破ると,自動的に止損が行われる.これは,戦略の損失リスクを大幅に減らす.

リスクと解決策

この戦略の最大のリスクは,指数間の誤差信号の発生である. 価格が区間振動を起こしたとき,指数は,いくつかの不必要な交差を生じることがあります. これは,不必要な入場とストップ損失を引き起こす可能性があります.

解決策は,指標パラメータを適切に調整して,いくつかの小さな信号をフィルターする。または,より多くの補助指標を組み合わせて確認する。例えば,取引量指標を追加して,真の信号を判断する。である.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. 機械学習アルゴリズムを追加し,パラメータの自動最適化を実現する.歴史データ訓練に基づいて,指標パラメータをリアルタイムで調整することができる.

  2. 複数の指標の組み合わせを追加して評価し,多くの意思決定策を採り,意思決定の正確性を向上させる.

  3. 突破確認のメカニズムを追加し,価格の重要なレベルと通路を利用して再確認を行い,誤った操作を避ける.

  4. リスク評価モジュールを追加し,市場状況に応じてポジションのサイズとストップ損失幅を自動的に調整できます.

要約する

この戦略は,全体として非常に良い多因子自己適応の枠組みである.移動平均のトレンド判断,震動指標の超買超売判断,およびトレンド指標の交叉適用を組み合わせて,完全な入場出場機構を形成する.自己適応とインテリジェンス成分をさらに最適化することができれば,非常に商業的に価値のある戦略製品となる.

ストラテジーソースコード
/*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)