ダブル利益ストップロス移動平均クロスオーバー定量戦略


作成日: 2023-11-14 16:04:33 最終変更日: 2023-11-14 16:04:33
コピー: 0 クリック数: 682
1
フォロー
1621
フォロワー

ダブル利益ストップロス移動平均クロスオーバー定量戦略

概要

この戦略は,単純な移動平均の交差とダブルストップのテクニックを使用し,リスクを制御し,利益の確率を向上させることを目的としています. この戦略は,中短期の取引に適しており,トレンドの変化時にチャンスを捉えることができます.

戦略原則

この戦略は,EMAとWMAの交差を基に市場動向を判断する.EMAがWMAを走る時,多めに;EMAがWMAを走る時,空っぽに.

ポジションを開くたびに,戦略は2つのストップレベルを設定する.最初のストップレベルは開設価格+20ポイントに固定され,第二のストップレベルは開設価格+40ポイントに固定されます.同時に,開設価格-20ポイントに固定されたストップレベルを設定します.

価格が第1のストップレベルに触れたとき,ポジションの半分を平置する. 残りのポジションは継続して保持し,第2のストップレベルを追求するか,停止される.

取引の3つの結果があります.

  1. 価格がストップ・ロスを引き起こすと,2%の直接損失が発生する.

  2. 価格が最初に最初のストップを誘発し,半オードを平らにして,1%の利益をロックし,その後,損失が止まるまで継続し,最終的に収支均衡,ゼロの利益となる.

  3. 価格が最初のストップを触発した後に継続し,次に第二のストップを触発し,最終的に1%+2%=3%の利益を得ます.

優位分析

この2つのストップのストップ戦略の最大の利点は,リスクを制御し,単一の大きな損失を避けるということです.市場が不利であるとき,ストップは,損失を2%以内で制御することができます.市場が陽気であるとき,2つのストップレベルは,より大きな利益を得ることができます.

単一のストップ・ストップ・損失と比較して,この戦略は3つの結果を持つ:損失,利益,無損失,ストップ・損失の確率を下げます.ストップ・損失であっても,最大損失は2%で制御されます.従来のストップ・ストップ・損失戦略と比較して,この二重ストップ・損失戦略は,DDを大幅に低減し,勝率を向上させます.

操作が簡単であることのもう1つの優位性は, EMAとWMAは広く知られ,容易に理解できる指標である. ストップ・ストップ・ロストの論理は,非常に明確で,簡単に監視できる. これは,戦略を,量化取引の初心者によって容易に受け入れ,実装できるようにする.

リスク分析

この戦略の利点にも関わらず,懸念すべきリスクもあります.

まず,EMAとWMAは平均線指標として,震動の動きを認識する能力が弱い.傾向が明確でないとき,誤った信号が多く発生し,取引が頻繁になる可能性がある.

第二に,固定したストップ・ロスの位は市場の波動と一致しないかもしれない.波動が大きいとき,ストップ・ロスは突破され,保護的役割を果たせないかもしれない.

最後に,この戦略は突発的な事件に対応できないので,ブレイクされるリスクがあります.重大ニュース事件が発生すると,市場が急激に上昇し,止まりの止損ラインを直接突破して大きな損失を招く可能性があります.

最適化の方向

この戦略をさらに改善するには,以下の方法があります.

  1. 入力信号の改善 信号の質を改善するために,EMAやWMAよりも優れた平均線指標やトレンド指標を試すことができます.

  2. 動的にストップ・ロスを調整する.ATR,モバイル・ストップなどにより,ストップ・ロスの位置をリアルタイムで調整して,市場を動的に追随できるようにする.

  3. フィルタリング条件を追加します. 金叉の前に取引量または副指標の確認を追加して,被套を避けることができます. また,重大イベントカレンダーに基づいて取引かどうかを選択できます.

  4. ポジション管理の最適化 資金管理の原則に従って,取引毎の特定のポジションのサイズを最適化できます.

要約する

この戦略は,全体的に,シンプルで実用的なトレンド追跡戦略である.この戦略は,EMAとWMAを使用して取引シグナルを形成し,二重のストップストップテクニックを使用してリスクを制御する.従来の戦略と比較して,利益の確率が高く,リスクが低い優位性を持つ.もちろん,指標の限界とストップストップの設定のリスクにも注意する必要があります.さらに最適化することで,この戦略をより安定して信頼できることができます.

ストラテジーソースコード
/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("FS ATR & PS (MA)", overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Time Period
start_year   = input(title='Start year'   ,defval=2019)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_hour   = input(title='Start hour '  ,defval=0)
start_minute = input(title='Start minute' ,defval=0)
end_time     = input(title='set end time?',defval=false)
end_year     = input(title='end year'     ,defval=2019)
end_month    = input(title='end month'    ,defval=12)
end_day      = input(title='end day'      ,defval=31)
end_hour     = input(title='end hour'     ,defval=23)
end_minute   = input(title='end minute'   ,defval=59)

// MA
ema_period   = input(title='EMA period',defval=10)
wma_period   = input(title='WMA period',defval=20)
ema = ema(close,ema_period)
wma = wma(close,wma_period)

// Entry Condition
longCondition  = 
 crossover(ema,wma) and Buy and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
shortCondition = 
 crossunder(ema,wma) and Sell and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Exit Condition
a = input(20)*10
b = input(40)*10
c = a*syminfo.mintick
d = b*syminfo.mintick

long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + c : long_profit_level1  [1]
long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - c : short_profit_level1 [1]
short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 

// Position Sizing
Risk = input(defval=10, title="Risk per trade%", step=1, minval=0, maxval=100)/100
size  = 1

// Strategy
if longCondition
    strategy.entry("Buy"  , strategy.long, qty=size)
    strategy.exit ("Exit1", stop=long_stop_level, limit=long_profit_level1, qty=size/2)
    strategy.exit ("Exit2", stop=long_stop_level, limit=long_profit_level2)
    
if shortCondition
    strategy.entry("Sell" , strategy.short, qty=size)
    strategy.exit ("Exit3", stop=short_stop_level, limit=short_profit_level1, qty=size/2)
    strategy.exit ("Exit4", stop=short_stop_level, limit=short_profit_level2)
    
// Plot
plot(strategy.position_size <= 0 ? na : long_stop_level    , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level1 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level2 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_even_level    , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_stop_level   , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level1, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level2, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_even_level   , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(ema,color=#00ced1)
plot(wma,color=#dc143c)