Chiến lược kiệt sức động lực

Tác giả:ChaoZhang, Ngày: 2023-11-16 17:54:00
Tags:

img

Tổng quan

Chiến lược kiệt sức đà là một chiến lược theo xu hướng sử dụng các đường trung bình động và dao động tỷ lệ phần trăm giá để giảm thiểu sự tiếp xúc giảm.

Chiến lược logic

Các chỉ số cốt lõi của chiến lược này là Thanh suất và Thanh suất Moving Average. Thanh suất là một thước đo của dao động giá, được tính toán từ giá gần, cao và thấp. Tính toán cụ thể là: (thấp hơn + cao hơn + trung bình di chuyển của Thanh suất) / trung bình di chuyển của Thanh suất.

Ngoài ra, chiến lược cũng sử dụng các đường trung bình động dài và ngắn hạn để giúp xác định xu hướng, bao gồm các đường 300 ngày, 150 ngày và 50 ngày. Khi đường trung bình động ngắn hạn vượt qua dưới đường trung bình động dài hạn, nó báo hiệu một sự đảo ngược xu hướng và chúng ta nên xem xét dừng lỗ.

MACD cũng được sử dụng cho tín hiệu mua và bán ngắn hạn. Khi đường MACD vượt qua trên đường tín hiệu, nó chỉ ra tín hiệu tăng, và khi MACD vượt qua dưới đường tín hiệu, nó chỉ ra tín hiệu giảm.

Logic vào và ra cụ thể là:

Tín hiệu mua: RSI vượt quá mức trung bình chuyển động RSI, và MA 50 ngày trên MA 150 ngày; hoặc RSI dưới 30.

Đặt lỗ ngắn hạn: Chết mỏi vượt dưới Trung bình Di chuyển Chết mỏi; hoặc MACD vượt dưới đường tín hiệu.

Đặt giá trị giá trị giá trị giá trị giá trị giá trị giá trị giá trị giá trị giá trị giá trị

Ưu điểm của Chiến lược

Chiến lược này kết hợp nhiều chỉ số để xác định xu hướng cạn kiệt và kiểm soát rủi ro.

  1. Chỉ số kiệt sức có thể xác định hiệu quả việc củng cố và đảo ngược xu hướng.

  2. Sử dụng trung bình động của nhiều khung thời gian để xác định xu hướng tránh bị đánh lừa bởi tiếng ồn thị trường ngắn hạn.

  3. MACD giúp xác nhận tín hiệu mua và bán, cải thiện hiệu suất của chiến lược.

  4. RSI đóng vai trò của nó mua thấp và bán cao, mua ở những tình huống bán quá mức.

  5. Chiến lược lấy lợi nhuận và dừng lỗ rõ ràng có thể kiểm soát hiệu quả rủi ro của mỗi giao dịch.

Rủi ro của chiến lược

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Dựa trên nhiều chỉ số, cài đặt tham số không chính xác có thể dẫn đến tín hiệu giao dịch sai. Các tham số cần phải được thử nghiệm và tối ưu hóa nhiều lần.

  2. Chỉ số kiệt sức không hoàn toàn đáng tin cậy, nó có thể thất bại khi có sự chênh lệch giá.

  3. Đặt stop loss không đúng có thể dẫn đến việc dừng lại bởi biến động ngắn hạn.

  4. Khi thị trường tổng thể dao động, các chỉ số có thể thất bại.

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. Kiểm tra các kết hợp tham số khác nhau để tìm các tham số tối ưu và giảm tín hiệu sai. Các tham số điều chỉnh chính bao gồm thời gian trung bình động, Thời gian kiệt sức v.v.

  2. Kết hợp các chỉ số biến động như ATR để điều chỉnh động phạm vi dừng lỗ theo biến động thị trường.

  3. Tối ưu hóa kích thước vị trí, với các quy tắc kích thước vị trí khác nhau cho các điều kiện thị trường khác nhau.

  4. Kết hợp các mẫu biểu đồ như đường xu hướng, đường hỗ trợ để cải thiện hiệu suất chiến lược.

  5. Thêm các thuật toán học máy để hỗ trợ đánh giá hiệu quả của các chỉ số chính, nhận ra tối ưu hóa năng động.

Kết luận

Chiến lược kiệt sức động lực kết hợp nhiều chỉ số để xác định sự đảo ngược xu hướng và kiểm soát rủi ro. Nó có khả năng theo xu hướng và có thể xác định hiệu quả các điểm vào và ra. Các cải tiến hơn nữa có thể được thực hiện thông qua tối ưu hóa tham số, quy tắc dừng lỗ, kết hợp các mẫu biểu đồ và hơn thế nữa.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
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/
// © spiritualhealer117

//@version=4

strategy("Infiten Slope Strategy", overlay=false,calc_on_every_tick = true, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)
// //TIME RESTRICT FOR BACKTESTING {
// inDateRange = (time >= timestamp(syminfo.timezone, 2003,
//          1, 1, 0, 0)) and
//      (time < timestamp(syminfo.timezone, 2021, 5, 25, 0, 0))
// //}

//OPTIMAL PARAMETERS {
daysback = 30
volumesens = 1.618
//}
//Calculating Exhaustion and Exhaustion Moving Average {
clh = close+low+high
exhaustion = (clh-sma(clh,daysback))/sma(clh,daysback)
exhaustionSma = sma(exhaustion,daysback)
//}
//Long Term Moving Averages for sell signals {
red = sma(close,300)
white = sma(close,150)
blue = sma(close,50)

plot(red,color=color.red)
plot(white,color=color.white)
plot(blue,color=color.blue)
//}
//MACD Calculation {
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
//}
//SIGMOID Bottom {
timeAdjust = 300/sma(close,500)
//}
//RSI bottom {
len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(close), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
//}

//Entry and exit conditions {
//Sell conditions
bigVolume = sma(volume,30)*volumesens
sellcond1 = crossunder(exhaustion,exhaustionSma) and volume > bigVolume
sellcond2 = crossunder(macd,signal) and volume > bigVolume
midtermsellcond1 = crossunder(blue,white)
longtermsellcond1 = white < red

//Buy conditions
buycond = crossover(exhaustion,exhaustionSma) and not longtermsellcond1
buycond2 = rsi < 30
buycond3 = crossover(blue,white) and longtermsellcond1
//}

//Backtest Run Buy/Sell Commands {
strategy.entry("buycond",true, when=buycond and bigVolume)
strategy.entry("buycond2",true, when=buycond2 and bigVolume)

strategy.close_all(when=sellcond1,comment="short term sell signal 1")
strategy.close_all(when=midtermsellcond1, comment="mid term sell signal 1")
strategy.close_all(when=longtermsellcond1, comment="long term sell signal 1")
strategy.close_all(when=sellcond2, comment="short term sell signal 2")
plot(strategy.position_size)

//Sell on last tested day (only for data collection)
//strategy.close_all(when=not inDateRange)
//}



Thêm nữa