動的ドンチャンチャネルと単純移動平均を組み合わせた定量戦略

SMA
作成日: 2024-06-17 17:29:48 最終変更日: 2024-06-17 17:29:48
コピー: 4 クリック数: 345
1
フォロー
1166
フォロワー

動的ドンチャンチャネルと単純移動平均を組み合わせた定量戦略

概要

この戦略は,唐津通路とSMPの2つの技術指標を組み合わせている.価格が唐津通路の下軌道に突破し,SMPより高いときに多ポジションを開く,価格が唐津通路上軌道に突破し,SMPより低いときに空白ポジションを開く.多ポジションは価格が唐津通路上軌道に触れたときに平仓,空頭ポジションは価格が唐津通路下軌道に触れたときに平仓する.この戦略は,傾向が強い市場に適用される.

戦略原則

  1. 唐通路の上下軌を計算する。唐通路の上軌は過去n周期の最高価格,下軌は過去n周期の最低価格である。
  2. 単純移動平均を計算する. シンプル移動平均は,過去m周期の閉店価格の算術平均である.
  3. 多頭ポジション開設:価格が唐通路下線より低く,閉盘価格が単純移動平均より高いとき,多頭ポジション開設.
  4. 空頭開設:価格が唐通路上線より高く,閉盘価格が単純移動平均より低いとき,空頭開設.
  5. 多頭平仓:価格が唐通路の上線に触れたとき,平多仓.
  6. 空頭平仓:価格が唐通路の下線に触れたとき,空頭平仓.

戦略的優位性

  1. 傾向と波動の2つの市場要素を組み合わせる. シンプルな移動平均は傾向を捕捉し,唐津通路は波動を捕捉し,トレンドの状況で撤退の機会を把握することができます.
  2. ストップ条件が明記され,利益を間に合うようにロックするのに役立ちます. 多頭と空頭は,価格が唐通路の上線と下線に触れたときに平仓し,トレンドが逆転する前に利益のポジションを間に合うように閉じることができます.
  3. パラメータが少なく,最適化の難しさは小さい.この戦略は,唐津通路周期,偏移量,および単純な移動平均周期の3つのパラメータのみで,最適化を容易にする.

戦略リスク

  1. 頻繁に取引する。この戦略は,空位開設頻度が高いため,取引コストが高い市場では収益を引っ張る。ポジション開設条件を適度に緩和するか,時間枠を増やすことで取引回数を減らすことができる。
  2. 震動市場が不良である.傾向が不明であるとき,この戦略はより大きな損失を被る可能性がある.統計的な変動率指標によって震動市場を識別し,戦略を一時停止することができる.
  3. パラメータの安定性が不十分である.異なる基準と周期で,最適のパラメータは大きく異なる可能性があり,パラメータの安定性は不十分であり,実盤のパフォーマンスは反測に及ばない可能性がある.十分なサンプル外テストと感度分析を行い,パラメータが安定していることを確認する必要がある.

戦略最適化の方向性

  1. 他の指標と組み合わせた選択可能な開設条件を追加します.例えば,DMIのADXが特定の値より大きいことを要求して開設を許可します.または,RSIが超売り区域から離れる前に多額のポジションを開設し,開設勝利率を上げます.
  2. 動的ストップラインを使用し,固定唐津通道ラインストップを代替して,利益追跡機能を実現する.例えば,多頭は価格が唐津通道上線に触れた後に,ATRストップラインまたはSARストップラインで平仓する.
  3. 変動率レベルに応じて唐通道周期を動的に調整し,高変動率市場の状態では唐通道周期を短縮し,低変動率市場の状態では長期周期を延長する.これは,異なる市場に適応するのに役立ちます.

要約する

ダイナミック・ドンチアン・チャネルとシンプル・ムービング・アベアンの組み合わせ戦略は,簡単に使いやすい量化取引戦略の枠組みである.それは,トレンド・トラッキングとボリュレント・ブレイクという2つの角度から平仓の論理を構築し,強いトレンド性のある品種に適している.しかし,この戦略は,頻繁に変動する市場ではうまく機能せず,パラメータの安定性が一般的である.補助的なポジション開設条件,ダイナミック・ストップとパラメータ自数適応メカニズムを導入することによって,この戦略の適応性と強さを向上させることができる.全体的に,この戦略は,基礎戦略の枠組みとして,この基礎をさらに改修して,より高度な量化戦略を構築することができる.

ストラテジーソースコード
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("FBK Donchian Channel Strategy", overlay=true)

// Inputs
donchian_period = input.int(20, title="Donchian Channel Period")
donchian_offset = input.int(1, title="Donchian Channel Offset")
sma_period = input.int(200, title="SMA Period")
start_date = input(timestamp("2023-01-01 00:00 +0000"), title="Start Date")
end_date = input(timestamp("2023-12-31 23:59 +0000"), title="End Date")
trade_type = input.string("Both", title="Trade Type", options=["Buy Only", "Sell Only", "Both"])

// Calculate indicators
donchian_upper = ta.highest(high, donchian_period)[donchian_offset]
donchian_lower = ta.lowest(low, donchian_period)[donchian_offset]
sma = ta.sma(close, sma_period)

// Plot indicators
plot(donchian_upper, color=color.red, title="Donchian Upper")
plot(donchian_lower, color=color.green, title="Donchian Lower")
plot(sma, color=color.blue, title="SMA")

// Helper function to check if within testing period
is_in_testing_period() => true

// Entry conditions
long_condition = low <= donchian_lower and close > sma
short_condition = high >= donchian_upper and close < sma

// Exit conditions
exit_long_condition = high >= donchian_upper
exit_short_condition = low <= donchian_lower

// Open long position
if (is_in_testing_period() and (trade_type == "Buy Only" or trade_type == "Both") and long_condition)
    strategy.entry("Long", strategy.long)

// Close long position
if (is_in_testing_period() and exit_long_condition)
    strategy.close("Long")

// Open short position
if (is_in_testing_period() and (trade_type == "Sell Only" or trade_type == "Both") and short_condition)
    strategy.entry("Short", strategy.short)

// Close short position
if (is_in_testing_period() and exit_short_condition)
    strategy.close("Short")

// Close all positions at the end of the testing period
if not is_in_testing_period()
    strategy.close_all()