Chiến lược định lượng chuyển động trung bình chuyển đổi lợi nhuận kép

Tác giả:ChaoZhang, Ngày: 2023-11-14 16:04:33
Tags:

img

Tổng quan

Chiến lược này sử dụng các kỹ thuật chéo trung bình động đơn giản và hai lợi nhuận để kiểm soát rủi ro và tăng lợi nhuận. Nó phù hợp với giao dịch trung hạn và nắm bắt cơ hội trong những thay đổi xu hướng.

Chiến lược logic

Chiến lược này dựa trên giao thoa EMA và WMA để xác định xu hướng thị trường.

Khi vào, hai mức lấy lợi nhuận được thiết lập. Lợi nhuận đầu tiên được cố định ở mức giá nhập + 20 pips, và lợi nhuận thứ hai được cố định ở mức giá nhập + 40 pips. Trong khi đó, lệnh dừng lỗ được đặt ở mức giá nhập - 20 pips.

Khi giá đạt mức lợi nhuận đầu tiên, nó sẽ đóng một nửa vị trí.

Có ba kết quả có thể cho mỗi giao dịch:

  1. Giá đạt điểm dừng lỗ, mất 2% ngay lập tức.

  2. Giá đếm trước lấy lợi nhuận trước, đóng nửa vị trí khóa 1% lợi nhuận, sau đó tiếp tục chạy cho đến khi dừng lại, kết thúc với break even.

  3. Sau khi đạt được lợi nhuận đầu tiên, giá tiếp tục chạy và đạt được lợi nhuận thứ hai, kết thúc với 1% + 2% = 3% tổng lợi nhuận.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược lấy lợi nhuận kép này là nó kiểm soát rủi ro và tránh tổn thất đơn lớn. Stop loss giới hạn mức lỗ tối đa trong 2% khi thị trường di chuyển ngược lại. Hai lợi nhuận lấy lợi nhuận cho phép lợi nhuận lớn hơn khi xu hướng đi theo mong đợi.

So với chiến lược lấy lợi nhuận đơn / dừng lỗ, chiến lược này có ba kết quả - mất mát, thắng hoặc phá vỡ, làm giảm xác suất dừng lỗ. Ngay cả khi dừng lại, lỗ tối đa được giới hạn ở mức 2%. So với các chiến lược truyền thống, cơ chế lấy lợi nhuận kép làm giảm đáng kể DD và cải thiện tỷ lệ thắng.

Một lợi thế khác là sự đơn giản của nó. EMA và WMA là các chỉ số nổi tiếng dễ hiểu. Lập luận lấy lợi nhuận / dừng lỗ là đơn giản để theo dõi.

Phân tích rủi ro

Mặc dù có những lợi thế, cũng có những rủi ro cần phải nhận thức được cho chiến lược này.

Thứ nhất, như các chỉ số trung bình động, EMA và WMA có khả năng tương đối yếu trong việc xác định thị trường dao động.

Thứ hai, các mức thu lợi nhuận / dừng lỗ cố định có thể không thích nghi với biến động thị trường.

Cuối cùng, chiến lược không thể đáp ứng các sự kiện bất ngờ, với nguy cơ bị mắc kẹt. Các sự kiện tin tức lớn có thể tạo ra khoảng cách giá lớn trực tiếp vi phạm mức lợi nhuận / lỗ, gây ra tổn thất lớn.

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

Có một số khía cạnh để tối ưu hóa thêm chiến lược:

  1. Cải thiện tín hiệu nhập cảnh. Kiểm tra các chỉ số xu hướng hoặc xu hướng tốt hơn so với EMA và WMA để tạo ra các tín hiệu chất lượng cao hơn.

  2. Sử dụng các phương pháp như ATR, trailing stop loss vv để làm cho mức lợi nhuận / lỗ thích nghi với thị trường.

  3. Thêm bộ lọc. Yêu cầu xác nhận khối lượng hoặc chỉ số thứ cấp trước khi vượt qua để tránh bẫy. Cũng xem xét liệu có nên giao dịch xung quanh các sự kiện lớn hay không.

  4. Tối ưu hóa kích thước vị trí, điều chỉnh kích thước vị trí theo quy tắc quản lý vốn.

