ゆっくりと終値する移動平均取引戦略


作成日: 2023-12-22 13:18:34 最終変更日: 2023-12-22 13:18:34
コピー: 0 クリック数: 687
1
フォロー
1623
フォロワー

ゆっくりと終値する移動平均取引戦略

概要

この戦略は,遅いHeiken Ashiと指数移動平均を使用してトレンドを識別し,トレンドの状況で長短二方向取引を行う. 100日EMAを超えると高騰し,100日EMAを下回ると空白し,特定の条件下で平仓する.

戦略原則

この戦略は以下の指標の組み合わせを使用しています.

  1. ゆっくりとしたHeiken Ashi:前K線の平均値を用いて描く特別なタイプのK線図で,市場騒音をフィルタリングしてトレンドを識別できます.これはカマフィルタを自律的に適応することによって実現されます.

  2. 指数移動平均:価格に指数平滑を施した後の平均線.ここには5日から100日以上の周期のEMAが含まれている.

取引の論理は以下の通りです.

  1. 価格が100日EMAを超えると,多めに;価格が100日EMAを超えると,空っぽに.

  2. 平仓条件:Heiken Ashiの開札価格が閉札価格を交差するとき ((潜在的反転信号),対応する多頭ポジションは逆交差時に平らになり,空頭ポジションは同等である。

優位分析

この戦略は,トレンド判断と逆転シグナルを組み合わせて,トレンドの動きの中でより大きな価格変動を捕捉し,逆転シグナルによって損失拡大を避けることができます.

  1. EMAは,局所的な振動に誤って導かれないように,全局的なトレンドの方向性を判断します.

  2. Heiken Ashiの交差信号は,逆転の機会を早期に検知する.

  3. カマフィルターに適応して偽信号の確率を下げます.

リスク分析

  1. EMAを大幅に破ると,損失が拡大する可能性があります. 持仓期間を適切に短縮したり,ストップ損失を設定したりできます.

  2. 逆転信号が遅れている可能性があり,リスクを制御するためにポジションの規模を減らすことを検討する.

  3. EMAパラメータの設定が不適切であることも戦略のパフォーマンスに影響し,異なる品種と市場環境に応じて調整されるべきである.

最適化の方向

  1. 複数の指標を組み合わせて判断し,EMAとハイケン・アシの両方が誤信号を発する確率を避ける.例えばMACD,ブリン帯などを加える.

  2. 市場変動率に応じてEMAパラメータをリアルタイムで最適化でき,高変動時にストップロスを締め,低変動時にスライドポイントを緩めることができる.

  3. 機械学習アルゴリズムに基づいて,各パラメータの設定とフィルタリングルールを自動的に最適化して,戦略をより堅牢にします.

要約する

この戦略は全体的に比較的シンプルで実用的で,同時にトレンドと逆転を組み合わせて,パラメータ最適化とリスク管理が置かれた場合,まだ良い収益の余地があります.その後,最適化方向から戦略を市場環境の変化により適応させることができます.

ストラテジーソースコード
/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-19 10:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("NoScoobies Slow Heiken Ashi and Exponential Moving average Strategy 2.2", overlay=true)

//SHA
p=input(6,title='Period')
fastend=input(0.666,step=0.001)
slowend=input(0.0645,step=0.0001)
kama(close,amaLength)=>
    diff=abs(close[0]-close[1])
    signal=abs(close-close[amaLength])
    noise=sum(diff, amaLength)
    efratio=noise!=0 ? signal/noise : 1
    smooth=pow(efratio*(fastend-slowend)+slowend,2)
    kama=nz(kama[1], close)+smooth*(close-nz(kama[1], close))
    kama
hakamaper=1
Om=sma(open,p)
Hm=sma(high,p)
Lm=sma(low,p)
Cm=sma(close,p)
vClose=(Om+Hm+Lm+Cm)/4
vOpen= kama(vClose[1],hakamaper)
vHigh= max(Hm,max(vClose, vOpen))
vLow=  min(Lm,min(vClose, vOpen))
asize=vOpen-vClose
size=abs(asize)

//MMAR
exponential = input(true, title="Exponential MA")
src = close
ma05 = exponential ? ema(src, 05) : sma(src, 05)
ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma15 = exponential ? ema(src, 15) : sma(src, 15)
ma20 = exponential ? ema(src, 20) : sma(src, 20)
ma25 = exponential ? ema(src, 25) : sma(src, 25)
ma30 = exponential ? ema(src, 30) : sma(src, 30)
ma35 = exponential ? ema(src, 35) : sma(src, 35)
ma40 = exponential ? ema(src, 40) : sma(src, 40)
ma45 = exponential ? ema(src, 45) : sma(src, 45)
ma50 = exponential ? ema(src, 50) : sma(src, 50)
ma55 = exponential ? ema(src, 55) : sma(src, 55)
ma60 = exponential ? ema(src, 60) : sma(src, 60)
ma65 = exponential ? ema(src, 65) : sma(src, 65)
ma70 = exponential ? ema(src, 70) : sma(src, 70)
ma75 = exponential ? ema(src, 75) : sma(src, 75)
ma80 = exponential ? ema(src, 80) : sma(src, 80)
ma85 = exponential ? ema(src, 85) : sma(src, 85)
ma90 = exponential ? ema(src, 90) : sma(src, 90)
ma95 = exponential ? ema(src, 95) : sma(src, 95)
ma100 = exponential ? ema(src, 100) : sma(src, 100)

longcondition=src>ma100
shortcondition=src<ma100
long=longcondition and size<size[1] and (vOpen<vClose or vOpen>vClose)
short=shortcondition and size<size[1] and (vOpen>vClose or vOpen<vClose)
close_long=longcondition and crossunder(open, vClose)
close_short=shortcondition and crossover(open, vClose)
_close=close_long[2] or close_short[2]

if long
    strategy.entry("LONG", strategy.long)
    strategy.close("LONG", when = _close)
if short
    strategy.entry("SHORT", strategy.short)
    strategy.close("SHORT", when = _close)