
この戦略の主な考えは,Lazy Bearの動態指標とCrypto FaceのMFI指標を組み合わせて,トレンドが上昇した時に買い,トレンドが低下した時に売ることで,市場トレンドを追跡する量化取引戦略を実現することである.
Lazy Bearの動態指標であるBlueWaveを使用して,その近値が20日間の高点,低点,および近値と同等値との線形回帰を計算することによって,トレンドの方向を判断します. BlueWaveの上の0が通過すると,トレンドが上向きを示し,BlueWaveの下の0が通過すると,トレンドが下向きを示します.
Crypto Faceの改良されたMFI指標を使用して,近58日間の上昇と取引量を計算して,資金の流れを判断する. MFIは0より大きい資金の流れを表し,MFIは0より小さい資金の流れを表します.
BlueWaveが0を超え,MFIが0より大きいときは,買入シグナルを発信し,ポジションを多めに開きます. BlueWaveが0を超え,MFIが0より小さいときは,売り出シグナルを発信し,ポジションを空にする.
ストップ・ストップ・条件を設定し,市場トレンドを追跡して利益を得ながら,リスクをコントロールする.
この2つの指標を組み合わせることで,市場のトレンドの方向性をより正確に判断できます.
BlueWaveの指標は曲線を平らにし,異常データに偏らないようにし,市場動向を判断する上でより信頼性が高い.
MFI指標は,資金の流れを判断し,偽突破による損失を防ぐことができます.
戦略のパラメータが少なく,実行し操作しやすい.
取引リスクの制御のための柔軟なストップ・ストップ条件を設定できます.
特定の時間の異常波動を回避するために,購入と販売の時間帯を設定できます.
大株が下がり続ける場合,この戦略は低空追及を続け,損失を招く可能性があります.
指示器が偽信号を発した場合は,入場後にセットされる可能性があります.
ストップポイントが大きすぎると,損失が拡大するリスクがある.
市場が波動しすぎると,ストップ・ロスが破られる可能性が高い.
パラメータの最適化が不適切で,戦略の効果が悪くなる可能性があります.
この戦略は,取引費やスライドポイントのコストを増加させるため,取引信号を頻繁に発生させる.
BlueWaveとMFIのパラメータを最適化して,指標をより安定して信頼できるようにする.
トレンド指数と組み合わせて,継続的な空調損失を回避する.
ストップ・ストップ・ストップの比率を動的に調整し,被套確率を下げます.
ポジション開設条件を最適化し,偽信号を減らす.
ポジションコントロールの導入を考慮し,後退を回避する.
機械学習のアルゴリズムと組み合わせることで, 買い物や販売のポイントをより正確に把握できます.
この戦略は,BlueWaveとMFIの2つの指標を組み合わせてトレンドの方向を判断し,トレンドが上昇するときに多めに,下方空白にすると,市場トレンドを効果的に追跡して利益を得ることができる.しかし,いくつかのパラメータ設定,損失停止,継続的な下落などのリスクもあります.戦略の効果と安定性を高めるために,パラメータ設定,損失停止機構,フィルタ条件などのさらなる最適化が必要です.全体的に,この戦略は,シンプルで直観的で,長線トレンドを追跡する点で効果が良いですが,震動の状況で損失を伴うことに警戒する必要があります.
/*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")