改良されたターボインジケーターに基づく定量取引戦略


作成日: 2023-11-14 14:40:54 最終変更日: 2023-11-14 14:40:54
コピー: 0 クリック数: 825
1
フォロー
1617
フォロワー

改良されたターボインジケーターに基づく定量取引戦略

概要

この戦略は,改訂版のターン指標策略であり,原始ターン指標の基礎に,多くの新しい機能を追加した.その中には,値に基づく買入シグナルをトリガーすること,EMAを活用してターンラインを平ら化すること,止損止めを付け加えること,オール・オーバー・オール・ドリーフ・オーバー・バイ・ウェイズ取引を実現することなどがある. この戦略は,改良されたターン指標を利用して量化取引を望む投資家にとって適しています.

原則

この戦略の核心指標は,改良版のギア指標である.従来のギア指標は,価格変動の絶対値の和を計算することによって,正負ギアラインを形成する.正ギアラインに負ギアラインを穿越すると,買いの信号;負ギアラインの下に正ギアラインを穿越すると,売りの信号である.

この戦略は,従来型のターニング指標をアップグレードしたものです.

  1. ギアラインの交差を基に売買を判断するのではなく,値の概念を導入する.正負ギアライン間の差が設定された値を超えた場合にのみ,売買を誘発する.これは,部分的に無効な小幅の交差信号をフィルターすることができる.

  2. ターンラインは,曲線の揺れを減らすためにEMA平滑処理を行う.

  3. ストップ・ロスト・ストップの設定が追加され,利回り比率が設定され,リスクがより精密に制御されます.

  4. 異なるニーズに応えるように,多,空,双方向の取引を選択できます.

この戦略は,上記の改善により,トレンドをより確実に捉えることができ,反省で優れたパフォーマンスを発揮します.

優位分析

  1. 改造された変速指数は無効信号を除し,偽突破を効果的に防ぐことができる.EMA平滑処理も騒音を消すのに役立つ.

  2. トレンドの転換点を判断するには,単純に交差するよりも,値引きの判断で購入・売却の信号を判断することがより確実である.

  3. ストップ・ストップ機能が追加され,単一取引のリスクを制御するために,合理的な取引の原則に従って,得損率を設定できます.

  4. 選択肢は多,空,または双方向で,市場の異なる段階に柔軟に適応し,異なるトレーダーのニーズを満たすことができます.

  5. この戦略のパラメータは合理的に設計され,反測性能が良好で,実用的な価値があります.

リスク分析

  1. この策略は,市場が収束する際のパフォーマンスに影響を受ける可能性のあるトレンド的な動作に主に適用されます.

  2. ギアライン自体は株式の変動に敏感であり,パラメータの設定を間違えた場合,頻繁に取引される可能性があります.

  3. 値が高く設定されすぎると,買入点が逃れ,低く設定されすぎると,偽信号が増加し,最適のパラメータを見つけるために慎重にテストする必要があります.

  4. 市場が異常な状況にあるとき,ストップダストは突破される可能性があり,このリスクに注意する必要があります.

最適化の方向

  1. 他の指標と組み合わせることで,信号を特定する際により多くの要因を導入することを考慮することができる.

  2. 異なる株のパラメータに対する感受性をテストし,パラメータ設定を最適化することができる.

  3. 価格が変化する傾向に合わせて,自律的にストップする方法を研究できます.

  4. 機械学習などの技術が導入され,モデルをトレーニングすることでパラメータを自動最適化できる.

  5. 戦略の容量を拡大するために,この戦略に基づいた指数化方法を探索できます.

要約する

この戦略は,従来のターニング指数に基づいて,いくつかの改良を施し,より成熟した信頼性の高い定量取引プログラムを形成している.これは,トレンド判断とリスク管理の優位性を組み合わせて,散乱取引の過剰適合リスクを回避するとともに,指標自体のトレンドキャプチャ能力を利用することができる.この戦略は,パラメータ最適化と組み合わせ技術の適用により,安定性と追跡能力をさらに強化することができる.全体的に,この戦略は,いくつかの実用的な価値があり,ターニング指数戦略の改良版である.

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

// [Guz] Custom Vortex
// Custom version of the Vortex indicators that adds many features:
// -Triggers trades after a threshold is reached instead of the normal vortex lines cross (once the difference between the 2 lines is important enough)
// -Smooths the Vortex lines with an EMA
// -Adds Take Profit and Stop Loss selection
// -Adds the possibility to go Long only, Short only or both of them
// ! notice that it uses 10% position size and 0.04% trade fee, found on some crypto exchanges futures contracts
// Allows testing leverage with position size moddification (values above 100%, to be done with caution)
// Not an investment advice 

//@version=4
strategy(title="%-[Guz] Vortex Indicator Custom", shorttitle="%-[Guz] Vortex Indicator Custom", overlay=true)

period_ = input(300, title="Length", minval=2)
VMP = sum( abs( high - low[1]), period_ )
VMM = sum( abs( low - high[1]), period_ )
STR = sum( atr(1), period_ )
ema_len = input(title="EMA Length", defval=7)
tresh= input(title="Threshold", defval=16.2, step=0.1)
VIP = ema(VMP / STR,ema_len)
VIM = ema(VMM / STR,ema_len)
//plot(VIP, title="VI +", color=#2962FF)
//plot(VIM, title="VI -", color=#E91E63)

condition_long = crossover(VIP-VIM, tresh/100)
condition_close = cross(VIP-VIM,0)
condition_short = crossunder(VIP-VIM, -tresh/100)

is_short=input(true,title="Do Short?")
is_long=input(true,title="Do Long?")


if (condition_long and is_long)
    strategy.entry("VortexLE", strategy.long, comment="Long Algo")
if (condition_short and is_short)
	strategy.entry("VortexSE", strategy.short, comment="Short Algo")
if (condition_close)
    strategy.close_all()

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)


stop_loss_long_percent = input(2.5, title="Stop Loss Long", minval=0.1, step=0.1)
stop_loss_long = (1-stop_loss_long_percent/100)*strategy.position_avg_price

take_profit_long_percent = input(1.5, title="Take Profit Long", minval=0.1, step=0.1)
take_profit_long = (1+take_profit_long_percent/100)*strategy.position_avg_price


stop_loss_short_percent = input(2.5,title="Stop Loss Short", minval=0.1, step=0.1) 
stop_loss_short = (1+stop_loss_short_percent/100)*strategy.position_avg_price

take_profit_short_percent = input(1.7,title="Take Profit Short", minval=0.1, step=0.1)
take_profit_short = (1-take_profit_short_percent/100)*strategy.position_avg_price

strategy.exit("TP-SL Long", "VortexLE",  limit = take_profit_long , stop = stop_loss_long) //, trail_price = trail_price_long , trail_offset = trail_offset_long) //, trail_offset=tsl_offset_tick, trail_price=tsl_offset_tick) 
strategy.exit("TP-SL Short", "VortexSE",  limit = take_profit_short , stop = stop_loss_short)