Chiến lược bóp sóng định lượng


Ngày tạo: 2023-11-14 14:04:24 sửa đổi lần cuối: 2023-11-14 14:04:24
sao chép: 0 Số nhấp chuột: 640
1
tập trung vào
1617
Người theo dõi

Chiến lược bóp sóng định lượng

Tổng quan

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

Nguyên tắc chiến lược

  1. Sử dụng chỉ số động lực của Lazy Bear BlueWave, nó tính toán sự quay trở lại tuyến tính của giá đóng với giá cao, giá thấp và giá gần 20 ngày, để đánh giá hướng xu hướng. Khi BlueWave đi trên 0, nó biểu thị xu hướng lên; Khi BlueWave đi dưới 0, nó biểu thị xu hướng xuống.

  2. Sử dụng chỉ số MFI được cải tiến của Crypto Face, nó đánh giá dòng tiền bằng cách tính toán tỷ lệ tăng và giảm trong 58 ngày gần đây và khối lượng giao dịch. MFI lớn hơn 0 biểu thị dòng tiền vào, MFI nhỏ hơn 0 biểu thị dòng tiền ra.

  3. Khi BlueWave vượt quá 0 và MFI lớn hơn 0, phát đi tín hiệu mua, mở nhiều vị trí; khi BlueWave vượt quá 0 và MFI nhỏ hơn 0, phát đi tín hiệu bán, mở vị trí trống.

  4. Thiết lập các điều kiện dừng lỗ, theo dõi xu hướng thị trường để tạo ra lợi nhuận, đồng thời kiểm soát rủi ro.

Lợi thế chiến lược

  1. Sử dụng hai chỉ số kết hợp, bạn có thể đánh giá chính xác hơn về xu hướng của thị trường.

  2. Chỉ số BlueWave làm phẳng đường cong, tránh bị lệch bởi dữ liệu bất thường và đánh giá xu hướng thị trường một cách đáng tin cậy hơn.

  3. Chỉ số MFI có thể giúp xác định dòng tiền và tránh lỗ hổng do phá vỡ giả.

  4. Các tham số chiến lược ít hơn, dễ thực hiện và vận hành.

  5. Có thể thiết lập các điều kiện dừng lỗ và kiểm soát rủi ro giao dịch.

  6. Bạn có thể đặt thời gian mua và bán để tránh biến động bất thường của thị trường vào một thời điểm nhất định.

Rủi ro chiến lược

  1. Chiến lược này có thể tiếp tục theo đuổi giảm giá và thua lỗ khi thị trường lớn tiếp tục giảm.

  2. Các chỉ số có thể bị chặn khi nhập cảnh khi có tín hiệu sai.

  3. Các điểm dừng lỗ được thiết lập quá lớn, nguy cơ tăng lỗ.

  4. Thị trường biến động quá lớn, có nhiều khả năng điểm dừng lỗ sẽ bị phá vỡ.

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

  6. Chiến lược này tạo ra các tín hiệu giao dịch quá thường xuyên, làm tăng phí giao dịch và chi phí điểm trượt.

Hướng tối ưu hóa

  1. Tối ưu hóa các tham số của BlueWave và MFI, làm cho chỉ số ổn định và đáng tin cậy hơn.

  2. Kết hợp các chỉ số xu hướng để tránh thua lỗ liên tục.

  3. Động thái điều chỉnh tỷ lệ dừng lỗ, giảm khả năng bị che đậy.

  4. Tối ưu hóa các điều kiện mở cửa để giảm tín hiệu sai.

  5. Xem xét việc kiểm soát vị trí để tránh bị chôn vùi.

  6. Nó được kết hợp với các thuật toán học máy để làm cho điểm mua và bán chính xác hơn.

Tóm tắt

Chiến lược này bằng cách kết hợp sử dụng BlueWave và MFI hai chỉ số để đánh giá xu hướng xu hướng, làm nhiều khi xu hướng lên, làm rỗng khi đi xuống, có thể theo dõi xu hướng thị trường hiệu quả. Nhưng cũng có một số rủi ro về thiết lập tham số, dừng lỗ, tiếp tục giảm, cần phải tối ưu hóa thêm các tham số thiết lập, cơ chế dừng lỗ, điều kiện lọc, để tăng hiệu quả và ổn định của chiến lược. Nói chung, chiến lược này là trực quan đơn giản, tốt hơn trong việc theo dõi xu hướng đường dài, nhưng cần cảnh giác bị mắc kẹt trong tình huống biến động gây thiệt hại.

Mã nguồn chiến lược
/*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")