
この戦略は,双指数平均線交差量化取引戦略と呼ばれています. この戦略は,双指数移動平均 (Exponential Moving Average, EMA) を計算し,交差の買入点判断を行い,量化取引のポジション開設原理と組み合わせて,自動取引を実現します.
この戦略の核心論理は,二指数移動平均に基づいている.指標1は短期20日EMA,指標2は長期50日EMAである.短期EMAが下から長期EMAを穿越すると買入シグナルが生じ,短期EMAが上から下から長期EMAを穿越すると売出シグナルが生じます.こうして,EMAの異なるパラメータの交差を活用して,市場での買出点を判断する.
また,戦略は,トレンド判断と取引信号を生成するためにVortex定量指数を使用する.Vortex指数は,最高価格と昨日の閉店価格,最低価格と昨日の閉店価格の差を計算して,上昇と低下の方向を判断する.パラメータ周期は1日と3日である.Vortex指数と組み合わせると,一部の非主要トレンドをフィルターできるEMA信号.
取引シグナルが生じると,戦略の内蔵の資金管理モジュールに従って,利益・損失比率原理と組み合わせてリスク管理を行う.戦略は,利益をロックするために,リスクを制御するために,ストップ・ロスとストップ・ストップを設定することを許可する.
改善する方向:
この戦略は,全体として,典型的な双EMA交差戦略であり,EMAの異なるパラメータの間の交差を利用して市場での買入や売却のタイミングを判断する.中短線取引戦略の類である.この戦略の最大の利点は,定量指標を利用して信号フィルタリングを行い,自動化された取引システムによって無人值守を実現し,同時にリスク管理のための内置のストップ・ロス・ストップを実現し,比較的安定したパフォーマンスを発揮する.後期には,パラメータ最適化およびより多くの補助指標を導入することで,戦略の効果をさらに向上させることができる.
/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © smottybugger
//@version= 5
strategy("The Averages Moving_X_Vortex", shorttitle="2.5billion BTC lol" , calc_on_order_fills=true, calc_on_every_tick=true, commission_type=strategy.commission.percent, commission_value=0.02, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, margin_long=0, margin_short=0,overlay=true)
// Dual Vortex
period_1 = input(15, "short Time")
period_2 = input(25, "long time")
VMP = math.sum(math.abs(high - low[3]), period_1)
VMM = math.sum(math.abs(low - high[1]), period_2)
STR = math.sum(ta.atr(1), period_1)
STR2 = math.sum(ta.atr(1), period_2)
VXpower= (input(5,"Vortex Power")/10000)*close
shorterV =(VMP / STR)*VXpower
longerV = (VMM / STR2)*VXpower
// MACross
shortlen = input(20, "ShortMa")
longlen = input(29, "LongMA")
shorterMA = ta.sma(close, shortlen)
longerMA = ta.sma(close, longlen)
// Vortex "MACross Stabilized"
Varance = input(1, "Vortex Stabilize")
Vpercent = (Varance / 100)
shortV= ((((shorterMA-close)* Vpercent)+shorterV)/2)+close
longV = ((((longerMA -close )*Vpercent)+longerV)/2)+close
//MAcross vortex stabilized
Marance = input(1, "MACross Stabilize")
MApercent = Marance / 100
shortMA = ((((shorterMA-close)*MApercent)+shorterV)/2)+close
longMA = ((((longerMA-close)*MApercent)+longerV)/2)+close
//VMXadveraged Moving cross adveraged
VMXL=(longV+longMA)/2
VMXS=(shortV+shortMA)/2
VXcross= ta.cross(VMXS,VMXL) ? VMXS : na
VMXcross= ta.cross(VMXS,VMXL)
//plot
plot(VMXS,"BUY",color=#42D420)
plot(VMXL,"SELL",color=#e20420)
crossV= ta.cross(shortV, longV) ? shortV : na
plot(shortV ,"shortV", color=#42D420)
plot(longV,"longV", color=#e20420)
plot(crossV,"crossV", color=#2962FF, style=plot.style_cross, linewidth=4)
crossMA = ta.cross(shortMA, longMA) ? shortMA : na
plot(shortMA,"shortMA", color=#42D420)
plot(longMA,"longMA", color=#e20420)
plot(crossMA,"crossMA", color=#2962FF, style=plot.style_cross, linewidth=4)
plot(VXcross,"VMXcross",color=#2962FF, style= plot.style_cross,linewidth=4)
plot(close,color=#999999)
// Vortex Condistyle
is_Vlong =shortV< longV
is_Vshort =shortV>longV
// Vortex commands
Vlong = ta.crossunder(longV, shortV)
Vshort =ta.crossover(shortV,longV)
VorteX = ta.cross(longV, shortV)
// MACross Conditions
is_MAlong = shortMA < longV
is_MAshort = shortMA > shortV
//VMX Conditions
is_VMXlong=VMXS<VMXL
is_VMXshort=VMXS>VMXL
// MA commands
MAlong = ta.crossunder(shortMA, longV)
MAshort =ta.crossover(shortMA, shortV)
MAcross = ta.cross(shortMA, longMA)
//VMX COMMANss
VMXBUY=ta.crossover( VMXS,VMXL)
VMXSELL=ta.crossunder(VMXS,VMXL)
// Close Crossing PositionLMXs
CS=is_MAshort or is_VMXshort
CL= is_MAlong or is_VMXlong
OS=MAshort or VMXSELL
OL=MAlong or VMXBUY
if VMXcross
strategy.close_all ("closed")
//if CS and OL
strategy.close("Short",comment="Short Closed")
//if CL and OS
strategy.close("Long",comment="Long Closed" )
//CA1= is_MAcross and is_VorteX
//if CA1
// strategy.close_all(comment="X2X")
// Defalongyntry qty
if is_VMXlong and VMXSELL
strategy.entry("sell",strategy.short)
if is_VMXshort and VMXBUY
strategy.entry("buy",strategy.long)
// Stop Losses & Taking Profit
sllp = input(0, "Stop Loss Long")
sll = (1 - sllp / 100) * strategy.position_avg_price
is_sll = input(true, "Stop Long")
tplp = input(0, "Take Profit Long")
tpl = (1 + tplp / 100) * strategy.position_avg_price
is_tpl = input(true, "Take Long")
slsp = input(0, "Stop Loss Short")
sls = (1 + slsp / 100) * strategy.position_avg_price
is_sls = input(true, "Stop Short")
tpsp = input(0, "Take Profit Short")
tps = (1 - tpsp / 100) * strategy.position_avg_price
is_tps = input(true, "Take Short")
if (is_sll or is_sls)
strategy.close("Stop Losses", qty_percent=100)
if (is_tpl or is_tps)
strategy.close("Take Profits", qty_percent=100)
//Strategy Backtest
//plot(strategy.equity, "Equity", color=color.red, linewidth=2, style=plot.style_areabr)