Strategi Memperset Momentum

Penulis:ChaoZhang, Tanggal: 2023-11-14 14:04:24
Tag:

img

Gambaran umum

Ide utama dari strategi ini adalah menggabungkan indikator momentum Lazy Bear dan indikator MFI Crypto Face untuk pergi panjang ketika tren naik dan pergi pendek ketika tren turun, mewujudkan strategi perdagangan kuantitatif yang mengikuti tren pasar.

Logika Strategi

  1. Gunakan indikator momentum Lazy Bear BlueWave, yang menghitung regresi linier harga penutupan terhadap rata-rata tertinggi, terendah dan dekat 20 hari untuk menentukan arah tren.

  2. Gunakan indikator MFI yang ditingkatkan oleh Crypto Face, yang menghitung jumlah perubahan harga dan volume selama 58 hari terakhir untuk menentukan arus uang.

  3. Ketika BlueWave melintasi di atas 0 dan MFI lebih besar dari 0, sinyal beli dihasilkan untuk membuka posisi panjang; ketika BlueWave melintasi di bawah 0 dan MFI kurang dari 0, sinyal jual dihasilkan untuk membuka posisi pendek.

  4. Atur kondisi stop loss dan take profit untuk mengikuti tren pasar untuk keuntungan, sambil mengendalikan risiko.

Keuntungan

  1. Menggabungkan dua indikator dapat menentukan arah tren pasar dengan lebih akurat.

  2. kurva halus BlueWave menghindari bias dari outlier, membuat penilaian tren lebih dapat diandalkan.

  3. MFI dapat menentukan arus uang, menghindari kerugian dari kebocoran palsu.

  4. Strategi ini memiliki beberapa parameter dan mudah diterapkan dan dioperasikan.

  5. Pengaturan stop loss dan take profit yang fleksibel membantu mengendalikan risiko perdagangan.

  6. Sesi perdagangan dapat diatur untuk menghindari volatilitas yang tidak normal selama waktu pasar tertentu.

Risiko

  1. Tren penurunan yang terus berlanjut dapat menyebabkan posisi pendek dan kerugian berturut-turut.

  2. Sinyal palsu dapat menyebabkan terjebak setelah memasuki posisi.

  3. Stop loss yang terlalu besar dapat memperkuat kerugian.

  4. Volatilitas tinggi dapat sering mencapai titik stop loss.

  5. Optimasi parameter yang tidak tepat dapat menyebabkan kinerja strategi yang buruk.

  6. Sinyal perdagangan yang terlalu sering dapat meningkatkan biaya transaksi dan slippage.

Peningkatan

  1. Mengoptimalkan parameter BlueWave dan MFI untuk sinyal yang lebih stabil dan andal.

  2. Sertakan indikator tren untuk menghindari kerugian pendek yang berkelanjutan.

  3. Mengatur secara dinamis stop loss / mengambil rasio keuntungan untuk menurunkan kemungkinan terjebak.

  4. Memperbaiki kondisi masuk untuk mengurangi sinyal palsu.

  5. Pertimbangkan ukuran posisi untuk menghindari mengejar rally dan dumping dips.

  6. Gabungkan dengan model pembelajaran mesin untuk titik masuk dan keluar yang lebih akurat.

Kesimpulan

Strategi ini menggabungkan indikator BlueWave dan MFI untuk menentukan arah tren, pergi panjang pada tren naik dan pendek pada tren turun, secara efektif mengikuti tren pasar untuk keuntungan. Namun, risiko ada dalam pengaturan parameter, stop loss / take profit, downtrends berkelanjutan dll, yang membutuhkan optimasi lebih lanjut pada pengaturan parameter, mekanisme stop loss, kondisi filter dll untuk meningkatkan kinerja dan ketahanan strategi. Secara keseluruhan, strategi ini intuitif dan bekerja dengan baik untuk tren jangka panjang, tetapi kerugian dapat terjadi ketika terjebak dalam pasar yang berkisar.


/*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")


Lebih banyak