Xu hướng trung bình di chuyển kép theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-09-24 13:14:08
Tags:

Tổng quan

Chiến lược này sử dụng RMA dài hạn và EMA ngắn hạn để xác định hướng xu hướng. Nó theo dõi mức cao nhất gần đây hoặc thấp nhất gần đây để dừng lỗ. Ngoài ra còn có một khu vực không giao dịch xung quanh RMA để tránh phá vỡ sai.

Chiến lược logic

  1. Sử dụng RMA dài hạn và EMA ngắn hạn để xác định xu hướng. EMA ngắn vượt qua dưới RMA dài báo hiệu xu hướng giảm. Đi qua trên báo hiệu xu hướng tăng.

  2. Khi giá phá vỡ trên mức cao nhất gần đây trong một số khoảng thời gian nhất định, theo dõi mức cao nhất là dừng lỗ. Khi giá phá vỡ dưới mức thấp nhất gần đây, theo dõi mức thấp nhất là dừng lỗ.

  3. Thiết lập một khu vực không giao dịch xung quanh RMA. Đừng mở các vị trí khi giá nằm trong khu vực để tránh whipsaws. Phạm vi khu vực dựa trên tỷ lệ phần trăm nhất định của giá trị RMA.

  4. Đặt giá lấy lợi nhuận để thoát khỏi các vị trí với tỷ lệ phần trăm lợi nhuận sau khi nhập.

Ưu điểm

  1. Crossover trung bình di chuyển kép xác định hướng xu hướng một cách đáng tin cậy.

  2. Đánh dấu stop loss theo xu hướng.

  3. Khu vực cấm buôn lọc tín hiệu thoát hiểm giả.

  4. Lấy lợi nhuận cho phép chiến lược đóng cửa tích cực các giao dịch có lợi nhuận.

Rủi ro

  1. Sự chậm trễ trong việc vượt qua trung bình động có thể làm tăng tổn thất.

  2. Stop loss quá gần với giá có thể bị dừng bởi tiếng ồn.

  3. Khu vực cấm thương mại quá rộng có thể bỏ lỡ cơ hội.

  4. Không dừng lại kịp thời có thể dẫn đến tổn thất thêm.

Các giải pháp có thể:

  1. Tối ưu hóa các thông số trung bình động để giảm sự chậm trễ.

  2. Mở rộng stop loss một chút để ngăn ngừa quá nhạy cảm.

  3. Kiểm tra điều chỉnh phạm vi không giao dịch để tránh mất giao dịch.

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

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

  1. Kiểm tra các kết hợp trung bình động khác để phù hợp hơn.

  2. Thêm chênh lệch, MACD vv để cải thiện sự ổn định.

  3. Sử dụng máy học để tối ưu hóa các thông số một cách thông minh.

  4. Bao gồm sức mạnh xu hướng để tránh giao dịch ngược xu hướng.

  5. Tối ưu hóa quản lý tiền để có tỷ lệ thắng cao hơn.

Tóm lại

Chiến lược này sử dụng hai đường chéo trung bình động để xác định hướng xu hướng và kết hợp các điểm dừng và không giao dịch để khóa lợi nhuận xu hướng. Khung này đơn giản và có thể mở rộng. Nó có thể được cải thiện bằng cách điều chỉnh phạm vi tham số, tối ưu hóa lối ra và kết hợp các bộ lọc và tín hiệu bổ sung để làm cho nó mạnh mẽ trên các thị trường khác nhau.


/*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

Thêm nữa