Chiến lược giao dịch định lượng dựa trên MACD chuẩn hóa


Ngày tạo: 2023-09-14 20:01:07 sửa đổi lần cuối: 2023-09-14 20:01:07
sao chép: 1 Số nhấp chuột: 1118
1
tập trung vào
1617
Người theo dõi

Bài viết này sẽ giới thiệu chi tiết về một chiến lược giao dịch định lượng dựa trên chỉ số MACD thống nhất. Chiến lược này được tối ưu hóa cho chiến lược MACD cổ điển để cải thiện chất lượng tín hiệu.

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

Ý tưởng cốt lõi của chiến lược này là xử lý các chỉ số MACD truyền thống để giảm tỷ lệ lỗi. Các bước cụ thể sau đây:

  1. Tính trung bình di chuyển ngắn hạn và dài hạn của Hull để đánh giá xu hướng lớn dựa trên mối quan hệ chéo của chúng;

  2. Tính toán chênh lệch MACD;

  3. Các chỉ số MACD được xử lý thống nhất trong một chu kỳ nhất định;

  4. Tính toán đường trung bình của MACD thống nhất, tạo ra các kích hoạt giao dịch;

  5. Khi tổng hợp MACD, khi sử dụng bộ kích hoạt trên, hãy làm nhiều hơn và khi sử dụng dưới, hãy làm trống;

  6. Các nhà nghiên cứu đã nghiên cứu các mối quan hệ giữa các xu hướng và các mối quan hệ giữa các xu hướng.

  7. Thiết lập điểm dừng lỗ và kiểm soát rủi ro của một giao dịch.

Việc xử lý thống nhất có thể thu nhỏ độ rộng tuyệt đối của chênh lệch MACD, do đó làm giảm tiếng ồn và cải thiện chất lượng tín hiệu. Bộ lọc xu hướng cũng tránh hoạt động ngược do điều chỉnh địa phương. Chặn mất mát kiểm soát mất mát đơn.

2 - Lợi thế chiến lược

Chiến lược này có lợi thế lớn nhất so với chiến lược MACD đơn giản là xử lý thống nhất, điều này có thể làm giảm tỷ lệ lỗi của MACD và cải thiện độ chính xác của tín hiệu.

Một lợi thế khác là thêm bộ lọc để đánh giá xu hướng, tránh hoạt động ngược trong xu hướng. Điều này làm tăng sự ổn định của chiến lược.

Cuối cùng, thiết lập các điều kiện dừng lỗ cũng giúp kiểm soát rủi ro và lợi nhuận của mỗi giao dịch, và quản lý tiền tích cực.

Ba, rủi ro tiềm ẩn

Mặc dù chiến lược này đã được tối ưu hóa, nhưng trong thực tế, các rủi ro sau đây cũng nên được lưu ý:

Đầu tiên là các tham số rất khó để tối ưu hóa, thiết lập không đúng cách có thể dẫn đến quá phù hợp.

Thứ hai, thiết lập dừng lỗ quá gần có thể bị phá vỡ và gây ra tổn thất lớn hơn.

Cuối cùng, có thể có sự chậm trễ trong các tín hiệu và không thể phản ứng kịp thời khi có sự thay đổi trong xu hướng.

Bốn nội dung, tóm tắt

Bài viết này mô tả chi tiết một chiến lược giao dịch định lượng để xử lý một cách thống nhất các chỉ số MACD. Chiến lược này cải tiến chiến lược MACD cổ điển, có thể cải thiện chất lượng tín hiệu hiệu hiệu quả và tham gia vào cơ chế quản lý rủi ro. Tuy nhiên, vẫn cần chú ý đến các vấn đề như khó khăn tối ưu hóa tham số và cài đặt dừng lỗ.

Mã nguồn chiến lược
/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// Normalized MACD but heavily modified by SeaSide420. Normalized MACD v420
strategy("Normalized MACD (v420)",shorttitle="NmacD(v420)",overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=1440, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) 
p=input(ohlc4)
jah=input(title="HullMA cross",defval=21)
tsp = input(34,title='Trigger')
np = input(50,title='Normalize')
SL = input(defval=-420.00, title="Stop Loss in $", step=1)
TP = input(defval=31.00, title="Target Point in $", step=1)
ot=1
n2ma=2*wma(p,round(jah/2))
nma=wma(p,jah)
diff=n2ma-nma
sqn=round(sqrt(jah))
n2ma1=2*wma(p[2],round(jah/2))
nma1=wma(p[2],jah)
diff1=n2ma1-nma1
sqn1=round(sqrt(jah))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
sh=n1
lon=n2
ratio = min(sh,lon)/max(sh,lon)
Mac = (iff(sh>lon,2-ratio,ratio)-1)
MacNorm = ((Mac-lowest(Mac, np)) /(highest(Mac, np)-lowest(Mac, np)+.000001)*2)- 1
MacNorm2 = iff(np<2,Mac,MacNorm)
Trigger = wma(MacNorm2, tsp)
Hist =(MacNorm2-Trigger)
Hist2= Hist>1?1:Hist<-1?-1:Hist
teh=MacNorm2+MacNorm2[2]-MacNorm2[1]
closelong = strategy.openprofit<SL or strategy.openprofit>TP or teh[1]<Trigger[1] and n1<n2[1]
if (closelong)
    strategy.close("Long")
closeshort = strategy.openprofit<SL or strategy.openprofit>TP or  teh[1]>Trigger[1] and n1>n2[1]
if (closeshort)
    strategy.close("Short")
longCondition = Trigger<0 and teh>Trigger and MacNorm>Trigger and strategy.opentrades<ot 
if (longCondition)
    strategy.entry("Long",strategy.long)
shortCondition = Trigger>0 and teh<Trigger and MacNorm<Trigger and strategy.opentrades<ot 
if (shortCondition)
    strategy.entry("Short",strategy.short)