Chiến lược giao dịch định lượng giao thoa đường trung bình động hàm mũ kép


Ngày tạo: 2024-01-25 14:04:23 sửa đổi lần cuối: 2024-01-25 14:04:23
sao chép: 0 Số nhấp chuột: 659
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng giao thoa đường trung bình động hàm mũ kép

Tổng quan

Chiến lược này được gọi là chiến lược giao dịch định lượng chéo giữa hai chỉ số trung bình. Chiến lược này thực hiện giao dịch tự động bằng cách tính toán trung bình di chuyển kép (Exponential Moving Average, EMA) và đánh giá điểm mua bán chéo, kết hợp với nguyên tắc mở vị trí giao dịch định lượng.

Nguyên tắc chiến lược

Lý luận cốt lõi của chiến lược này dựa trên đường trung bình di chuyển của hai chỉ số. Chỉ số 1 là EMA 20 ngày ngắn hạn, chỉ số 2 là EMA 50 ngày dài hạn.

Ngoài ra, chiến lược cũng sử dụng chỉ số định lượng Vortex để hỗ trợ xác định xu hướng và tạo tín hiệu giao dịch. Chỉ số Vortex xác định xu hướng tăng/tăng bằng cách tính toán giá cao nhất so với giá đóng cửa hôm qua, giá thấp nhất so với giá đóng cửa hôm qua, các tham số có chu kỳ là 1 và 3 ngày. Kết hợp với chỉ số Vortex có thể lọc EMA của một số xu hướng không chính.

Khi tín hiệu giao dịch được tạo ra, quản lý rủi ro dựa trên mô-đun quản lý tiền vốn được tích hợp trong chiến lược, kết hợp với nguyên tắc tỷ lệ lợi nhuận. Chiến lược cho phép thiết lập điểm dừng lỗ và điểm dừng để khóa lợi nhuận để kiểm soát rủi ro.

Phân tích lợi thế

  • 1. Chiến lược tích hợp các chỉ số định lượng chéo EMA và Vortex để tận dụng lợi thế của chỉ số và tăng độ chính xác của tín hiệu
  • 2. Hệ thống giao dịch tự động, không cần sự tham gia của con người, giảm khả năng mắc lỗi của con người
  • 3. Tính năng dừng lỗ tự động được tích hợp, có thể giới hạn Loss tối đa cho mỗi giao dịch
  • 4. Mô-đun quản lý tiền kiểm soát tỷ lệ vốn đầu tư cho mỗi giao dịch, do đó kiểm soát rủi ro giao dịch tổng thể

Phân tích rủi ro

  • 1. Tín hiệu giao chéo EMA có thể xuất hiện tín hiệu giả, và chỉ số định lượng Vortex không thể lọc hoàn toàn tín hiệu giả, vì vậy sẽ có một xác suất thua lỗ nhất định
  • 2. Sự kiện Black Swan lớn đột ngột có thể làm tăng tổn thất giao dịch trực tiếp
  • 3. Khắc phục kiểm soát phụ thuộc vào chức năng dừng lỗ, nếu phá vỡ dừng lỗ sẽ gây ra thiệt hại lớn hơn

Định hướng tối ưu hóa:

  • 1. Có thể kiểm tra điều chỉnh tham số EMA, tối ưu hóa tín hiệu chéo
  • 2. Có thể kết hợp các chỉ số khác để lọc tín hiệu
  • 3. Các tham số có thể được tự động tối ưu hóa thông qua thuật toán học máy

Tóm tắt

Chiến lược này nói chung là một chiến lược giao chéo EMA đôi điển hình, sử dụng giao chéo giữa các tham số khác nhau của EMA để đánh giá thời gian mua và bán thị trường, thuộc chiến lược giao dịch ngắn và trung bình. Ưu điểm lớn nhất của chiến lược là sử dụng chỉ số định lượng để lọc tín hiệu và thực hiện bảo vệ giá trị không người dùng thông qua hệ thống giao dịch tự động, đồng thời cài đặt dừng lỗ để kiểm soát rủi ro, hoạt động tương đối ổn định.

Mã nguồn chiến lược
/*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)