Chiến lược giao dịch đảo ngược trung bình di chuyển kép

Tác giả:ChaoZhang, Ngày: 2023-10-16 15:50:35
Tags:

img

Tổng quan

Chiến lược giao dịch đảo ngược trung bình di chuyển kép tạo ra tín hiệu giao dịch bằng cách tính toán trung bình di chuyển đơn giản của hai giai đoạn khác nhau - ngắn hạn và dài hạn. Nó đi dài khi trung bình di chuyển ngắn hạn vượt trên trung bình di chuyển dài hạn, và đi ngắn khi trung bình di chuyển ngắn hạn vượt dưới trung bình di chuyển dài hạn. Chiến lược này thuộc thể loại chiến lược theo xu hướng.

Chiến lược logic

Chiến lược này thiết lập hai đường trung bình động đơn giản với độ dài thời gian khác nhau thông qua các thông số đầu vào, với MA ngắn hạn được gọi là đường nhanh và MA dài hạn được gọi là đường chậm. Đường nhanh phản ứng nhanh hơn với những thay đổi giá và nắm bắt xu hướng ngắn hạn, trong khi đường chậm phản ứng chậm hơn với những thay đổi giá và lọc ra tiếng ồn thị trường ngắn hạn, nắm bắt xu hướng chính. Khi đường nhanh vượt qua trên đường chậm, nó cho thấy xu hướng tăng đang tăng và một vị trí dài được thực hiện. Khi đường nhanh vượt qua dưới đường chậm, nó cho thấy xu hướng giảm đang tăng và một vị trí ngắn được thực hiện.

Cụ thể, chiến lược tính toán hai MAs bằng cách sử dụng hàm sma ((), gán kết quả cho xSMA (đường chậm) và đường nhanh. Các MAs được tính dựa trên giá đóng. Khi giá đóng vượt trên xSMA, một vị trí dài được thực hiện. Khi giá đóng vượt dưới xSMA, một vị trí ngắn được thực hiện. Chiến lược cũng đặt giới hạn khoảng thời gian giao dịch, do đó các tín hiệu giao dịch chỉ được tạo trong khoảng thời gian được chỉ định.

Các điểm lấy lợi nhuận và dừng lỗ được thiết lập cho mỗi giao dịch, và lợi nhuận được lấy hoặc dừng lỗ được kích hoạt ngay lập tức khi giá đạt đến mức lấy lợi nhuận hoặc dừng lỗ.

Phân tích lợi thế

  • Sử dụng hệ thống MA kép có thể theo dõi hiệu quả xu hướng và tránh bị đánh lừa bởi tiếng ồn thị trường ngắn hạn
  • Kết hợp MAs nhanh và chậm có thể cải thiện chất lượng tín hiệu giao dịch
  • Kiểm soát rủi ro điểm lấy lợi nhuận và dừng lỗ cho mỗi giao dịch
  • Hạn chế phạm vi thời gian giao dịch tránh biến động lớn xung quanh các sự kiện lớn
  • Xác định các tín hiệu giao dịch trên thanh tạo ra hỗ trợ trực quan và cải thiện trực giác

Phân tích rủi ro

  • Hệ thống MA kép có xu hướng tạo ra nhiều tín hiệu sai, tăng tần suất giao dịch và chi phí
  • Các thông số MA cần phải được thiết lập hợp lý, nếu không hiệu ứng làm mịn hoặc quá nhiều cơ hội bị bỏ lỡ
  • Các hệ thống MA có sự chậm trễ và có thể bỏ lỡ các điểm chuyển đổi xu hướng
  • Lợi nhuận / dừng lỗ cố định có thể quá đậm và không thể điều chỉnh năng động
  • Hạn chế phạm vi thời gian giao dịch có thể bỏ lỡ cơ hội trong các giai đoạn khác

Rủi ro có thể được giảm bằng cách điều chỉnh các tham số MA, tối ưu hóa chiến lược lấy lợi nhuận / dừng lỗ, loại bỏ giới hạn thời gian hoặc thiết lập các khoảng thời gian giao dịch hợp lý hơn.

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

  • Kiểm tra các kết hợp thời gian MA khác nhau để tìm các thông số tối ưu
  • Xem xét stop loss/profit theo dõi động, ví dụ dựa trên ATR
  • Tích hợp các chỉ số khác như MACD, KD vv như tín hiệu lọc
  • Tối ưu hóa phạm vi thời gian giao dịch để nắm bắt nhiều cơ hội hơn
  • Kết hợp với chiến lược thoát, tìm kiếm tín hiệu thoát xung quanh MAs
  • Xây dựng các cơ chế thoát động, chủ động dừng lại khi giá đi vào phạm vi

Tóm lại

Chiến lược giao dịch đảo ngược trung bình động kép nói chung là một chiến lược theo xu hướng đơn giản và thực tế. Nó tận dụng tối đa hiệu ứng làm mịn của MAs để xác định hướng xu hướng và sử dụng MAs nhanh / chậm để tạo ra các tín hiệu giao dịch. Chiến lược dễ thực hiện với logic rõ ràng, phù hợp cho người mới bắt đầu nắm bắt. Tuy nhiên, nó có thể tạo ra các tín hiệu sai quá mức và các vấn đề chậm trễ. Có thể cải thiện thông qua tối ưu hóa tham số, thêm các chỉ số phụ trợ vv để làm cho chiến lược mạnh mẽ hơn. Nếu sử dụng đúng cách, chiến lược này có thể mang lại lợi nhuận ổn định và đáng để thử nghiệm và tối ưu hóa toàn diện.


/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
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/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0

strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
timeframe = input(title="Time Frame", defval="15")
timerange = input(title="Time Range", defval="2300-0800")
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1 and timeinrange(timeframe, timerange))
    strategy.entry("Long", strategy.long)
if (possig == -1 and timeinrange(timeframe, timerange))
    strategy.entry("Short", strategy.short)
if (timeinrange(timeframe, timerange) == 0) 
    strategy.close_all()

if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)

Thêm nữa