Chiến lược đẩy mạnh

Tác giả:ChaoZhang, Ngày: 2023-11-14 14:04:24
Tags:

img

Tổng quan

Ý tưởng chính của chiến lược này là kết hợp chỉ số đà Lazy Bear và chỉ số MFI Crypto Face để đi dài khi xu hướng tăng và đi ngắn khi xu hướng giảm, thực hiện một chiến lược giao dịch định lượng theo xu hướng thị trường.

Chiến lược logic

  1. Sử dụng chỉ số BlueWave của Lazy Bear, tính toán sự hồi quy tuyến tính của giá đóng so với mức cao nhất, thấp nhất và trung bình gần nhất trong 20 ngày để xác định hướng xu hướng. Khi BlueWave vượt trên 0, nó chỉ ra xu hướng tăng; khi vượt dưới 0, nó chỉ ra xu hướng giảm.

  2. Sử dụng chỉ số MFI được cải tiến bởi Crypto Face, tính toán tổng sự thay đổi giá và khối lượng trong 58 ngày qua để xác định dòng tiền. MFI lớn hơn 0 chỉ ra dòng tiền chảy vào, nhỏ hơn 0 chỉ ra dòng tiền chảy ra.

  3. Khi BlueWave vượt trên 0 và MFI lớn hơn 0, một tín hiệu mua được tạo ra để mở một vị trí dài; khi BlueWave vượt dưới 0 và MFI nhỏ hơn 0, một tín hiệu bán được tạo ra để mở một vị trí ngắn.

  4. Thiết lập các điều kiện dừng lỗ và lấy lợi nhuận để theo xu hướng thị trường cho lợi nhuận, trong khi kiểm soát rủi ro.

Ưu điểm

  1. Kết hợp hai chỉ số có thể xác định chính xác hơn hướng xu hướng thị trường.

  2. Đường cong mượt mà của BlueWave tránh sự thiên vị từ các điểm ngoại lệ, làm cho đánh giá xu hướng đáng tin cậy hơn.

  3. MFI có thể xác định dòng tiền, tránh tổn thất từ các vụ phá vỡ giả.

  4. Chiến lược có ít tham số và dễ thực hiện và vận hành.

  5. Các thiết lập dừng lỗ và lấy lợi nhuận linh hoạt giúp kiểm soát rủi ro giao dịch.

  6. Các phiên giao dịch có thể được thiết lập để tránh biến động bất thường trong thời gian thị trường cụ thể.

Rủi ro

  1. Xu hướng giảm tiếp tục có thể dẫn đến các vị trí ngắn và lỗ liên tiếp.

  2. Các tín hiệu sai có thể dẫn đến bị mắc kẹt sau khi nhập vị trí.

  3. Stop loss quá lớn có thể làm tăng lỗ.

  4. Sự biến động cao có thể thường xuyên chạm điểm dừng lỗ.

  5. Tối ưu hóa tham số không đúng có thể dẫn đến hiệu suất chiến lược kém.

  6. Các tín hiệu giao dịch quá thường xuyên có thể làm tăng chi phí giao dịch và trượt.

Tăng cường

  1. Tối ưu hóa các tham số của BlueWave và MFI để có tín hiệu ổn định và đáng tin cậy hơn.

  2. Bao gồm các chỉ số xu hướng để tránh tổn thất ngắn kéo dài.

  3. Điều chỉnh động tỷ lệ dừng lỗ / lấy lợi nhuận để giảm khả năng bị mắc kẹt.

  4. Cải thiện điều kiện nhập cảnh để giảm tín hiệu sai.

  5. Hãy xem xét kích thước vị trí để tránh đuổi theo các cuộc biểu tình và giảm giảm.

  6. Kết hợp với các mô hình học máy để có các điểm vào và ra chính xác hơn.

Kết luận

Chiến lược này kết hợp các chỉ số BlueWave và MFI để xác định hướng xu hướng, đi dài trên xu hướng tăng và ngắn trên xu hướng giảm, theo dõi hiệu quả xu hướng thị trường cho lợi nhuận. Tuy nhiên, có những rủi ro trong cài đặt tham số, dừng lỗ / lấy lợi nhuận, xu hướng giảm bền vững vv, đòi hỏi tối ưu hóa thêm về điều chỉnh tham số, cơ chế dừng lỗ, điều kiện lọc vv để cải thiện hiệu suất và độ bền của chiến lược. Nhìn chung, chiến lược trực quan và hoạt động tốt cho xu hướng theo dõi dài hạn, nhưng có thể gây ra tổn thất khi bị mắc kẹt trong các thị trường dao động.


/*backtest
start: 2022-11-07 00:00:00
end: 2023-11-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2021
strategy(title="Crypto Squeeze Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)

//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick

// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick

// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")

// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))


//// Indicator Inputs
// Lazy Bear's Momentum Indicator
BlueWave = linreg(close - avg(avg(highest(high, 20), lowest(low, 20)), sma(close, 20)), 20, 0)

// Replicated version of Crypto Face's MFI Indicator
mfiUpper = sum(volume * (change(hlc3) <= 0 ? 0 : hlc3), 58)
mfiLower = sum(volume * (change(hlc3) >= 0 ? 0 : hlc3), 58)
_mfiRsi(mfiUpper, mfiLower) =>
    if mfiLower == 0
        100
    if mfiUpper == 0
        0
	100.0 - (100.0 / (1.0 + mfiUpper / mfiLower))

mf = _mfiRsi(mfiUpper, mfiLower)
mfi = (mf - 50) * 3


//// Strategy
// Creating Long and Short Strategy
buy_signal = crossover(BlueWave, 0) and mfi > 0 
sell_signal = crossunder(BlueWave, 0) and mfi < 0 

// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
    strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
    strategy.exit("Long  SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
    strategy.close("Long", when=sell_signal, alert_message="Close Long Position")

// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
    strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
    strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
    strategy.close("Short", when=buy_signal, alert_message="Close Short Position")


Thêm nữa