Chiến lược trung bình di chuyển kép siêu xu hướng

Tác giả:ChaoZhang, Ngày: 2024-01-16 15:19:09
Tags:

img

Tổng quan

Chiến lược Super Trend Dual Moving Average là một chiến lược giao dịch định lượng dựa trên chỉ số Super Trend và chỉ số Simple Moving Average.

Chiến lược logic

Chiến lược sử dụng hai chỉ số:

  1. Chỉ số siêu xu hướng: Nó tính toán các đường ray trên và dưới dựa trên sự biến động thực sự ATR và một trình nhân. Khi giá đóng cao hơn đường ray trên, nó chỉ ra một quan điểm tăng. Khi thấp hơn đường ray dưới, nó chỉ ra một quan điểm giảm.

  2. Trung bình di chuyển đơn giản 200 ngày: Nó lấy trung bình số học của giá đóng trong 200 ngày qua. Khi giá đóng cao hơn đường này, nó đại diện cho xu hướng tăng lớn. Khi thấp hơn đường này, nó đại diện cho xu hướng giảm lớn.

Chiến lược logic:

  1. Khi chỉ số Super Trend đưa ra tín hiệu tăng (giá trị Super Trend lớn hơn 0) và giá đóng cao hơn MA 200 ngày, mua dài.

  2. Khi chỉ số Super Trend đưa ra tín hiệu giảm (giá trị Super Trend nhỏ hơn 0) và giá đóng thấp hơn MA 200 ngày, hãy bán ngắn.

  3. Đóng vị trí khi chỉ số Super Trend đưa ra tín hiệu ngược lại so với tín hiệu trước đó.

  4. Stop loss được thiết lập ở mức 25%.

Phân tích lợi thế

Chiến lược này kết hợp chỉ số Super Trend để xác định xu hướng ngắn hạn và MA 200 ngày để xác định xu hướng dài hạn, có thể lọc hiệu quả các đột phá sai, giảm tần suất giao dịch trong khi cải thiện tỷ lệ thắng.

Phân tích rủi ro

Rủi ro chính của chiến lược này là phạm vi dừng lỗ tương đối lớn. Nó có thể làm tăng nguy cơ thanh lý bắt buộc trong các tình huống đòn bẩy cao. Ngoài ra, khi thị trường bị giới hạn phạm vi, chỉ số Super Trend sẽ tạo ra các tín hiệu dư thừa, do đó làm tăng chi phí giao dịch và tần suất giao dịch.

Rủi ro có thể được giảm bằng cách điều chỉnh thích hợp thời gian ATR, các tham số nhân và phạm vi dừng lỗ.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Điều chỉnh thời gian ATR và các thông số nhân để tối ưu hóa chỉ số Super Trend.

  2. Hãy thử các chỉ số MA khác như EMA và VIDYA để thay thế.

  3. Thêm các chỉ số phụ khác như kênh BOLL hoặc chỉ số KD để lọc tín hiệu thêm.

  4. Tối ưu hóa chiến lược dừng lỗ, chẳng hạn như di chuyển nó đến điểm thoái vốn hoặc dừng lại cùng với các mức khung thời gian cao hơn.

Tóm lại

Nhìn chung, chiến lược này rất thực tế. Nó xem xét cả phán đoán xu hướng ngắn hạn và phán đoán xu hướng dài hạn với các cài đặt dừng lỗ hợp lý. Nó có thể đạt được kết quả tốt hơn thông qua điều chỉnh và tối ưu hóa tham số, đáng để xác minh và áp dụng giao dịch thực sự.


/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5

strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01)


// Parametry wskaźnika SuperTrend
atrLength = input(10, title="Lenght ATR")
factor = input(3.0, title="Mult.")

// Parametry dla SMA
lengthSMA = input(200, title="Lenght SMA")

// Parametry dla Stop Loss
sl = input.float(25.0, '% Stop Loss', step=0.1)

// Obliczanie ATR
atr = ta.atr(atrLength)

// Obliczanie podstawowej wartości SuperTrend
up = hl2 - (factor * atr)
dn = hl2 + (factor * atr)

// Obliczanie 200-SMA
sma200 = ta.sma(close, lengthSMA)

// Inicjalizacja zmiennych
var float upLevel = na
var float dnLevel = na
var int trend = na
var int trendWithFilter = na

// Logika SuperTrend
upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up
dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn

trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1)

// Filtr SMA i aktualizacja trendWithFilter
trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0)

// Logika wejścia
longCondition = trend == 1  
shortCondition = trend == -1  

// Wejście w pozycje
if (longCondition) and  close > sma200
    strategy.entry("Long", strategy.long)
if (shortCondition) and close < sma200
    strategy.entry("Short", strategy.short)

// Warunki zamknięcia pozycji
Long_close = trend == -1 and close > sma200
Short_close = trend == 1  and close < sma200

// Zamknięcie pozycji
if (Long_close)
    strategy.close("Long")
if (Short_close)
    strategy.close("Short")

// Kolory superTrendu z filtrem sma200
trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue

//ploty
plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend")

// Stop Loss ( this code is from author RafaelZioni, modified by wielkieef )
per(procent) =>
    strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
// --------------------------------------------------------------------------------------------------------------------

strategy.exit('SL',loss=per(sl))



//by wielkieef


Thêm nữa