二重取利益移動平均クロスオーバー量的な戦略

作者: リン・ハーンチャオチャン開催日:2023年11月14日 16:04:33
タグ:

img

概要

この戦略は,リスクを制御し収益性を高めるため,単純な移動平均クロスオーバーとダブルテイク・プロフィートテクニックを使用します. 中期取引およびトレンド変化時の機会を把握するのに適しています.

戦略の論理

この戦略は,EMAとWMAのクロスオーバーに基づいて市場動向を決定する.EMAがWMAを超えると長くなり,EMAがWMAを下回ると短くなります.

入場時に,2つの取利益レベルが設定されます.最初の取利益は入場価格+20ピップで固定され,第2の取利益は入場価格+40ピップで固定されます.一方,ストップロスは入場価格-20ピップで設定されます.

価格が第1の利得を取ると ポジションの半分を閉じます 残りのポジションは第2の利得を取るか 停止するまで 走ります

各取引には3つの結果があります

  1. 価格がストップ・ロスを打つと 2%の損失を直接受けます

  2. 価格がヒットして利益を得て 半分のポジションを閉じて 1%の利益を得て 停止するまで続きます

  3. 価格が上昇し 利潤が上昇し 1% + 2% = 3%の総利潤になります

利点分析

このダブルテイク・プロフィート戦略の最大の利点は,リスクを制御し,大きなシングル損失を回避することである.ストップ・ロスは,市場が逆行するときに最大損失を2%以内に制限する.トレンドが予想通りになると,2つのテイク・プロフィートはより大きな利益をもたらす.

シングルテイク・プロフィート/ストップ・ロストと比較して,この戦略は3つの結果 - 損失,勝利またはブレイク・イブがあります.ストップ・ロストの確率を減らす.停止しても最大損失は2%に制限されています.従来の戦略と比較して,ダブルテイク・プロフィートメカニズムはDDを大幅に削減し,勝利率を改善します.

EMAとWMAは,よく知られた指標であり,理解が容易である.取利益/ストップ損失の論理は,監視が簡単である.これらは,戦略を初心者によって簡単に採用できるようにする.

リスク分析

この戦略の利点はありますが リスクも考慮する必要があります

第一に,移動平均指標として,EMAとWMAは,変動市場を特定する能力が比較的弱い.傾向が不明である場合,誤った信号があまりにも多く発生し,過剰取引につながる可能性があります.

2つ目は,固定取利益/ストップ損失レベルが市場の変動に適応できない可能性があり,高い変動時に簡単に突入され,効果がなくなる可能性があります.

最後に,この戦略は予想外の出来事に反応できず,罠にかかりかねない.主要なニュースは,利益/損失レベルを直接侵害し,大きな損失を引き起こす巨大な価格ギャップを引き起こす可能性があります.

オプティマイゼーションの方向性

戦略をさらに最適化するには,いくつかの側面があります.

  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)






もっと