Chiến lược theo dõi xu hướng trung bình động kép


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

Tổng quan

Chiến lược này sử dụng kết hợp đường trung bình RMA dài và đường trung bình EMA ngắn để đánh giá xu hướng và thực hiện theo dõi xu hướng bằng cách phá vỡ điểm cao và thấp. Ngoài ra, nó cũng thiết lập khu vực không giao dịch để lọc các vụ phá vỡ giả.

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

  1. Sử dụng RMA chu kỳ dài và EMA chu kỳ ngắn để xác định hướng xu hướng. Dưới EMA ngắn hạn, mặc RMA dài là tín hiệu nhìn xuống, trên là tín hiệu nhìn nhiều.

  2. Khi giá phá vỡ giá cao nhất trong chu kỳ nhất định gần đây, hãy theo dõi giá cao nhất. Khi giá phá vỡ giá thấp nhất trong chu kỳ nhất định gần đây, hãy theo dõi giá thấp nhất.

  3. Thiết lập vùng không giao dịch, giá vào vùng đó không mở vị trí, tránh bị đặt. Phạm vi của vùng được xác định bởi một tỷ lệ nhất định của đường trung bình RMA.

  4. Đặt giá dừng sau khi tham gia và rút lợi nhuận theo tỷ lệ nhất định.

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

  1. Giao diện hai đường đều có thể xác định được xu hướng chính xác và đáng tin cậy.

  2. Theo dõi Stop Loss để Stop Loss hoạt động theo xu hướng

  3. Thiết lập khu vực không giao dịch để lọc hiệu quả các tín hiệu phá vỡ giả.

  4. Cài đặt Stop Stop cho phép chiến lược tự động thanh toán khi đã tích lũy đủ lợi nhuận.

Rủi ro chiến lược

  1. Có thể có sự chậm trễ trong việc tạo ra một cái chết, dẫn đến sự mất mát lớn hơn.

  2. Điểm dừng theo dõi quá gần với giá có thể bị phá vỡ bởi tiếng ồn trước đó.

  3. Không giao dịch khu vực quá rộng dẫn đến cơ hội giao dịch bị bỏ lỡ.

  4. Không dừng lỗ kịp thời có thể dẫn đến tổn thất mở rộng hơn nữa.

Giải pháp tương ứng:

  1. Tối ưu hóa tham số đường trung bình, giảm tỷ lệ trễ.

  2. Giảm điểm dừng thích hợp để tránh quá nhạy cảm.

  3. Kiểm tra điều chỉnh phạm vi không giao dịch để tránh bỏ lỡ cơ hội.

  4. Thêm các phương thức dừng lỗ khác để hạn chế tổn thất tối đa.

Hướng tối ưu hóa chiến lược

  1. Kiểm tra các kết hợp chỉ số khác để tìm kiếm kết hợp phù hợp hơn.

  2. Tăng sự chênh lệch giá, MACD và các chỉ số phán đoán khác để tăng sự ổn định của chiến lược.

  3. Tiếp theo, chúng tôi sẽ giới thiệu các tham số tối ưu hóa cho các thuật toán học máy để làm cho chiến lược trở nên thông minh hơn.

  4. Giao dịch với các chỉ số có xu hướng mạnh hoặc yếu, tránh giao dịch ngược.

  5. Tối ưu hóa chiến lược quản lý tài chính và tăng tỷ lệ chiến lược.

Tóm tắt

Chiến lược này sử dụng hai đường cân bằng để xác định xu hướng xu hướng và khóa lợi nhuận theo xu hướng bằng cách lọc các khu vực dừng lỗ và không giao dịch. Khung chiến lược đơn giản, rõ ràng, có thể mở rộng, có thể được tối ưu hóa bằng cách điều chỉnh dải tham số, tối ưu hóa chiến lược dừng lỗ và đưa ra các chỉ số phán đoán phụ trợ khác, cho phép chiến lược có hiệu quả tốt trong các thị trường khác nhau.

Mã nguồn chiến lược
/*backtest
start: 2023-08-24 00:00:00
end: 2023-09-12 00:00:00
period: 3h
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/
// © PatrickGwynBuckley

//@version=5
//var initialCapital = strategy.equity

strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true)
shortma = input.int(55, title="quick ma's")
longma = input.int(100, title="long ma's")
ema55h = ta.ema(high, shortma)
ema55l = ta.ema(low, shortma)
ema200h = ta.rma(high, longma)
ema200l = ta.rma(low, longma)
stock = ta.stoch(close, high, low, 14)

lev = input.int(3, title="leverage")
hhVal = input.int(170, title="Highest high period")
llVal = input.int(170, title="Lowest low period")

hh = ta.highest(high, hhVal)
ll = ta.lowest(low, llVal)
//plot(stock)

plot(hh, color=color.new(color.green, 50))
plot(ll, color=color.new(color.red, 50))
var float downtrade = 0
p = input.float(3.0, title="no trade zone")
l = 3
emadistlong = ema200h + ((ema200h/100)*p)
emadistshort = ema200l - ((ema200h/100)*p)

plot(ema55h)
plot(ema55l)
ntl = plot(emadistlong, color=color.new(color.red, 10))
nts = plot(emadistshort, color=color.new(color.red, 10))
fill(ntl, nts, color=color.new(color.red, 90))

//position size

EntryPrice = close
//positionValue = initialCapital
positionSize = (strategy.equity*lev) / EntryPrice

//plot(strategy.equity)


//standard short

if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 
    strategy.entry("short", strategy.short, qty=positionSize, comment="short")
    downtrade := 1

//reset count    
if (ta.crossunder(ema55h, ema200l)) and downtrade == 1
    downtrade := 0

//standard long    
if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 
    strategy.entry("long", strategy.long, qty=positionSize, comment="long")
    downtrade := 0

//RESET COUNT ON MA CROSS
if (ta.crossover(ema55l, ema200h)) and downtrade == 0
    downtrade := 1
    
longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)//
shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)//

sl = 3.5
tp = input.float(6.9, title="take profit %")
tp2 = 10


strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))
strategy.close("long", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")
//strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("long2", when = longclose2, comment = "long exit")
//strategy.close("long", when = (downtrade == 1), comment = "long exit")

strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300)
strategy.close("short", when = shortclose2, comment = "short exit")
//strategy.close("short", when = (downtrade == 0), comment = "short exit")
//strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl)))
//strategy.close ("short2", when = shortclose2, comment = "short exit")
//strategy.close("short2", when = (downtrade == 0), comment = "short exit")

//if (strategy.exit("long exit", "long"))
    //downtrade := 1
//else 
   // downtrade := 0