移動平均に基づくリトレースメント取引戦略


作成日: 2024-02-21 17:03:31 最終変更日: 2024-02-21 17:03:31
コピー: 0 クリック数: 648
1
フォロー
1617
フォロワー

移動平均に基づくリトレースメント取引戦略

概要

この戦略の主な考えは,長期トレンドの方向に短期撤退を取引することである.具体的には,200日単調移動平均線を使用して長期トレンドの方向を判断し,10日単調移動平均線を使用して短期トレンドの方向を判断する.価格が200日線より高いときは多頭市場,価格が200日線より低いときは空頭市場である.多頭市場では,価格が10日線まで下がると多頭市場;空頭市場では,価格が10日線まで上がると空頭市場である.

戦略原則

この戦略は,200日単調移動平均線と10日単調移動平均線を用いて市場トレンドを判断する.価格が200日線を上破ると多頭市場に入ると考えられ,価格が200日線を下破ると空頭市場に入ると考えられる.多頭市場において,価格が10日線の近くまで下落すると,短期的な調整が起こったことを示す.このとき,多頭市場において,価格が10日線の近くまで上昇すると,短期的な反発が起こったことを示す.このとき空頭市場において,長期的な空頭トレンドの継続的な下落を追うことを目指す.

具体的には,以下の条件を満たしたとき,多進入場を行います:価格が200日線以上,価格が10日線以下で,以前はポジションを持っていなかった。以下の条件を満たしたとき,平仓退場場内:価格が10日線以上で,以前は多頭ポジションを持っていました。大きな損失を防ぐために,FAILSAFEのストップが設定され,最高点から引き戻し幅が10%を超えると,直接ストップ退場します。

この戦略の取引論理は,主に均線の金叉死叉に基づいていることがわかります.長短平均線の判断後にトレンドの方向に逆戻り買いとトレンド追跡ストップを行うことは,典型的なトレンド追跡戦略に属します.

優位分析

この戦略の最大の利点は,低資金コストでトレンドを追跡し,余剰収益を追求することにある.具体的利点は以下の通りである.

  1. 長期短期平均線の組み合わせを使用して,主子レベルのトレンド方向を判断することで,中長期線のトレンド機会を効果的にロックし,短期市場の誤導を避けることができます.

  2. 短期的な撤収入札は,購入コストを最大限に抑え,利益の余地を増やすことができます.

  3. FAILSAFEの止損メカニズムを設定することで,単一の損失を効果的に制御し,口座の資金を安全に保護できます.

  4. ストップ・アウトを追跡し,中長線トレンドの機会を最大限に活用し,超アルファを獲得することができます.

  5. 完全機械化された取引方法が採用され,主観的な感情の影響が避けられ,戦略がより容易に実行される.

リスク分析

この戦略には以下のリスクがあります.

  1. 追溯データ適合リスク.実際の市場条件は,歴史的データとの差異がある可能性があり,その結果,実盤取引効果が折りたたまれる.

  2. 偽突破リスク. 価格が平均線の近くでしか触れない場合,反転回収の確率が高いため,小額の損失の蓄積が容易である.

  3. トレンド反転リスク. 中長線トレンドの突然の反転は一般的であり,その時にポジションを保持すると大きな損失を引き起こす可能性があります.

対応策は以下の通りです.

  1. サンプル数を増やし,より多くの歴史データを使用して,結果の信頼性を確保するために,健常性検証を行う.

  2. パラメータの最適化,均線システムのパラメータの組み合わせの調整,取引信号の質の確保.

  3. 適正にスローラインを緩め,価格に一定回調の余地を与え,過度に敏感なスローを避ける.

最適化の方向

この戦略は,以下の点でさらに最適化できます.

  1. 取引量フィルタのようなフィルタリング条件を追加することで,偽の突破によって引き起こされる不要な取引を効果的に減らすことができます.

  2. KDJ,MACDなどの他の指標と組み合わせて,指数群を形成することで,取引信号の質を向上させることができます.

  3. 異なるポジション保持時間をテストし,ストップとストップ・ロスの戦略を最適化し,シャープ率をさらに向上させる.

  4. 市場状況に応じて動的にパラメータを調整し,自主的なパラメータ最適化メカニズムを形成し,戦略をより粗略化します.

  5. アルゴリズムの取引モジュールを追加し,機械学習などの方法を使用して取引シグナルを自動的に生成し,人間の介入を減らす.

要約する

この戦略の全体的な考え方は明確で,実行しやすい.低コストで中長線トレンドを追跡することで,安定したアルファを得ることができる.しかし,一定確率でブレイクされるリスクもある.安定性を高めるためにさらに最適化する必要がある.全体的に,この戦略は,トレンド追跡の観点から設計され,さらなる研究と応用に値する.パラメータを適切に調整すれば,良い実況効果が得られるべきである.

ストラテジーソースコード
/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © irfanp056
// @version=5

strategy("Simple Pullback Strategy", 
     overlay=true, 
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=1000, // 100% of balance invested on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.005) // Interactive Brokers rate

// Get user input
i_ma1           = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2           = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose    = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Get indicator values
ma1 = ta.sma(close, i_ma1)
ma2 = ta.sma(close, i_ma2)

// Check filter(s)
f_dateFilter = true

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter
sellCondition   = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])
stopDistance    = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice       = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition   = strategy.position_size > 0 and stopDistance > i_stopPercent

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)