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


Ngày tạo: 2023-11-06 16:58:57 sửa đổi lần cuối: 2023-11-06 16:58:57
sao chép: 0 Số nhấp chuột: 746
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược này sử dụng ba kết hợp trung bình di chuyển để xác định xu hướng và theo dõi xu hướng dựa trên mối quan hệ thứ tự của trung bình di chuyển. Khi xếp hàng theo thứ tự trung bình di chuyển nhanh, trung bình di chuyển nhanh và trung bình di chuyển chậm, hãy làm nhiều hơn; Khi xếp hàng theo thứ tự trung bình di chuyển chậm, trung bình di chuyển nhanh và trung bình di chuyển nhanh, hãy làm trống.

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

Chiến lược này sử dụng các trung bình di chuyển trong ba chu kỳ khác nhau, bao gồm trung bình di chuyển nhanh, trung bình di chuyển nhanh và trung bình di chuyển chậm.

Điều kiện tham gia:

  1. Làm nhiều hơn: Khi trung bình di chuyển nhanh > trung bình di chuyển trung bình > trung bình di chuyển chậm, cho rằng thị trường đang có xu hướng tăng, làm nhiều hơn.
  2. Cắt lỗ: Khi đường trung bình di chuyển chậm < đường trung bình di chuyển trung bình < đường trung bình di chuyển nhanh, cho rằng thị trường đang có xu hướng giảm, hãy cắt lỗ.

Điều kiện:

  1. Đường trung bình di chuyển xuất hiện: Ba đường trung bình di chuyển theo thứ tự xảy ra khi đảo ngược và thanh toán.
  2. Đặt điểm dừng lỗ: thiết lập điểm dừng lỗ cố định, chẳng hạn như dừng lỗ 12% và dừng lỗ 1% sau khi đạt đến giá dừng hoặc dừng lỗ.

Chiến lược này đơn giản và trực tiếp, sử dụng ba đường trung bình di chuyển để đánh giá xu hướng thị trường, thực hiện giao dịch theo xu hướng, phù hợp với thị trường có xu hướng mạnh.

Phân tích lợi thế (Advantage Analysis)

  • Sử dụng ba đường trung bình di chuyển để đánh giá xu hướng, lọc tiếng ồn thị trường, và nhận ra xu hướng.
  • Sử dụng các trung bình di chuyển theo chu kỳ khác nhau, bạn có thể đánh giá chính xác hơn các điểm biến hướng.
  • Kiểm soát rủi ro tài chính với chỉ số trung bình di chuyển và điểm dừng cố định.
  • Các chiến lược này rất đơn giản, trực quan và dễ hiểu.
  • Các tham số chu kỳ của trung bình di chuyển có thể được tối ưu hóa để phù hợp với các trường hợp chu kỳ khác nhau.

Rủi ro và cải tiến

  • Trong các trường hợp chu kỳ lớn, trung bình di chuyển có thể tạo ra nhiều sai lầm, dẫn đến tổn thất không cần thiết.
  • Có thể xem xét thêm các chỉ số khác hoặc điều kiện lọc để tăng tỷ lệ lợi nhuận.
  • Có thể tối ưu hóa các tham số chu kỳ của trung bình di chuyển để phù hợp với các tình huống thị trường rộng hơn.
  • Có thể kết hợp các chỉ số xu hướng mạnh và yếu để tránh theo đuổi sự suy giảm.
  • Có thể thêm tự động dừng lỗ để tránh tổn thất mở rộng.

Kết luận

Chiến lược này có lợi thế là dễ thực hiện, có thể điều chỉnh các tham số chu kỳ của đường trung bình di chuyển để phù hợp với các tình huống chu kỳ khác nhau. Tuy nhiên, cũng có một số rủi ro sai lầm, có thể được tối ưu hóa bằng cách thêm các chỉ số hoặc điều kiện khác, giảm tổn thất không cần thiết, tăng tỷ lệ lợi nhuận của chiến lược. Nói chung, chiến lược này phù hợp cho người mới bắt đầu quan tâm đến giao dịch xu hướng để học tập và thực hành.

Mã nguồn chiến lược
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
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/
// © Jompatan

//@version=5
strategy('Strategy Triple Moving Average', overlay=true, initial_capital = 1000, commission_value=0.04, max_labels_count=200)

//INPUTS
mov_ave = input.string(defval="EMA", title='Moving Average type:', options= ["EMA", "SMA"])

period_1 = input.int(9,  title='Period 1', inline="1", group= "============== Moving Average Inputs ==============")
period_2 = input.int(21, title='Period 2', inline="2", group= "============== Moving Average Inputs ==============")
period_3 = input.int(50, title='Period 3', inline="3", group= "============== Moving Average Inputs ==============")

