移動平均デュアルトラック取引戦略


作成日: 2024-02-29 14:54:25 最終変更日: 2024-02-29 14:54:25
コピー: 1 クリック数: 668
1
フォロー
1617
フォロワー

移動平均デュアルトラック取引戦略

概要

移動平均の双軌道の取引戦略は,双移動平均の交差信号を追跡するトレンド取引戦略である.この戦略は,指数移動平均 ((EMA) と加重移動平均 ((WMA) を同時に取引シグナル指標として使用する.短期EMAで長期WMAを突破すると,戦略は多めに行われ,短期EMAの下では長期WMAを突破すると,戦略は空っぽになる.

戦略原則

この戦略の取引シグナル源は,EMA周期10の短期EMAとWMA周期20の長期WMAの金叉死叉である.短期EMAの上部に長期WMAを突破すると,下部から上部に逆転し,オフになる.短期EMA下部に長期WMAを突破すると,上部から下部に逆転し,オフになる.

戦略は,最初に取引方向を判断した後,入場価格の下または上1ATR周期の距離にあるストップロスを設定し,同時に2つのストップポジションを設定し,最初のストップは入場価格上または下1ATRの距離にあり,第2のストップは入場価格上または下2ATRの距離にあります. 最初のストップが誘発された後,残りのポジションは第2のストップと移動ストップ方式で平仓します.

移動ストップロジックは,最高価格または最低価格が最初のストップポイントに触れた後に起動し,K線に従ってリアルタイムで更新され,ストップロジーは,利益の最大値と入場価格の間の利益を防止し,利益をロックする.

利点

この戦略は,移動平均のダブルスムーズ消音機能を利用し,市場におけるランダムな波動を効果的に除し,中長線のトレンドシグナルを認識し,被套を避ける.同時に2つの分批のストップを設定することで,戦略の利益区間が増加し,利益が最大化される.移動止損機構は,戦略が利益と損失を減らすことをロックできるようにする.

リスク

移動平均線自体は遅滞性があり,ミスシグナルのリスクが生じることがあります.双移動平均線の交差は,一部の市場では大量に偽信号を生じ,損失をもたらします. 止損設定は戦略の重要な構成要素であり,止損が小さすぎると破損が起こりやすく,止損が大きすぎるとリスクが効果的に制御できない可能性があります.

また,市場が激しく波動する時には,移動止損はあまり良い保護作用をしないかもしれません.

最適化の方向

  1. 異なるパラメータのEMAとWMAをテストして,最適なパラメータの組み合わせを見つけることができます.短線EMAが短すぎるとか,長線WMAが長すぎると,戦略のパフォーマンスを影響する可能性があります.

  2. 異なる品種特性と取引スタイルに応じてATR倍数または固定ポイント数ストップを選択できます.

  3. 部分ポジション移動ストップと全ポジション移動ストップの効果をテストすることができる.

  4. 他の指標を導入することで,フィルタリング信号を判断し,EMAとWMAを補助し,信号品質を向上させることができる.

要約する

移動平均線双軌道取引戦略は,全体的に比較して堅牢であり,トレンド状況で優れたパフォーマンスを発揮します.パラメータ最適化,ストップ・ロスト最適化,信号品質の向上により,戦略の現場パフォーマンスをさらに強化することができます.これは,深入に研究し,現場で投入する価値のある潜在的戦略考え方です.

ストラテジーソースコード
/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gpadihar

//@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=3019)
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 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)
 
sell =
 crossunder(ema,wma) and
 nz(strategy.position_size) == 0 and Sell 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)

// 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=50)
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=50)
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)