流動性トレンドに基づく定量取引戦略


作成日: 2023-12-21 10:19:52 最終変更日: 2023-12-21 10:19:52
コピー: 0 クリック数: 701
1
フォロー
1623
フォロワー

流動性トレンドに基づく定量取引戦略

概要

この戦略は,流動性駆動トレンド戦略 (Liquidity Driven Trend Strategy) と呼ばれる.この戦略は,異なる時間周期における価格トレンドの方向を識別し,それに応じて買いまたは販売の決定を行うことを目的としています.この戦略は,二均線システムの判断を適用し,多時間フレーム上の差値相対強度指数 (RSI) を利用して,トレンドが変化する時に迅速に反応します.

戦略原則

この戦略のコアロジックは,CHOP指標に基づいています. 移動平均システムは,大トレンドの方向を判断します.具体的には,戦略は,高周期の時間枠で,快線 (Length=20) と慢線 (Length=50) のRSI値を計算し,その差を計算します. 快線 (RSI) 上での慢線 (RSI) を通過すると,看板と判断され,多信号を形成します.

この戦略はまた,複数のタイムフレームの判断を導入します. 高いレベルの周期 (日線など) でRSIの差値を計算して,全体的なトレンドの方向性を判断します. 高いレベルの周期の判断の結果に基づいて,低いレベルの周期 (5分線など) で特定の買い物や販売を実行します. この複数のタイムフレームの組み合わせは,高周期のトレンド判断を考慮するとともに,低周期の操作の柔軟性も考慮します.

戦略的優位性

  • RSI差値で潜在的トレンドの逆転を判断する, 予期反応, 敏感
  • 多時間枠思考,高周期判断傾向,低周期操作実行
  • RSIは価格と取引量の変化を反映し,市場の流動性や熱意を反映します.
  • 簡単なパラメータ設定で,理解しやすく,説明しやすく,調整しやすく

リスクと解決策

  • 双均線判定では偽突破が発生する可能性があります.
  • 突破失敗は不必要な損失をもたらす可能性がある

解決策は

  1. 平均線参数調整により,偽突破の確率を低減
  2. フィルタリングの条件を高め,不必要な入院を防止する

戦略最適化の方向性

  • RSIパラメータをKalman Filterアルゴリズムで最適化する
  • MACDなどの指標の補助判断を追加する
  • 取引量の変化と組み合わせた動的出場位置の設定

要約する

この戦略は,潜在的トレンド変化を判断するためにRSI差値を使用し,敏感な転換点を捉えます.複数の時間枠の使用は,大きなトレンドの判断を保証するとともに,特定の取引操作をより柔軟にします.他のトレンド追跡戦略と比較して,この戦略は,よりシンプルで直接で,パラメータの設定は直感的で,調整しやすく最適化されます.全体的に,この戦略は,高効率で実用的なトレンド取引システムを作り,適用をさらに探索する価値があります.

ストラテジーソースコード
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Flow Trend Indicator Strategy", "FlowTI", overlay=true, calc_on_every_tick=true)

isTimeFrame(timeFrame) =>
    timeFrame == timeframe.period ? true : false

Htf() =>
    isTimeFrame("12") ? "60" : isTimeFrame("60") ? "300" : isTimeFrame("300") ? "D" : isTimeFrame("D") ? "W" : isTimeFrame("W") ? "M" : isTimeFrame("M") ? "5M" : "D"

TrendIndication() =>
    trendFastLength = 20
    trendSlowLength = 50
    upFastHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
    downFastHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
    rsiFastHtf = downFastHtf == 0 ? 100 : upFastHtf == 0 ? 0 : 100 - (100 / (1 + upFastHtf / downFastHtf))
    upSlowHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
    downSlowHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
    rsiSlowHtf = downSlowHtf == 0 ? 100 : upSlowHtf == 0 ? 0 : 100 - (100 / (1 + upSlowHtf / downSlowHtf))
    rsiDiff = rsiFastHtf - rsiSlowHtf
    crossover(rsiDiff, 0) ? true : crossunder(rsiDiff, 0) ? false : na

if (TrendIndication() == true)
    strategy.entry("Long", strategy.long)

if (TrendIndication() == false)
    strategy.entry("Short", strategy.short)