Kết luận

Tóm lại, đây là một chiến lược theo xu hướng đơn giản và thực tế. Nó sử dụng EMA và WMA chéo cho các mục nhập, và lợi nhuận hai lần để kiểm soát rủi ro. So với các chiến lược truyền thống, nó có tỷ lệ thắng cao hơn và rủi ro thấp hơn. Tất nhiên, các giới hạn của các chỉ số và cài đặt lợi nhuận / lỗ nên được xem xét. Tăng cường thêm có thể làm cho chiến lược mạnh mẽ hơn.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("FS ATR & PS (MA)", overlay=true)

// Strategy
Buy  = input(true)
Sell = input(true)

// Time Period
start_year   = input(title='Start year'   ,defval=2019)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_hour   = input(title='Start hour '  ,defval=0)
start_minute = input(title='Start minute' ,defval=0)
end_time     = input(title='set end time?',defval=false)
end_year     = input(title='end year'     ,defval=2019)
end_month    = input(title='end month'    ,defval=12)
end_day      = input(title='end day'      ,defval=31)
end_hour     = input(title='end hour'     ,defval=23)
end_minute   = input(title='end minute'   ,defval=59)

// MA
ema_period   = input(title='EMA period',defval=10)
wma_period   = input(title='WMA period',defval=20)
ema = ema(close,ema_period)
wma = wma(close,wma_period)

// Entry Condition
longCondition  = 
 crossover(ema,wma) and Buy and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)
 
shortCondition = 
 crossunder(ema,wma) and Sell and
 nz(strategy.position_size) == 0 and
 time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and
 (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true)

// Exit Condition
a = input(20)*10
b = input(40)*10
c = a*syminfo.mintick
d = b*syminfo.mintick

long_stop_level     = float(na)
long_profit_level1  = float(na)
long_profit_level2  = float(na)
long_even_level     = float(na)

short_stop_level    = float(na)
short_profit_level1 = float(na)
short_profit_level2 = float(na)
short_even_level    = float(na)

long_stop_level     := longCondition  ? close - c : long_stop_level     [1]
long_profit_level1  := longCondition  ? close + c : long_profit_level1  [1]
long_profit_level2  := longCondition  ? close + d : long_profit_level2  [1]
long_even_level     := longCondition  ? close + 0 : long_even_level     [1]

short_stop_level    := shortCondition ? close + c : short_stop_level    [1]
short_profit_level1 := shortCondition ? close - c : short_profit_level1 [1]
short_profit_level2 := shortCondition ? close - d : short_profit_level2 [1]
short_even_level    := shortCondition ? close + 0 : short_even_level    [1] 

// Position Sizing
Risk = input(defval=10, title="Risk per trade%", step=1, minval=0, maxval=100)/100
size  = 1

// Strategy
if longCondition
    strategy.entry("Buy"  , strategy.long, qty=size)
    strategy.exit ("Exit1", stop=long_stop_level, limit=long_profit_level1, qty=size/2)
    strategy.exit ("Exit2", stop=long_stop_level, limit=long_profit_level2)
    
if shortCondition
    strategy.entry("Sell" , strategy.short, qty=size)
    strategy.exit ("Exit3", stop=short_stop_level, limit=short_profit_level1, qty=size/2)
    strategy.exit ("Exit4", stop=short_stop_level, limit=short_profit_level2)
    
// Plot
plot(strategy.position_size <= 0 ? na : long_stop_level    , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level1 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_profit_level2 , color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size <= 0 ? na : long_even_level    , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_stop_level   , color=#dc143c, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level1, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_profit_level2, color=#00ced1, style=plot.style_linebr, linewidth=1)
plot(strategy.position_size >= 0 ? na : short_even_level   , color=#ffffff, style=plot.style_linebr, linewidth=1)
plot(ema,color=#00ced1)
plot(wma,color=#dc143c)






Thêm nữa