TradingVMA Chiến lược giao dịch trung bình động biến

Tác giả:ChaoZhang, Ngày: 2024-02-21 11:47:43
Tags:

img

Tổng quan

Chiến lược TradingVMA là một chiến lược giao dịch định lượng dựa trên các đường trung bình động biến. Nó sử dụng các đường trung bình động thay đổi để nắm bắt xu hướng thị trường và tạo ra các tín hiệu giao dịch phù hợp.

Chiến lược logic

Trọng tâm của chiến lược TradingVMA là tính toán các đường trung bình động có độ dài biến đổi (Variable Moving Average, VMA).

Cụ thể, chiến lược đầu tiên tính toán một loạt các số lượng trung gian, chẳng hạn như Chỉ số chuyển động theo hướng giá (PDM, MDIM), dữ liệu làm mịn (PDM, MDM). Dữ liệu này cuối cùng được sử dụng để có được sức mạnh chỉ số (iS). Chỉ số này phản ánh cường độ biến động giá.

Sau đó, chiến lược TradingVMA điều chỉnh động thời gian trung bình động dựa trên sức mạnh của chỉ số. Khi biến động thị trường tăng, thời gian trung bình động trở nên ngắn hơn và ngược lại. Điều này cho phép phản ứng nhanh hơn với những thay đổi của thị trường.

Cuối cùng, chiến lược so sánh giá hiện tại với VMA để tạo ra tín hiệu giao dịch.

Phân tích lợi thế

Chiến lược TradingVMA có những lợi thế chính sau:

  1. Thời gian biến thể lọc tiếng ồn ổn định hơn Thời gian trung bình động biến thể thích nghi với những thay đổi của thị trường để lọc tiếng ồn và các tín hiệu xu hướng ổn định hơn.

  2. Phản ứng nhanh hơn đối với sự thay đổi giá cải thiện khả năng đáp ứng Mức trung bình động biến có thể phản ứng nhanh chóng với sự thay đổi giá và nắm bắt các điểm đảo ngược xu hướng.

  3. Giảm tần suất giao dịch Ít giao dịch quá mức - So với các chỉ số định kỳ, TradingVMA có thể giảm các giao dịch không cần thiết.

  4. Độ linh hoạt của các tham số tùy chỉnh - Chiến lược cho phép người dùng chọn các tham số dựa trên sở thích của họ để phù hợp với môi trường thị trường khác nhau.

Phân tích rủi ro

Chiến lược TradingVMA cũng có những rủi ro chính sau:

  1. Không có sự đảo ngược nhanh Khi xu hướng đảo ngược nhanh chóng, đường trung bình động điều chỉnh liên tục có thể chậm trong phản ứng.

  2. Sự thiên vị chậm trễ Tất cả các chiến lược trung bình động đều có một mức độ thiên vị chậm trễ, hoặc dài hoặc ngắn.

  3. Các tín hiệu sai TradingVMA có thể tạo ra các tín hiệu dài / ngắn không chính xác trong các thị trường bên cạnh giới hạn phạm vi.

  4. Khó khăn tối ưu hóa tham số Tìm kiếm sự kết hợp tham số tối ưu có thể là một thách thức.

Những rủi ro này có thể được kiểm soát thông qua các phương pháp như dừng lỗ, điều chỉnh sự kết hợp các tham số, v.v.

Hướng dẫn tối ưu hóa

Chiến lược TradingVMA cũng có thể được cải thiện trong các khía cạnh sau:

  1. Kết hợp các chỉ số khác Sử dụng với các chỉ số xu hướng khác, các chỉ số chống xu hướng có thể cải thiện chất lượng tín hiệu.

  2. Parameter Optimization Khám phá các tham số tối ưu thông qua backtesting và tối ưu hóa.

  3. Quy tắc giao dịch thích nghi Sử dụng các quy tắc nhập cảnh khác nhau, dừng lỗ theo chế độ thị trường.

  4. Hệ thống hóa Lập thuật toán và hệ thống hóa chiến lược để tối ưu hóa dễ dàng hơn.

Kết luận

TradingVMA là một chiến lược định lượng thích nghi. Nó nắm bắt xu hướng thị trường bằng cách sử dụng một chỉ số VMA được thiết kế đặc biệt, với lợi thế là đáp ứng và lọc ra tiếng ồn. Chiến lược có thể được nâng cấp theo nhiều cách để có hiệu suất tốt hơn.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
period: 1h
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/
// © laptevmaxim92

//@version=4
strategy("Variable Moving Average Strategy", overlay=true)

src=close
l =input(5, title="VMA Length") 
std=input(true, title="Show Trend Direction Colors")

utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2019, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

k = 1.0/l
pdm = 0.0
pdm := max((src - src[1]), 0)
mdm = 0.0
mdm := max((src[1] - src), 0)
pdmS = 0.0
pdmS := ((1 - k)*nz(pdmS[1]) + k*pdm)
mdmS = 0.0
mdmS := ((1 - k)*nz(mdmS[1]) + k*mdm)
s = pdmS + mdmS
pdi = pdmS/s
mdi = mdmS/s
pdiS = 0.0
pdiS := ((1 - k)*nz(pdiS[1]) + k*pdi)
mdiS = 0.0
mdiS := ((1 - k)*nz(mdiS[1]) + k*mdi)
d = abs(pdiS - mdiS)
s1 = pdiS + mdiS
iS = 0.0
iS := ((1 - k)*nz(iS[1]) + k*d/s1)
hhv = highest(iS, l) 
llv = lowest(iS, l) 
d1 = hhv - llv
vI = (iS - llv)/d1
vma = 0.0
vma := (1 - k*vI)*nz(vma[1]) + k*vI*src
vmaC=(vma > vma[1]) ? color.lime : (vma<vma[1]) ? color.red : (vma==vma[1]) ? color.yellow : na 
plot(vma, color=std?vmaC:color.white, linewidth=3, title="VMA")

longCondition = vma > vma[1]
if (longCondition)
    strategy.entry("BUY", strategy.long and use_date)

shortCondition = vma < vma[1]
if (shortCondition)
    strategy.entry("SELL", strategy.short and use_date)

if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

Thêm nữa