Dựa trên chiến lược trung bình động kép của giao dịch định lượng


Ngày tạo: 2023-12-29 11:03:14 sửa đổi lần cuối: 2023-12-29 11:03:14
sao chép: 2 Số nhấp chuột: 659
1
tập trung vào
1621
Người theo dõi

Dựa trên chiến lược trung bình động kép của giao dịch định lượng

Tổng quan

Chiến lược này dựa trên các chỉ số kỹ thuật của đường trung bình di chuyển và khối lượng giao dịch, thiết kế một chiến lược định lượng theo dõi dài hạn để dập tắt sự sụt giảm. Khi giá cổ phiếu đứng trên đường 20 ngày, và khối lượng mua trong ngày lớn hơn khối lượng bán và lớn hơn khối lượng giao dịch trung bình trong n ngày trước, thị trường được coi là ở trạng thái đa đầu, nên mua; khi giá cổ phiếu phá vỡ đường và khối lượng bán trong ngày lớn hơn khối lượng mua và lớn hơn khối lượng giao dịch trung bình trong n ngày trước, thị trường được coi là ở trạng thái trống đầu, nên bán.

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

Chiến lược này được đánh giá dựa trên hai chỉ số:

  1. Đường trung bình kép: tính toán đường 20 ngày và đường 60 ngày, khi đường 20 ngày vượt qua đường 60 ngày, thị trường được coi là đang ở trạng thái tăng giá; khi đường 20 ngày vượt qua đường 60 ngày, thị trường được coi là đang ở trạng thái giảm giá.

  2. Khối lượng giao dịch: tính khối lượng giao dịch mua và bán mỗi ngày, nếu khối lượng mua lớn hơn khối lượng bán và lớn hơn khối lượng giao dịch trung bình trong n ngày qua, thì được coi là giao dịch nhiều đầu; nếu khối lượng bán lớn hơn khối lượng mua và lớn hơn khối lượng giao dịch trung bình trong n ngày qua, thì được coi là giao dịch trống.

Chiến lược và logic giao dịch cụ thể như sau:

Bắt đầu nhiều đầu: Khi giá đóng cửa đứng trên đường 20 ngày, và ngày mua lớn hơn số lượng bán và khối lượng giao dịch trung bình trong n ngày qua, thị trường được coi là ở trạng thái xem nhiều, dựa trên tỷ lệ biến động tính các vùng Brin, nếu giá đóng cửa nằm giữa đường ray giữa và đường ray dưới của Brin, thì nhập vào nhiều.

Bước vào đầu trống: Khi giá đóng cửa giảm xuống đường và số lượng bán hàng ngày hôm đó lớn hơn số lượng mua và số lượng giao dịch trung bình trong n ngày qua, thị trường được coi là đang ở trong tình trạng thị trường, dựa trên tỷ lệ biến động, Burin Band được tính toán, và nếu giá đóng cửa nhỏ hơn Burin Band xuống đường, Burin Band sẽ được mở.

Ngăn chặn và dừng lỗ: thiết lập các điểm dừng và dừng lỗ hợp lý, cố định lợi nhuận hoặc giảm tổn thất. Giống như dừng khi giá cổ phiếu tăng mạnh 5% so với giá nhập cảnh; dừng khi lỗ đạt 10%; hoặc dừng khi giá cổ phiếu giảm xuống một mức độ nhất định sau khi đạt mức cao mới gần đây.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Kết hợp giữa đường trung bình kép và chỉ số khối lượng giao dịch, tránh vùng mù của chỉ số kỹ thuật duy nhất.

  2. Brin Băng sử dụng các tham số khác nhau để xác định giá giao dịch cụ thể, giúp nhập cảnh chính xác hơn.

  3. Chiến lược dừng lỗ là hợp lý, có lợi cho việc khóa lợi nhuận và kiểm soát rủi ro.

  4. Kết quả đo lường tốt, thu nhập ổn định, có thể thực sự được sử dụng cho giao dịch định lượng.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Chiến lược hai dòng đồng đều dễ gây ra tín hiệu sai và cần lọc các chỉ số năng lượng kết hợp.

  2. Thiết lập không đúng các tham số của vùng Brin có thể dẫn đến việc nhập học quá thường xuyên hoặc quá hiếm.

  3. Các điểm dừng cố định có thể ảnh hưởng đến lợi nhuận của chiến lược.

  4. Một số dữ liệu lịch sử cần được kiểm tra lại và có thể xảy ra sự mất mát bất ngờ trong đĩa cứng.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa các tham số của hệ thống đường trung bình, tìm kiếm kết hợp đường trung bình tốt nhất.

  2. Tối ưu hóa các tham số Brin để có thể nhập cảnh chính xác hơn.

  3. Điều chỉnh động điểm dừng lỗ, đặt tỷ lệ lợi nhuận hợp lý theo tình hình thị trường.

  4. Thêm các chỉ số kỹ thuật khác, như MACD, KD, để tăng độ chính xác của chiến lược.

  5. Sử dụng các phương pháp học máy để tự động tìm các tham số ưu đãi, làm cho chiến lược trở nên mạnh mẽ hơn.

Tóm tắt

Chiến lược này nói chung là một chiến lược giao dịch định lượng rất thực tế, phản hồi tốt, dễ thực hiện, rủi ro có thể kiểm soát được, là một chiến lược ổn định phù hợp cho thị trường thực, đáng để các nhà giao dịch định lượng học hỏi. Tất nhiên, vẫn còn rất nhiều không gian để tối ưu hóa chiến lược, hy vọng sẽ có nhiều chuyên gia giao dịch định lượng để cải thiện.

Mã nguồn chiến lược
/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
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/
// © KAIST291

//@version=4
strategy("prototype",initial_capital=0.01,commission_type=strategy.commission.percent,commission_value=0.1, format=format.volume, precision=0,overlay=true)
// SETTING //
length1=input(1)
length3=input(3)
length7=input(7)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=(close>Supper and BV>SV and BV>Davgvol)
bull2=(close>ma20  and BV>SV and BV>Davgvol)
bux =(close<Supper and close>Slower and volume<Wavgvol)
bear=(close<Slower and close<lower and SV>BV and SV>Wavgvol)
hi=highest(exit,10)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>ma3 and ma20>ma60 and rsi<70)
    strategy.entry("Long",strategy.long,0.1)

if (strategy.position_avg_price*1.05<close)
    strategy.close("Long",0.1)

else if (highestPriceAfterEntry*0.999<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.997<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (highestPriceAfterEntry*0.995<close and close>strategy.position_avg_price*1.002)
    strategy.close("Long",0.1)
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long",0.1)
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////