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


Ngày tạo: 2023-10-16 15:50:35 sửa đổi lần cuối: 2023-10-16 15:50:35
sao chép: 1 Số nhấp chuột: 671
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược giao dịch đảo ngược hai đường trung bình bằng cách tính toán trung bình di chuyển đơn giản của hai chu kỳ khác nhau trong ngắn hạn và dài hạn và tạo ra tín hiệu giao dịch dựa trên mối quan hệ của giá với đường trung bình di chuyển. Khi đi qua đường trung bình dài hạn trên đường trung bình ngắn hạn, hãy làm nhiều hơn; khi đi qua đường trung bình dài hạn dưới đường trung bình ngắn hạn, hãy làm trống. Chiến lược này thuộc về chiến lược theo dõi xu hướng.

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

Chiến lược này thiết lập một đường trung bình di chuyển đơn giản với hai chiều dài chu kỳ khác nhau bằng cách nhập các tham số, đường chu kỳ ngắn được gọi là đường nhanh và đường chu kỳ dài được gọi là đường chậm. Đường nhanh phản ứng với sự thay đổi giá nhanh hơn, có thể nắm bắt xu hướng ngắn hạn; đường chậm Phản ứng với sự thay đổi giá chậm hơn, có thể lọc ra tiếng ồn thị trường ngắn hạn, nắm bắt xu hướng chính.

Cụ thể, chiến lược tính toán hai đường trung bình thông qua hàm sma () và gán giá trị tính toán cho xSMA () và đường nhanh (2). Chiến lược sử dụng giá gần để tính toán đường trung bình. Khi giá gần vượt qua xSMA, hãy làm nhiều; khi giá gần vượt qua xSMA, hãy làm trống.

Cài đặt điểm dừng lỗ cho mỗi giao dịch và dừng lỗ ngay khi đạt đến điểm dừng lỗ. Đồng thời, chiến lược hiển thị mối quan hệ giữa giá và đường chậm trên đường K thông qua hàm barcolor: khi giao dịch nhiều, đường K màu xanh lá cây; khi giao dịch trống, đường K màu đỏ; khi giao dịch bằng phẳng, đường K màu xanh lam.

Phân tích lợi thế

  • Sử dụng hệ thống song song, có thể theo dõi xu hướng một cách hiệu quả và tránh bị lừa bởi tiếng ồn thị trường ngắn hạn
  • Sử dụng kết hợp đường trung bình chậm để cải thiện chất lượng tín hiệu giao dịch
  • Thiết lập điểm dừng để kiểm soát rủi ro của một giao dịch
  • Giới hạn thời gian giao dịch để tránh biến động lớn trong các sự kiện lớn
  • Đánh dấu tín hiệu giao dịch trên đường K, tạo ra hỗ trợ thị giác, tăng trực quan

Phân tích rủi ro

  • Hệ thống hai dòng đồng nhất dễ tạo ra nhiều tín hiệu giả, giao dịch thường xuyên gây ra áp lực chi phí giao dịch
  • Cần thiết lập các tham số đường trung bình hợp lý, nếu không hiệu quả làm mịn không tốt hoặc tạo ra quá nhiều vấn đề về thời gian chờ
  • Hệ thống trung tuyến bị trì trệ, có thể bỏ lỡ điểm chuyển hướng
  • Điểm dừng cố định có thể quá ngẫu nhiên và không thể điều chỉnh động
  • Giới hạn thời gian giao dịch có thể bỏ lỡ cơ hội giao dịch trong các khoảng thời gian khác

Bạn có thể giảm rủi ro bằng cách điều chỉnh tham số đường trung bình, tối ưu hóa chiến lược dừng lỗ, loại bỏ giới hạn thời gian hoặc thiết lập khoảng thời gian giao dịch hợp lý hơn. Bạn cũng có thể xem xét kết hợp các chỉ số khác làm điều kiện lọc để tránh quá nhiều tín hiệu giả.

Hướng tối ưu hóa

  • Có thể thử nghiệm các kết hợp của các chu kỳ trung bình khác nhau để tìm tham số tốt nhất
  • Có thể xem xét thay đổi stop loss thành theo dõi động, ví dụ như gắn với ATR
  • Các chỉ số khác có thể được đưa vào như MACD, KD, v.v. như tín hiệu lọc
  • Có thể tối ưu hóa khoảng thời gian giao dịch để nắm bắt nhiều cơ hội giao dịch hơn
  • Có thể kết hợp chiến lược phá vỡ để tìm tín hiệu phá vỡ gần đường trung bình
  • Có thể thiết lập một cơ chế thoát động để chủ động dừng lỗ khi giá vào một khoảng

Tóm tắt

Chiến lược này dễ thực hiện, có ý tưởng rõ ràng và phù hợp với người mới bắt đầu. Tuy nhiên, nó có thể tạo ra nhiều tín hiệu giả và vấn đề về trễ thời gian. Có thể cải thiện chiến lược bằng cách tối ưu hóa tham số, giới thiệu các chỉ số phụ trợ và các phương pháp khác để làm cho chiến lược ổn định và đáng tin cậy.

Mã nguồn chiến lược
/*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)