動的移動平均を追跡する戦略

作者: リン・ハーンチャオチャン開催日:2023年4月12日15時38分09秒
タグ:

img

概要

この戦略は,ラリー・ウィリアムズが彼の著書"短期取引の長期秘密"で説明したアプローチを使用し,3期間の移動平均を2つ利用し,一つは高値,もう一つは低値を表しています.価格が3期間の低値EMAを下回ると,長い信号があります.価格が3期間の高値EMAを下回ると取引は終了します.

戦略の論理

この戦略の主な論理は,高値と低値の3期間の移動平均を計算することです.特に,最も最近の3バーにおける高値と低値の指数的な移動平均を計算するために,ta.ema関数を用いて,動的サポートとレジスタンスレベルを生成します.価格が低値EMAを下回ると,ダウントレンドを示します.価格が高値EMAを下回ると,上昇トレンドが終了し,ポジションを閉じることを示します.この方法で,戦略は動的に価格変化を追跡し,低値購入と高値売却を達成することができます.

利点分析

この戦略の最大の利点は,そのシンプルさとダイナミズムである.固定期間の高値/低値移動平均を取ることと比較して,この戦略は継続的な短期移動平均を使用し,より敏感かつタイムリーに価格変化を把握することができる. これにより,市場に参入および退場するための取引機会を迅速に特定することができます. また,低計算負荷は,取引の遅延を減らすためのもう一つの利点です.

リスク と 解決策

この戦略の主なリスクは,重要なニュースのような突然の出来事に対して反応が遅いことである.移動平均期間が非常に短いため,急激な価格急上昇が発生した場合,移動平均レベルを調整するのに時間がかかります.これは損失や機会を逃す可能性があります.また,過度に敏感性により間違った取引が起こる可能性があります.これらのリスクを軽減するために,移動平均期間を適切に増加させたり,偽信号を避けるためにフィルターを追加したりすることができます.

オプティマイゼーションの方向性

この戦略の最適化にはまだ大きな余地があります.第一に,シグナルをフィルタリングするために振動器を組み込むことができます.第二に,ストップ・ロスのロジックはリスクを制御するために追加することができます.また,私たちはトレンドの長い期間とレンジング市場の短い期間を使用して,市場の状態に基づいて動向平均パラメータを動的に調整することができます.さらに,マルチタイムフレーム分析,機械学習によるパターン認識など,戦略のパフォーマンスを改善するのに役立ちます.

結論

概要すると,これは非常にシンプルで実用的な戦略であり,短期間の高低移動平均値を使用してトレンドを特定する.その利点は強いダイナミズム,低計算能力,および活発な取引に適した高い応答性である.しかし,極端な出来事と高い誤った信号リスクに対応する欠点もあります.パラメータチューニング,フィルターを追加し,パターンの認識技術によりこれらの問題を解決するための指示があります.戦略の有効性をさらに高めます.


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(
     "Larry Williams 3 Period EMAs strategy",
     overlay=true,
     calc_on_every_tick=true,
     currency=currency.USD
     )

// Time range for backtesting
startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31)
startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12)
startYear = input.int(title="Start Year", defval=2018, minval=1800, maxval=2100)

endDate = input.int(title="End Date", defval=31, minval=1, maxval=31)
endMonth = input.int(title="End Month", defval=12, minval=1, maxval=12)
endYear = input.int(title="End Year", defval=2041, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))

// EMA
period = 3

emaH = ta.ema(high, period)
emaL = ta.ema(low, period)

// PLOT:
// Draw the EMA lines on the chart
plot(series=emaH, color=color.green, linewidth=2)
plot(series=emaL, color=color.red, linewidth=2)

// Conditions
if(inDateRange and close < emaL)
    strategy.entry("Long", strategy.long, comment="Long")
if(close > emaH)
    strategy.close("Long", comment="Close Long")

// Uncomment to enable short entries
//if(inDateRange and close > emaH)                                    
//    strategy.entry("Short", strategy.short, comment="Short")    
//if(close < emaL)
//    strategy.close("Short", comment="Close Short")

もっと