SMA 戦略に続く傾向

作者: リン・ハーンチャオチャン,日付: 2023年11月2日 16:58:23
タグ:

img

概要

トレンドフォローするSMA戦略は,市場のトレンド方向を決定し,取引信号を生成するために,単純な移動平均 (SMA) と高速SMAの組み合わせを使用する.価格はSMAとFSMAを超えるとロングになり,価格を下回るとロングになります.価格はSMAとFSMAを下回るとショートになり,価格が上回るとショートになります.この戦略は,動的なトレンド変化を捉える曲線不適合の取引信号を提供します.

戦略の論理

この戦略は50期SMAと高速SMAfsmaを計算するためにSMA関数を使用します. fsmaは,SMA加えてn期間の価格の標準偏差の6倍に基づいて計算されます.

ロングとショートポジションを記録するために,ロングとショートという2つのブル変数を使用します. ロングは,ロングエントリーで価格がSMA,ロングエントリーでFSMAを超えると1に設定され,出口で価格が下を通ると-1に設定されます.ショートはショートポジションの同様の論理に従う.

トレンド変数は,トレンド決定に使用される.価格はfsma以上,上昇傾向はsma以上,価格がfsma以下,下落傾向はsma以下である場合,1に設定される.

ロングとショートの取引シグナルは,リアルタイムのトレンド方向に基づいて生成されます.トレンドがダウンからアップに変化すると,価格がfsma以上であれば,ロングになります.トレンドがダウンからアップに変化すると,価格が sma以下であれば,ショートになります.

この戦略は,トレンドの変化時の機会を把握するために,トレンドフォローとブレークアウトの両方を組み合わせています.

利点

  1. 2つのMAsの二重確認を使って 偽の脱出をフィルターする

  2. トレンドフォローとブレイクを組み合わせると 転換点が決まります

  3. ダイナミックな取引信号の 曲線調整や最適化はありません

  4. シンプルで明快な論理で 分かりやすく修正できます

  5. 異なる市場のための長さのパラメータ,倍数

リスク

  1. 二重MAの交差は,過剰なウィップソー取引と逆転を引き起こす可能性があります.

  2. MA遅延は早期トレンド逆転を見逃す可能性があります.

  3. 単一の取引損失を制御するストップ損失メカニズムがない.

  4. パラメータの調節が不適切なら 過剰取引や遅れが起こる

  5. リスク1と2については,MA期間を延長し,引き下げストップ損失を追加します.

  6. リスク3の場合は,パーセントまたはストップ損失のオーダーを追加します.

  7. リスク4のパラメータを異なる市場で動的に調整する.

強化

  1. トレンドを確認するためにMACD,DMIを使用してトレンドフィルターを追加します.

  2. KD,RSI を使って,平均逆転で買い過ぎ/売過ぎの取引をする.

  3. 全体のストップ損失を追加します.例えば,ストップを遅らせたり,ストップの割合を減らしたり.

  4. ダイナミックな調整のために位置サイズモジュールを追加します.

  5. パラメータを最適化して タイムフレームに合わせて調整します

  6. 自動パラメータ調整のための機械学習を導入します

  7. フィルターを追加して複合戦略を構築します.

  8. 複雑なトレンドパターンを検出するために ディープラーニングを使用します

結論

SMAトレンドフォロー戦略は,シンプルなトレンドトレーディングシステムである.トレンド方向を助け,トレンド逆転を捕捉するために,高速かつ遅いMAを使用する.しかし,ウィップソーやレイグなどのリスクは存在している.将来の強化にはフィルター,ストップ,ダイナミックパラメータなどを追加する.全体として,トレンドフォロー戦略の良いスタートとして機能するが,実用的なアプリケーションのために最適化が必要である.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SMA STRATEGY", shorttitle="SMA TREND", overlay=true, calc_on_order_fills=true)
length = input(title="Length", type=input.integer, defval=50)
src_=input(close, title="Source", type=input.source)
mult=input(6.0, title="Mult")
barc=input(true, title="Use barcolor?")
plots=input(false, title="Show plots?")
tri=input(false, title="Use triangles?")


r(src, n)=>
    s = 0.0
    for i = 0 to n-1
        s := s + ((n-(i*2+1))/2)*src[i]
    x=s/(n*(n+1))
    x

l=sma(low, length)
h=sma(high, length)
lr= l+mult*r(low, length)
hr= h+mult*r(high, length)

trend=0
trend:=src_ > lr and src_ > hr ? 1 : src_ < lr and src_ < hr ? -1 : trend[1]

strategy.close("Long", when=trend==-1)
strategy.close("Short", when=trend==1)
strategy.entry("Long", strategy.long, when=trend==1 and src_>h)
strategy.entry("Short", strategy.short, when=trend==-1 and src_<l)

long=0
short=0
long:= trend==1 and src_>h ? 1 : trend==-1 ? -1 : long[1]
short:= trend==-1 and src_<l ? 1 : trend==1 ? -1 : short[1]

barcolor(barc? (long>0? color.green : short>0? color.red : trend>0? color.orange: trend<0 ? color.white : color.blue) : na)
plotshape(tri? close : na, style= shape.diamond, color= long>0? color.green : short>0? color.red : trend>0? color.orange: trend<0 ? color.white : color.blue, location=location.top)

//shortenter=
a1=plot(plots? l : na, color=color.blue, linewidth=1)
//longenter=
a2=plot(plots? h : na, color=color.blue, linewidth=1)
fill(a1, a2, color=color.blue)
//stopshort=
b1=plot(plots? hr : na, color=color.navy, linewidth=1)
//stoplong=
b2=plot(plots? lr : na, color=color.navy, linewidth=1)
fill(b1, b2, color=color.navy)

もっと