トレンドフォローする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以下であれば,ショートになります.
この戦略は,トレンドの変化時の機会を把握するために,トレンドフォローとブレークアウトの両方を組み合わせています.
2つのMAsの二重確認を使って 偽の脱出をフィルターする
トレンドフォローとブレイクを組み合わせると 転換点が決まります
ダイナミックな取引信号の 曲線調整や最適化はありません
シンプルで明快な論理で 分かりやすく修正できます
異なる市場のための長さのパラメータ,倍数
二重MAの交差は,過剰なウィップソー取引と逆転を引き起こす可能性があります.
MA遅延は早期トレンド逆転を見逃す可能性があります.
単一の取引損失を制御するストップ損失メカニズムがない.
パラメータの調節が不適切なら 過剰取引や遅れが起こる
リスク1と2については,MA期間を延長し,引き下げストップ損失を追加します.
リスク3の場合は,パーセントまたはストップ損失のオーダーを追加します.
リスク4のパラメータを異なる市場で動的に調整する.
トレンドを確認するためにMACD,DMIを使用してトレンドフィルターを追加します.
KD,RSI を使って,平均逆転で買い過ぎ/売過ぎの取引をする.
全体のストップ損失を追加します.例えば,ストップを遅らせたり,ストップの割合を減らしたり.
ダイナミックな調整のために位置サイズモジュールを追加します.
パラメータを最適化して タイムフレームに合わせて調整します
自動パラメータ調整のための機械学習を導入します
フィルターを追加して複合戦略を構築します.
複雑なトレンドパターンを検出するために ディープラーニングを使用します
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)