source_1 = input.source(close, title='Source 1', inline="1", group= "============== Moving Average Inputs ==============")
source_2 = input.source(close, title='Source 2', inline="2", group= "============== Moving Average Inputs ==============")
source_3 = input.source(close, title='Source 3', inline="3", group= "============== Moving Average Inputs ==============")


//EXIT CONDITIONS
exit_ma   = input.bool(true, title= "Exit by Moving average condition", group="================ EXIT CONDITIONS ================")
exit_TPSL = input.bool(false, title= "Exit by Take Profit and StopLoss", group="================ EXIT CONDITIONS ================")
TP        = input.int(12, title='Take Profit', step=1, group="================ EXIT CONDITIONS ================")
SL        = input.int(1, title='Stop Loss', step=1, group="================ EXIT CONDITIONS ================")
plot_TPSL = input.bool(false, title='Show TP/SL lines', group="================ EXIT CONDITIONS ================")


//Date filters
desde = input(defval= timestamp("01 Jan 2023 00:00 -3000"), title="From", inline="12", group= "============= DATE FILTERS =============")
hasta = input(defval= timestamp("01 Oct 2099 00:00 -3000"), title="To  ", inline="13", group= "============= DATE FILTERS =============")
enRango = true

//COMMENTS
//entry_long_comment  = input.string(defval=" ", title="Entry Long comment: ", inline="14", group="============= COMMENTS =============")
//exit_long_comment   = input.string(defval=" ", title="Exit Long comment:  ", inline="15", group="============= COMMENTS =============")
//entry_short_comment = input.string(defval=" ", title="Entry Short comment:", inline="16", group="============= COMMENTS =============")
//exit_short_comment  = input.string(defval=" ", title="Exit Short comment: ", inline="17", group="============= COMMENTS =============")

//============================================================

//Selecting Moving average type
ma1 = mov_ave == "EMA" ? ta.ema(source_1, period_1) : ta.sma(source_1, period_1)
ma2 = mov_ave == "EMA" ? ta.ema(source_2, period_2) : ta.sma(source_2, period_2)
ma3 = mov_ave == "EMA" ? ta.ema(source_3, period_3) : ta.sma(source_3, period_3)

//============================================================
//Entry Long condition: Grouped Moving average from: (ma fast > ma middle > ma slow)
long_condition = (ma1 > ma2) and (ma2 > ma3)

//Entry Short condition: Grouped Moving average from: (ma fast < ma middle < ma slow)
short_condition = (ma1 < ma2) and (ma2 < ma3)

//============================================================

cantidad       = strategy.equity / close
comprado_long  = strategy.position_size > 0
comprado_short = strategy.position_size < 0

var long_profit_price  = 0.0
var long_stop_price    = 0.0
var short_profit_price = 0.0
var short_stop_price   = 0.0

//============================================================

//ENTRY LONG
if not comprado_long and not comprado_short and long_condition and not long_condition[1] and enRango
    strategy.entry('Long', strategy.long, qty=cantidad, comment= "Entry Long")
    if exit_TPSL
        long_profit_price := close * (1 + TP/100)
        long_stop_price   := close * (1 - SL/100)
    else
        long_profit_price := na
        long_stop_price   := na
//============================================================


//ENTRY SHORT
if not comprado_long and not comprado_short and short_condition and not short_condition[1] and enRango
    strategy.entry('Short', strategy.short, qty=cantidad, comment= "Entry Short")
    if exit_TPSL
        short_profit_price := close * (1 - TP/100)
        short_stop_price   := close * (1 + SL/100)
    else
        short_profit_price := na
        short_stop_price   := na
//============================================================


//EXIT LONG 
if comprado_long and exit_ma and long_condition[1] and not long_condition
    strategy.close('Long', comment='Exit-Long(MA)')
if comprado_long and exit_TPSL
    strategy.exit('Long', limit=long_profit_price, stop=long_stop_price, comment='Exit-Long(TP/SL)')
//============================================================


//EXIT SHORT 
if comprado_short and exit_ma and short_condition[1] and not short_condition
    strategy.close('Short', comment='Exit-Short(MA)')
if comprado_short and exit_TPSL
    strategy.exit('Short', limit=short_profit_price, stop=short_stop_price, comment='Exit-Short(TP/SL)')
//============================================================



//PLOTS
plot(ma1, linewidth=2, color=color.rgb(255, 255, 255))
plot(ma2, linewidth=2, color=color.rgb(144, 255, 252))
plot(ma3, linewidth=2, color=color.rgb(49, 167, 255))
//Plot Take Profit line
plot(plot_TPSL ? comprado_long  ? long_profit_price : comprado_short ? short_profit_price : na : na, color=color.new(color.lime, 30), style= plot.style_linebr)
//Plot StopLoss line
plot(plot_TPSL ? comprado_long ? long_stop_price : comprado_short ? short_stop_price : na : na, color=color.new(color.red, 30), style= plot.style_linebr)