BTCハッシュリボンズ戦略は,ビットコインネットワークのハッシュレート指標を利用して,マイナーが降伏し,回復が始まるとロングで,マイナーが降伏し始めるとショートで,マイナーサイクルの変動から利益を得る.
この戦略は,IntoTheBlockデータを使用して,取引ビューでBitcoinの日々のハッシュレートを表示します. 急速移動平均とゆっくり移動平均を計算します. 急速移動平均がゆっくり移動平均を超えると,マイナー降伏が終了し,回復が始まると信じ,長引きます. 急速移動平均がゆっくり移動平均を下回ると,マイナーが降伏し始めると信じ,短引きます.
戦略は,シグナルライン (デフォルト長さ30日) とロングライン (デフォルト長さ60日) の2つの移動平均線を定義する.シグナルラインがロングラインを越えると,それはロング信号とみなされ,シグナルラインがロングラインを下回ると,それはショート信号とみなされる.方向パラメータに応じて,戦略は対応する信号が現れたときにロングまたはショートポジションを開く.
この戦略の最大の利点は,ビットコインネットワークそのものの特徴を利用し,ハッシュレートを介してマイナーの拡大と収縮サイクルを反映して取引信号を生成することである.これは,比特幣価格そのものの複雑な分析を避け,ネットワークデータを予測指標として使用し,比較的シンプルで信頼性がある.
また,パラメータの数が少ないことも利点である.主なパラメータは,高速移動平均と遅い移動平均の長さ設定のみで,オーバーフィットなしで非常にシンプルである.同時に,移動平均の選択のために複数のアルゴリズムが提供されており,柔軟な調整が可能である.
この戦略の主なリスクは,ハッシュレートデータプロバイダの品質である.データ品質の問題がある場合,信号の正確さに深刻な影響を与える.現在,IntoTheBlockは良好な品質のデータを提供しているが,持続可能性も注意を必要としている.
また,システムリスクは,市場そのもののシステムリスクである.マイナーズ
ポジションを開設する際の信頼性を高めるために,価格指標と組み合わせることを検討してください.例えば,K線パターン指標,移動平均指標などを組み合わせることです.両方が長または短信号を示す場合にのみポジションを開設します.
戦略を構築するために,異なるサイクルに基づいてハッシュリボン指標をテストします.例えば,あまりにも多くのノイズをフィルターし,より大きなタイムフレームでトレンド逆転を決定するために,毎週または毎月指標を使用します.
ハッシュレートの主要な逆転点を決定するために機械学習モデルを試す.固定パラメータ移動平均と比較して,機械学習モデルは逆転の複雑な特徴をよりよくシミュレートすることができる.
この戦略の全体的な論理は明確でシンプルである.ビットコインネットワークのデータを通じてマイナーサイクルを反映することで,複雑な価格予測を避けながら取引信号を形成し,一定の信頼性を与えます.しかし,市場のシステムリスクの影響を軽減し,安定した収益性を向上させるために,さらなる最適化と組み合わせが必要です.
/*backtest start: 2023-01-05 00:00:00 end: 2024-01-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Powerscooter // Since IntoTheBlock only provides daily hashrate data, this chart might look chunky on lower timeframes, even with smoothing. //@version=5 strategy("BTC Hashrate ribbons", overlay = true) enableDirection = input(0, title="Both(0), Long(1), Short(-1)", group="Direction") smoothingS = input.string(title="Smoothing short MA", defval="SMA", options=["SMA", "RMA", "EMA", "WMA"], group="Hashrate Settings") SmoothLengthS = input(30, 'Short MA length', group="Hashrate Settings") smoothingL = input.string(title="Smoothing long MA", defval="SMA", options=["SMA", "RMA", "EMA", "WMA"], group="Hashrate Settings") SmoothLengthL = input(60, 'Long MA length', group="Hashrate Settings") ma_functionS(source, length) => switch smoothingS "RMA" => ta.rma(source, length) "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) => ta.wma(source, length) ma_functionL(source, length) => switch smoothingL "RMA" => ta.rma(source, length) "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) => ta.wma(source, length) HashRate = request.security("INTOTHEBLOCK:BTC_HASHRATE", "D", close) SignalLine = ma_functionS(HashRate, SmoothLengthS) LongLine = ma_functionL(HashRate, SmoothLengthL) plot(ma_functionS(HashRate, SmoothLengthS), "Short MA", color=color.yellow) plot(ma_functionL(HashRate, SmoothLengthL), "Long MA", color=color.blue) LongCondition = ta.crossover(SignalLine, LongLine) ShortCondition = ta.crossunder(SignalLine, LongLine) //Long Entry Condition if LongCondition and (enableDirection == 1 or enableDirection == 0) strategy.entry("Long", strategy.long) if LongCondition and (enableDirection == -1) strategy.close("Short") //Short Entry condition if ShortCondition and (enableDirection == -1 or enableDirection == 0) strategy.entry("Short", strategy.short) if ShortCondition and (enableDirection == 1) strategy.close("Long")