移動平均値に基づくトレンド逆転戦略

作者: リン・ハーンチャオチャン開催日:2024年2月21日17時03分31秒
タグ:

img

概要

この戦略の主な考え方は,長期トレンドの方向に沿って短期的な引き下げを取引することです.特に,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)

もっと