Tài nguyên đang được tải lên... tải...

Chiến lược giao dịch chỉ số chỉ số tăng gấp ba lần

Tác giả:ChaoZhang, Ngày: 2023-12-15 15:39:45
Tags:

img

Tổng quan

Chiến lược này sử dụng các chỉ số trung bình động kép và các chỉ số trung bình động nhân ba, kết hợp với các chỉ số chứng khoán, để tạo thành một chiến lược giao dịch theo dõi xu hướng tương đối ổn định và đáng tin cậy. Ý tưởng chính của nó là phát hành tín hiệu giao dịch khi chỉ số trung bình động phát hiện dấu chéo vàng hoặc dấu chéo chết; trong khi chỉ số chứng khoán được sử dụng để giúp đánh giá các tình huống mua quá mức và bán quá mức để tránh tạo ra các tín hiệu sai trong các biến động thị trường mạnh mẽ.

Nguyên tắc

Chiến lược này chủ yếu bao gồm bốn phần:

  1. Chỉ số Đường trung bình động kép: Tính toán các đường trung bình chuyển động theo hàm số (EMA) 50 và 100 lần tương ứng. Nó tạo ra tín hiệu mua khi đường EMA ngắn hạn vượt qua đường EMA dài hạn, và tín hiệu bán khi vượt qua đường EMA thấp hơn.

  2. Triple Exponential Indicator: Tính toán các đường trung bình động theo hàm số 50 giai đoạn, 100 giai đoạn và 200 giai đoạn để xác định hướng xu hướng thị trường. Khi 50EMA> 100EMA> 200EMA, đó là một thị trường tăng. Khi 50EMA < 100EMA < 200EMA, đó là một thị trường giảm.

  3. Chỉ số Stochastic: Tính toán các giá trị K và D 6 ngày của RSI để xác định điều kiện mua quá mức và bán quá mức. Khi giá trị K vượt quá giá trị D, nó bị bán quá mức. Khi vượt dưới, nó bị mua quá mức.

  4. Tín hiệu giao dịch: Chỉ khi chỉ số trung bình động kép tạo ra một tín hiệu cùng một lúc khi thị trường phù hợp với trạng thái tăng hoặc giảm của trung bình động ba cấp số, và chỉ số chứng khoán không hiển thị mua quá mức hoặc bán quá mức, các lệnh giao dịch thực sự sẽ được phát hành.

Ưu điểm

Chiến lược này kết hợp các lợi thế của các chỉ số trung bình động và chỉ số chứng khoán. Nó tính đến cả sự phán đoán về hướng xu hướng và tình trạng mua quá mức / bán quá mức của thị trường khi phát hành tín hiệu giao dịch, do đó lọc ra tiếng ồn hiệu quả hơn để theo dõi xu hướng rõ ràng hơn. Ngoài ra, nó sử dụng trung bình động nhân ba để xác định xu hướng tổng thể, làm cho các tín hiệu đáng tin cậy hơn. Chiến lược này đơn giản, dễ thực hiện và dễ tối ưu hóa.

Rủi ro và biện pháp đối phó

Rủi ro lớn nhất của chiến lược này là nó dựa trên các đánh giá chỉ số. Khi chỉ số đưa ra các tín hiệu sai, nó có thể dễ dàng dẫn đến các giao dịch thất bại. Ngoài ra, khi sử dụng các đường trung bình động chu kỳ dài hơn để xác định xu hướng tổng thể, một số cơ hội ngắn hạn cũng có thể bị bỏ lỡ. Các biện pháp đối phó rủi ro chính là như sau:

  1. Tối ưu hóa các tham số chỉ số và điều chỉnh các kết hợp chu kỳ của các đường trung bình động kép và đường trung bình động nhân ba để phù hợp hơn với đặc điểm thị trường.

  2. Tích hợp nhiều chỉ số hơn cho các hoạt động CANCEL, chấm dứt các giao dịch hiện tại khi thị trường cho thấy biến động mạnh mẽ.

  3. Sử dụng các chiến lược tăng giá ngắn hạn để tận dụng các cơ hội ngắn hạn trong thị trường tăng giá dài hạn.

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

Các khía cạnh chính mà chiến lược này có thể được tối ưu hóa bao gồm:

  1. Điều chỉnh các tham số chu kỳ của đường trung bình động kép và đường trung bình động nhân ba để tối ưu hóa các chỉ số thích nghi với đặc điểm thị trường.

  2. Tăng VOLUME, MACD và các phán đoán khác để tránh biến động giá bất thường gây ra tín hiệu sai.

  3. Tốt hơn là xác nhận xu hướng bằng cách sử dụng các mô hình nến để tránh các tín hiệu sai sau khi rút ngắn hạn.

  4. Mở rộng nó đến nhiều loại hơn như cổ phiếu, ngoại hối và kiểm tra khả năng thích nghi của chiến lược.

  5. Kết hợp các chỉ số VIX để xác định sự biến động của thị trường tổng thể và kiểm soát kích thước vị trí.

Kết luận

Chiến lược này sử dụng các chỉ số trung bình động kép để phát ra các tín hiệu giao dịch, với các chỉ số trung bình chuyển động theo hàm số ba và các chỉ số chứng khoán như các bổ sung, do đó xây dựng một chiến lược theo dõi xu hướng tương đối ổn định. Nó đơn giản, dễ thực hiện, phù hợp với các đặc điểm của thị trường, mang lại lợi nhuận ổn định. Đây là một chiến lược định lượng đáng khuyên dùng. Thông qua tối ưu hóa có mục tiêu, nó có tiềm năng đạt được kết quả tốt hơn.


