ダブルトレンドブレイク移動平均ストップロス戦略


作成日: 2023-11-06 16:52:11 最終変更日: 2023-11-06 16:52:11
コピー: 0 クリック数: 654
1
フォロー
1617
フォロワー

ダブルトレンドブレイク移動平均ストップロス戦略

概要

この戦略は,双順位指数と移動平均線指数を融合し,双順位指数を使用して市場のトレンド方向を判断し,移動平均線を利用してトレンド確認を行う.これはトレンド追跡戦略の1つである.止損を組み合わせてリスクを制御する.これはより安定した戦略の1つである.

戦略原則

  1. 昨日の閉店価格と指定期間の最高価格のSMA平均を構成する上線と,昨日の閉店価格と指定期間の最低価格のSMA平均を構成する下線を計算する.

  2. 現在の閉盘価格と上線,下線との関係を比較し,現在のトレンド方向を判断する.閉盘価格が上線より高く,多頭として判断する.閉盘価格が下線より低く,空頭として判断する.

  3. 中長線のトレンドの判断基準として,200周期の閉盘価格SMA平均線を計算する.

  4. 多頭判定では,閉盘価格が下方向からSMA平均線を突破すると,買入シグナルを生成する.空頭判定では,閉盘価格が上方向から下方向からSMA平均線を突破すると,売り出せシグナルを生成する.

  5. 多頭ポジションに入った後,閉盘価格を下回ると上線を打つ,平仓信号として;空頭ポジションに入った後,閉盘価格上下線を打つ,平仓信号として。

  6. 固定比率のストップ・ロスを設定し,閉盘価格の下でのストップ・ロスを破ればストップ・ロスの項目をアクティブにする.

戦略的優位性

  1. 双順位指標を用いてトレンドの方向を判断し,トレンドを効果的に識別し,正しい方向への入入りの確率を高めることができる.

  2. 均線が加えられ,部分的なノイズ信号をフィルタリングして,震動状況で誤取引を避ける.

  3. 単一損失のリスクをコントロールするために,ストップ・ロスを採用することで,過大な損失を効果的に回避できます.

  4. 戦略操作は比較的シンプルで,理解しやすい実装で,初心者練習者にも適しています.

戦略リスク

  1. 双順位指標はパラメータ設定に敏感であり,異なる周期パラメータの組み合わせは,結果の差異が大きくなるため,パラメータの最適化には慎重にテストする必要があります.

  2. 平均線が長すぎると取引機会が多く消える.平均線が短すぎると,消音効果が悪くなります.平均線周期パラメータの設定を权衡する必要があります.

  3. ストップポイントがあまりにも広く設定されれば,よいリスク管理ができない.あまりにも狭い場合は,価格の通常の変動によって引き出されやすい.

  4. 戦略はパラメータ最適化に依存し,パラメータが正しく設定されていない場合,トレンドの方向を正しく識別できず,取引決定の誤りにつながる可能性があります.

戦略最適化の方向性

  1. 異なる周期パラメータの組み合わせをテストして,双順位指標がトレンドをより正確に判断できるパラメータを探します.

  2. 異なる周期の平均線指標をテストして,消音効果と信号保持のバランスをとる最適な平均線パラメータを見つけることができる.

  3. 市場変動の程度に応じて自主的に調整するストップ・メカニズムを設計し,市場状況に近いストップ・ペーストを試すことができる.

  4. 戦略の安定性を高めるために,量値確認,複数時間枠の通行など,他の指標を添加することも試すことができます.

  5. 最適化された策略は,パラメータが安定していることを確認するために,ウォークフォワード分析を使用して検証することができます.

要約する

この戦略は双順位指数と移動平均線の優位性を統合し,パラメータの最適化余地のあるトレンド追跡戦略に属している.合理的なパラメータの設定と最適化により,優れた戦略パフォーマンスを得ることができる.しかし,パラメータの過剰最適化のリスクを制御し,パラメータの安定性を保証する注意が必要です.全体的に,この戦略は,戦略探索と学習のケースとして使用するのに適しています.

ストラテジーソースコード
/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@Isaac
//Estrategia vista en ▼▼
//YT: Trading Zone
strategy('SSL Strategy + EMA 200 AND Stop Loss', overlay=true)

ema = ta.ema(close, 200)

stop_loss = input.float(2.00, title='Stop Loss', step=0.10)

period = input(title='Period', defval=10)
len = input(title='Period', defval=10)
smaHigh = ta.sma(high, len)
smaLow = ta.sma(low, len)
Hlv = int(na)
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh


cruceArriba = ta.crossover(sslUp, sslDown)
cruceAbajo = ta.crossunder(sslUp, sslDown)

alcista = (close > ema ) and (cruceArriba) 
bajista = (close < ema) and (cruceAbajo)

var SL = 0.0
//Cerrar compra por cruce
por_cruce = ta.crossunder(sslUp, sslDown)

//Cerrar venta por cruce
por_cruceAB = ta.crossunder(sslDown, sslUp)

//Cerrar compra y venta por stop loss
Stop = SL

comprado = strategy.position_size > 0
vendido = strategy.position_size < 0

UTmpconvertL = strategy.position_avg_price * (1 + 0.1)
UTmpdefineL = (UTmpconvertL > close and strategy.openprofit > 0.1)
UTSPL = UTmpdefineL

SPL = UTSPL

///////////////////////////////////////////////////////////////////////

UTmpconvertLS = strategy.position_avg_price * (1 + 0.1)
UTmpdefineLS = (UTmpconvertLS > close and strategy.openprofit > 0.1)
UTSPLS = UTmpdefineLS

SPLS = UTSPLS

////////////////////////////////////////////////////////////////////////

if not comprado and not vendido and alcista
    cantidad = (strategy.equity / close)
    strategy.entry('Compra', strategy.long, qty=cantidad, comment="Long")
    SL := sslDown


if comprado and not vendido and por_cruce and SPL
    strategy.close("Compra", comment="Exit Long")
    SL := 0
    
if comprado and not vendido and Stop
    strategy.exit('Compra', stop=Stop, comment="SL")
    SL := 0

///////////////////////////////////////////////////////////////////

if not comprado and not vendido and bajista
    cantidad = (strategy.equity / close)
    strategy.entry('Venta', strategy.short, qty=cantidad, comment="Short")
    SL := sslDown

if not comprado and vendido and por_cruceAB and SPLS
    strategy.close("Venta", comment="Exit Short")
    SL := 0
    
if not comprado and vendido and Stop
    strategy.exit('Venta', stop=Stop, comment="SLS")
    SL := 0



plot(Stop > 0 ? Stop : na, style=plot.style_circles, color=color.new(color.yellow,0))
plot(ema)
plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))