ダブルストッププロフィットとダブルストップロスの移動ストップロス定量戦略


作成日: 2024-01-19 15:07:04 最終変更日: 2024-01-19 15:07:04
コピー: 3 クリック数: 598
1
フォロー
1617
フォロワー

ダブルストッププロフィットとダブルストップロスの移動ストップロス定量戦略

概要

この戦略は,二重のストップ,二重のストップ,移動のストップに基づくビットコインの定量取引戦略である.この戦略は,EMAとWMAの交差を入場信号として,二重のストップの二重のストップのリスク管理方法を採用し,最初のストップポイントに達した後に,移動のストップの部分利益を保証し,さらなる利潤を追求する.

戦略原則

EMAが上からWMAを穿うとき,多入場;EMAが上から下からWMAを穿うとき,空入場.

停止点については,2つの停止点が設定され,最初の停止点は入口点より20点,第二の停止点は入口点より40点に設定されている.

止損方面,同様に2つの止損点を設定し,最初の止損点は入場点の下20点に設定し,第二の止損点は入場点そのものに設定する.

価格が最初に最初のストップポイントに触れたとき,50%のポジションを平らにして,ストップポイントをエントリーポイントに移動し,第2のストップポイントの利回りを追求し続けます.

この戦略は,次の3つの結果をもたらします.

  1. 価格が最初にストップポイントに達し,本金2%の損失を被る.
  2. 価格が最初に最初のストップポイントに触れて1%の利益を上げ,次に2番目のストップポイントに触れて1%の利益を上げます.
  3. 価格が最初に最初のストップポイントに触れて,1%の利益を得,その後,第二のストップポイントに触れて,最終的に3%の利益を得ます.

優位分析

この戦略の最大の利点は,リスク管理システムにある.双ストップ・ダブルストロップを設定することで,一部利益を得た後に,移動ストップを使用して利益をロックし,より大きな利益を追求し続けることができる.これは,収益性を大幅に向上させることができる.

また,この戦略は,単一の取引の結果を3つの状況に分割し,単一の損失の確率を低くし,全体的な収益をより平らにする.通常の戦略は,2%の損失を止めたり,2%以上の利益を得るために2つの結果しかありません.この戦略には,3つの結果があり,それぞれ,2%の損失,1%の利益および3%の利益があります.これは,尾部リスクをよりよく制御します.

リスク分析

この戦略のリスクは,主にストップポイントの設定によるものです.ストップ距離が過度に緩やかになり,単一の損失が過大になる可能性があります.ストップ距離が過度に狭い場合は,市場の騒音に打たれやすくなります.これは,異なる品種の特性と変動率に応じて適切なストップ距離を設定する必要があります.

もう一つのリスクは,最初のストップポイントの後にまだポジションを保有している部分に損失のリスクがあることです. 損失が最初のストップポイントの利益を超えると,利益の一部または全部を抵消します. これは,利益をロックするために移動ストップを厳格に実行する必要があります.

最適化の方向

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

  1. 異なるパラメータの組み合わせをテストし,最適のパラメータ設定を探します.例えば,15点,25点のストップ・ストップダスト距離をテストできます.

  2. KDJ,MACDなどの他の指標の組み合わせを試して入場を決定する.

  3. 最初のストップポイント平仓のポジション比率を最適化して,50%適当か30%または70%優れている.

  4. モバイルストップのトラッキング速度設定をテストし,利潤を保証する前提で損失を最小限に抑えるようにしてください.

要約する

この戦略は,全体的に非常に安定しており,双ストップ,双ストップ,移動ストップにより,利益レベルを大幅に向上させ,尾部リスクを軽減できます.最適化の余地も比較的大きく,パラメータ調整と指標の組み合わせによってよりよい効果を得ることができます.全体的に,この戦略は,高い安定した収益を求める投資家に適しています.

ストラテジーソースコード
/*backtest
start: 2024-01-11 00:00:00
end: 2024-01-18 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true)

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

// Date Range
start_year    = input(title='Start year'   ,defval=2020)
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
buy =
 crossover(ema,wma) and
 nz(strategy.position_size) == 0 and Buy
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell

// Pips
pip = input(20)*10*syminfo.mintick

// Trading parameters //
var bool  LS  = na
var bool  SS  = na
var float EP  = na
var float TVL = na
var float TVS = na
var float TSL = na
var float TSS = na
var float TP1 = na
var float TP2 = na
var float SL1 = na
var float SL2 = na

if buy or sell and strategy.position_size == 0
    EP  := close
    SL1 := EP - pip     * (sell?-1:1)
    SL2 := EP - pip     * (sell?-1:1)
    TP1 := EP + pip     * (sell?-1:1)
    TP2 := EP + pip * 2 * (sell?-1:1) 
   
// current trade direction    
LS := buy  or strategy.position_size > 0
SS := sell or strategy.position_size < 0

// adjust trade parameters and trailing stop calculations
TVL := max(TP1,open) - pip[1]
TVS := min(TP1,open) + pip[1]
TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL 
TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS

if LS and high > TP1
    if open <= TP1
        SL2:=min(EP,TSL)
    
if SS and low < TP1
    if open >= TP1
        SL2:=max(EP,TSS)

// Closing conditions
close_long  = LS and open < SL2
close_short = SS and open > SL2

// Buy
strategy.entry("buy"  , strategy.long, when=buy and not SS)
strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=1)
strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2)

// Sell
strategy.entry("sell" , strategy.short, when=sell and not LS)
strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=1)
strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2)

// Plots
a=plot(strategy.position_size >  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr)
b=plot(strategy.position_size <  0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) 
c=plot(strategy.position_size >  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
d=plot(strategy.position_size <  0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) 
e=plot(strategy.position_size >  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
f=plot(strategy.position_size <  0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) 
g=plot(strategy.position_size >= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 
h=plot(strategy.position_size <= 0 ? na  : EP, color=#ffffff, style=plot.style_linebr) 

plot(ema,title="ema",color=#fff176)
plot(wma,title="wma",color=#00ced1)