Chiến lược theo xu hướng động lực

Tác giả:ChaoZhang, Ngày: 2024-03-11 10:53:50
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số Aroon và Histogram Sức mạnh tuyệt đối (ASH) để xác định xu hướng thị trường và cơ hội giao dịch tiềm năng. Aroon giúp xác định sức mạnh và hướng của xu hướng, trong khi ASH cung cấp thông tin chi tiết về sức mạnh động lực. Bằng cách kết hợp các chỉ số này, chiến lược nhằm mục đích nắm bắt các giao dịch có lợi nhuận trên thị trường Ethereum.

Chiến lược logic

Chiến lược sử dụng hai bộ tham số cho chỉ số Aroon:

  • Các vị trí dài: Thời gian Aroon là 56 (cao) và 20 (dưới)
  • Các vị trí ngắn: Thời gian Aroon là 17 (cao) và 55 (dưới)

ASH được tính theo chiều dài 9 thanh bằng cách sử dụng giá đóng cửa làm nguồn dữ liệu.

Chiến lược bao gồm các quy tắc nhập cảnh và xuất cảnh cụ thể:

  1. Long Entry: Một vị trí dài được bắt đầu khi chỉ số Aroon vượt qua ngưỡng thấp hơn, báo hiệu xu hướng tăng tiềm năng.
  2. Long Exit: Một vị trí dài được đóng khi Aroon vượt qua dưới ngưỡng thấp hơn.
  3. Short Entry: Một vị trí ngắn được bắt đầu khi Aroon vượt qua dưới ngưỡng trên, báo hiệu một xu hướng giảm tiềm năng.
  4. Short Exit: Một vị trí ngắn được đóng khi Aroon vượt qua ngưỡng trên.

Phân tích lợi thế

Ưu điểm chính của chiến lược này là sự phối hợp từ việc kết hợp hai chỉ số. Aroon đo hiệu quả hướng và sức mạnh của xu hướng. ASH cung cấp thông tin chi tiết về động lực bổ sung để hỗ trợ các tín hiệu nhập và xuất thời gian.

Sử dụng hai thông số Aroon cho phép linh hoạt trong việc thích nghi với các điều kiện thị trường thay đổi.

Phân tích rủi ro

Các hạn chế chính xuất phát từ chính các chỉ số. Aroon đấu tranh trong các thị trường giới hạn phạm vi và có thể tạo ra các tín hiệu sai. ASH cũng dễ bị phản ứng quá mức trong ngắn hạn.

Các thiết lập tham số không phù hợp cũng có thể ảnh hưởng đến hiệu suất. Thời gian dài / ngắn của Aroon và chiều dài của ASH sẽ cần tối ưu hóa để tìm ra sự kết hợp lý tưởng.

Hướng dẫn cải thiện

Các bộ lọc bổ sung có thể được thêm vào, chẳng hạn như đột phá giá hoặc tăng khối lượng, để tránh các tín hiệu sai trong điều kiện bất ổn.

Các kết hợp tham số và trọng lượng khác nhau có thể được thử nghiệm để tìm các cài đặt tối ưu. Các chỉ số khác như RSI hoặc KD cũng có thể bổ sung cho chiến lược.

Kết luận

Chiến lược này kết hợp hiệu quả các điểm mạnh của Aroon và ASH để xác nhận hai xu hướng và điểm chuyển đổi. Nhưng các thông số và giới hạn chỉ số vẫn cần được tinh chỉnh. Khái niệm sáng tạo cho thấy hứa hẹn cải tiến và thử nghiệm thêm.


/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © IkkeOmar

//@version=5
strategy("Aroon and ASH strategy - ETHERIUM [IkkeOmar]", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1, commission_value=0, slippage=2)


// AROON SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Inputs for longs 

length_upper_long = input.int(56, minval=15)
length_lower_long = input.int(20, minval=5)

// Inputs for shorts
//Aroon Short Side Inputs
length_upper_short = input.int(17, minval=10)
length_lower_short = input.int(55)

// ABSOLUTE STRENGTH HISTOGRAM SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
length = input(title='Length', defval=9)
src = input(title='Source', defval=close)




// CALCULATIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Aroon
upper_long = 100 * (ta.highestbars(high, length_upper_long + 1) + length_upper_long) / length_upper_long
lower_long = 100 * (ta.lowestbars(low, length_lower_long + 1) + length_lower_long) / length_lower_long

upper_short = 100 * (ta.highestbars(high, length_upper_short + 1) + length_upper_short) / length_upper_short
lower_short = 100 * (ta.lowestbars(low, length_lower_short + 1) + length_lower_short) / length_lower_short

// Ahrens Moving Average
ahma = 0.0
ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / length



// CONDITIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


// Options that configure the backtest start date
startDate = input(title='Start Date', defval=timestamp('01 Jan 2018 00:00'))


// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Long')

// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'


// Check if the close time of the current bar falls inside the date range
inDateRange = true

longCondition = ta.crossover(upper_long, lower_long) and inDateRange and lower_long >= 5 and longOK
longCloseCondition = ta.crossunder(upper_long, lower_long) and inDateRange

shortCondition = ta.crossunder(upper_short, lower_short) and inDateRange and shortOK
shortCloseCondition = ta.crossover(upper_short, lower_short) and inDateRange

// Start off with the initial states for the longs and shorts
var in_short_trade = false
var in_long_trade = false

var long_signal = false
var short_signal = false

if longCondition
    long_signal := true
if longCloseCondition
    long_signal := false
    
if shortCondition
    short_signal := true
if shortCloseCondition
    short_signal := false

// While no trades active and short condition is met, OPEN short
if true and in_short_trade == false and in_long_trade == false and shortCondition
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// While no trades and long condition is met, OPEN LONG
if true and in_short_trade == false and in_long_trade == false and longCondition
    strategy.entry("long", strategy.long, when = longCondition)
    in_long_trade := true
    in_short_trade := false

    
// WHILE short trade and long condition is met, CLOSE SHORT and OPEN LONG
if true and in_short_trade == true and in_long_trade == false and longCondition
    // strategy.close("short", when = longCondition)
    strategy.entry("long", strategy.long, when = longCondition)
    in_short_trade := false
    in_long_trade := true
    
    
// WHILE long trade and short condition is met, CLOSE LONG and OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and shortCondition
    // strategy.close("long", when = shortCondition)
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// WHILE long trade and exit long condition is met, CLOSE LONG
// if short signal is active, OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and longCloseCondition
    if short_signal
        strategy.entry("short", strategy.short, when = short_signal)
        in_long_trade := false
        in_short_trade := true
    else
        strategy.close("long", when = longCloseCondition)
        in_long_trade := false
        in_short_trade := false

// if in short trade only and exit short condition is met, close the short
// if long signal still active, OPEN LONG
if true and in_short_trade == true and in_long_trade == false and shortCloseCondition
    if long_signal
        strategy.entry("long", strategy.long, when = long_signal)
        in_short_trade := false
        in_long_trade := true
    else
        strategy.close("short", when = shortCloseCondition)
        in_short_trade := false
        in_long_trade := false






Thêm nữa