/*backtest
start: 2023-12-07 00:00:00
end: 2023-12-12 08:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='5212 EMA Strategy', shorttitle='5212 EMA', overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=10, calc_on_every_tick=false)

//**Backtest Date sof
useStartPeriodTime  = input.bool(true                       , 'Start Date & Time'   , group='Date Range'    , inline='Start Period')
startPeriodTime     = input(timestamp('16 Apr 2021')   , ''                    , group='Date Range'    , inline='Start Period')
useEndPeriodTime    = input.bool(false                      , 'End Date & Time'     , group='Date Range'    , inline='End Period')
endPeriodTime       = input(timestamp('31 Dec 2222')   , ''                    , group='Date Range'    , inline='End Period')
enableHighlight     = input.bool(false                      , 'Highlight'           , group='Date Range'    , inline='Highlight')
highlightType       = input.string('Anchors'                , ''                    , group='Date Range'    , inline='Highlight'    , options=['Anchors', 'Background'])
highlightColor      = input.color(color.white               , ''                    , group='Date Range'    , inline='Highlight')
start = useStartPeriodTime ? startPeriodTime >= time : false
end = useEndPeriodTime ? endPeriodTime <= time : false
calcPeriod = true
// var line startAnchor    = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// var line endAnchor      = line.new(na, na, na, na, xloc.bar_time, extend.both, highlightColor, width=2)
// useBgcolor = false
// if enableHighlight
//     if highlightType == 'Anchors'
//         if useStartPeriodTime
//             line.set_xy1(startAnchor, startPeriodTime, low)
//             line.set_xy2(startAnchor, startPeriodTime, high)
//         if useEndPeriodTime
//             line.set_xy1(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), low)
//             line.set_xy2(endAnchor, calcPeriod ? time : line.get_x1(endAnchor), high)

//     if highlightType == 'Background'
//         useBgcolor := true
//         useBgcolor

// bgcolor(useBgcolor and calcPeriod ? color.new(highlightColor,90) : na, editable=false)
//**Backtest Date eof

src         =input(close    , 'Source'      , group='Support')
showEMA     = input(true    , 'Show EMA'    , group='Support')

//**Stochastic RSI sof
smoothK     = input.int(6   , "K"               , group='Stochastic RSI'    , minval=1)
smoothD     = input.int(6   , "D"               , group='Stochastic RSI'    , minval=1)
lengthRSI   = input.int(28  , "RSI Length"      , group='Stochastic RSI'    , minval=1)
lengthStoch = input.int(28  , "Stoch Length"    , group='Stochastic RSI'    , minval=1)

rsi1    = ta.rsi(src, lengthRSI)
k       = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d       = ta.sma(k, smoothD)
//**STochastic RSI eof

//** EMA sof
emain01     = input.int(50  , "EMAma Girang"    , group='Moving Average Exponential'    , minval=1)
emain02     = input.int(100 , "EMAma Muda"      , group='Moving Average Exponential'    , minval=1)
emain03     = input.int(200 , "EMAma Tua"       , group='Moving Average Exponential'    , minval=1)

ema01 = ta.ema(src, emain01)
ema02 = ta.ema(src, emain02)
ema03 = ta.ema(src, emain03)
plot(showEMA ? ema01 : na, 'EMAma Girang'   , color = color.new(color.orange, 0))
plot(showEMA ? ema02 : na, 'EMAma Muda'     , color = color.new(color.blue, 0))
plot(showEMA ? ema03 : na, 'EMAma Tua'      , color = color.new(color.red, 0))
//** EMA eof

//**Condition sof
emaLong     = ema01 > ema02 and ema02 > ema03 and low > ema03
emaShort    = ema01 < ema02 and ema02 < ema03 and high < ema03

longCond    = ta.crossover(k,d) and k <= 23 and emaLong
shortCond   = ta.crossunder(k,d) and k >= 77 and emaShort

longClose   = ta.crossunder(k,d) and k <= 77
shortClose  = ta.crossover(k,d) and k >= 23
longCross   = ta.crossover(ema01, ema02)
shortCross  = ta.crossunder(ema01, ema02)
//**Condition eof

//**Strategy sof
if calcPeriod and longCond
    strategy.entry('long', strategy.long, when=longCond, comment='EN Long')
strategy.close('long', when=shortClose, comment='EX Long')
strategy.close('long', when=shortCross, comment='MD Short')

if calcPeriod and shortCond
    strategy.entry('short', strategy.short, when=shortCond, comment='EN Short')
strategy.close('short', when=longClose, comment='EX Short')
strategy.close('short', when=longCross, comment='MD Long')

if calcPeriod == false and ta.crossover(ema01, ema02) or ta.crossunder(ema01, ema02)
    strategy.cancel('long')
    strategy.cancel('short')
//**Strategy eof

//**Label sof
entryText       = str.tostring(strategy.position_avg_price, '##.###')
longText    = 'Long Entry : ' + entryText 
shortText   = 'Short Entry : ' + entryText
noTrade     = 'Sleeping Mode'

LongTrade = strategy.position_size > 0
ShortTrade = strategy.position_size < 0

Tekslabel = LongTrade ? longText : ShortTrade ? shortText : noTrade

xPosition = timenow + math.round(ta.change(time)*1)
yPosition = ta.highest(1)
labelColor = LongTrade ? color.new(color.aqua, 0) : ShortTrade ? color.new(color.red, 0) : color.new(color.gray, 0)
textColor   = LongTrade ? color.new(color.black, 0) : ShortTrade ? color.new(color.white, 0) : color.new(color.white, 0)

// lab_l = label.new(
//           xPosition, yPosition, Tekslabel,
//           color=labelColor, 
//           textcolor=textColor, 
//           style =  label.style_label_left,
//           textalign=text.align_left,
//           xloc=xloc.bar_time, yloc = yloc.price)

// label.delete(lab_l[1])
//**Strategy eof


Thêm nữa