RSIとVWAPに基づく短期定量戦略


作成日: 2024-01-19 14:21:15 最終変更日: 2024-01-19 14:21:15
コピー: 1 クリック数: 1064
1
フォロー
1664
フォロワー

RSIとVWAPに基づく短期定量戦略

概要

この戦略は,RSI-VWAPショートライン戦略と呼ばれています.この戦略は,RSI指標と取引量重み平均価格 (VWAP) を技術指標として採用し,多空頭シグナルを設定し,その後,買入決定を生成します.この戦略は,短線で市場の超買い超売り現象を捕捉し,余分な利益を得ることを目指しています.

戦略原則

  1. RSI指標を用いて,市場が超買か超売りの状態にあるかどうかを判断する.RSI指標の値が80を超えると超買区,20を下ると超売区となる.
  2. RSI指標は,閉盤価格ではなくVWAPをソースデータとして使用する.VWAPは,その日の平均取引価格を反映する.
  3. RSI指標値が超売区から20を突破すると買入シグナルが生じます. RSI指標値が超売区から80を突破すると売り出します.
  4. この戦略は,空頭ではなく,多頭をするのみである.つまり,超売りで買い,超売りで売るのみである.

優位分析

  1. VWAPをRSIのデータ源として使用することで,RSI指標は市場の判断をより正確にし,偽の突破によって誤解されないようにする.
  2. 長期にわたって安定した利益を得るために,操作頻度を下げて,多頭作業のみを行う.
  3. RSI指数パラメータは17で,ショートライン操作に適している。
  4. 予想される取引回数が少ないショートライン操作方式を採用し,取引コストを削減し,より高い収益率を得ることに有利である.

リスク分析

  1. 量化策略の反射は過適合のリスクがあり,実体結果は反射と合わない可能性があります.
  2. 市場が急落した時に,その機会に及ばないのは,多忙な行為だ.
  3. 超買超売の判断基準は,すべての品種に適さない可能性があり,異なる品種にパラメータを調整する必要がある.
  4. 負債の発生を完全に回避できない,あらゆる技術指標が誤信号を生じさせる可能性があります.

過剰買い過剰売り基準を適切に緩和し,他の指標と組み合わせてシグナルを確認し,パラメータ区間を調整することによってリスクを軽減することができます.

最適化の方向

  1. 様々なパラメータが戦略の効果に与える影響をテストし,RSI長さを最適化し,超値の値を超えて買い超値の値を超えて販売する.
  2. 損失を抑える戦略を増やし,移動損失,時間損失などの方法で利益の一部をロックし,撤回を減らす.
  3. 他の指標と組み合わせた信号のフィルタリングにより,信号の精度が向上する.
  4. 異なる品種の特性に応じて独立したパラメータの範囲を設定し,戦略を異なる品種により良く適応させる.

要約する

この戦略は,全体として,シンプルで実用的なショートライン戦略である.VWAPを使用すると,RSI指標の判断がより正確になり,操作の頻度が減るだけを行う.戦略のアイデアは明確で,理解しやすく,実装し,量化取引の入門に適している.しかし,いかなる単一の指標戦略も完璧であることは困難であり,より良い実盤効果を生むために継続的に最適化する必要があります.

ストラテジーソースコード
/*backtest
start: 2023-12-19 00:00:00
end: 2024-01-18 00:00:00
period: 1h
basePeriod: 15m
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/
// © Xaviz

//#####©ÉÉÉɶN###############################################
//####*..´´´´´´,,,»ëN########################################
//###ë..´´´´´´,,,,,,''%©#####################################
//###'´´´´´´,,,,,,,'''''?¶###################################
//##o´´´´´´,,,,,,,''''''''*©#################################
//##'´´´´´,,,,,,,'''''''^^^~±################################
//#±´´´´´,,,,,,,''''''''^í/;~*©####æ%;í»~~~~;==I±N###########
//#»´´´´,,,,,,'''''''''^;////;»¶X/í~~/~~~;=~~~~~~~~*¶########
//#'´´´,,,,,,''''''''^^;////;%I^~/~~/~~~=~~~;=?;~~~~;?ë######
//©´´,,,,,,,''''''''^^~/////X~/~~/~~/~~»í~~=~~~~~~~~~~^;É####
//¶´,,,,,,,''''''''^^^;///;%;~/~~;í~~»~í?~?~~~?I/~~~~?*=íÑ###
//N,,,,,,,'''''''^^^^^///;;o/~~;;~~;£=»í»;IX/=~~~~~~^^^^'*æ##
//#í,,,,,''''''''^^^^^;;;;;o~»~~~~íX//~/»~;í?IíI»~~^/*?'''=N#
//#%,,,'''''''''^^^^^^í;;;;£;~~~//»I»/£X/X/»í*&~~~^^^^'^*~'É#
//#©,,''''''''^^^^^^^^~;;;;&/~/////*X;í;o*í»~=*?*===^'''''*£#
//##&''''''''^^^^^^^^^^~;;;;X=í~~~»;;;/~;í»~»±;^^^^^';=''''É#
//##N^''''''^^^^^^^^^^~~~;;;;/£;~~/»~~»~~///o~~^^^^''''?^',æ#
//###Ñ''''^^^^^^^^^^^~~~~~;;;;;í*X*í»;~~IX?~~^^^^/?'''''=,=##
//####X'''^^^^^^^^^^~~~~~~~~;;íííííí~~í*=~~~~Ií^'''=''''^»©##
//#####£^^^^^^^^^^^~~~~~~~~~~~íííííí~~~~~*~^^^;/''''='',,N###
//######æ~^^^^^^^^~~~~~~~~~~~~~~íííí~~~~~^*^^^'=''''?',,§####
//########&^^^^^^~~~~~~~~~~~~~~~~~~~~~~~^^=^^''=''''?,íN#####
//#########N?^^~~~~~~~~~~~~~~~~~~~~~~~~^^^=^''^?''';í@#######
//###########N*~~~~~~~~~~~~~~~~~~~~~~~^^^*'''^='''/É#########
//##############@;~~~~~~~~~~~~~~~~~~~^^~='''~?'';É###########
//#################É=~~~~~~~~~~~~~~^^^*~'''*~?§##############
//#####################N§£I/~~~~~~»*?~»o§æN##################

//@version=4
strategy("RSI-VWAP INDICATOR", overlay=false)

// ================================================================================================================================================================================
// RSI VWAP INDICATOR
// ================================================================================================================================================================================

// Initial inputs
Act_RSI_VWAP = input(true, "RSI VOLUME WEIGHTED AVERAGE PRICE")
RSI_VWAP_length = input(17, "RSI-VWAP LENGTH")
RSI_VWAP_overSold = input(19, "RSI-VWAP OVERSOLD", type=input.float)
RSI_VWAP_overBought = input(80, "RSI-VWAP OVERBOUGHT", type=input.float)

// RSI with VWAP as source
RSI_VWAP = rsi(vwap(close), RSI_VWAP_length)

// Plotting, overlay=false
r=plot(RSI_VWAP, color = RSI_VWAP > RSI_VWAP_overBought ? color.red : RSI_VWAP < RSI_VWAP_overSold ? color.lime : color.blue, title="rsi", linewidth=2, style=plot.style_line)
h1=plot(RSI_VWAP_overBought, color = color.gray, style=plot.style_stepline)
h2=plot(RSI_VWAP_overSold, color = color.gray, style=plot.style_stepline)
fill(r,h1, color = RSI_VWAP > RSI_VWAP_overBought ? color.red : na, transp = 60)
fill(r,h2, color = RSI_VWAP < RSI_VWAP_overSold ? color.lime : na, transp = 60)

// Long only Backtest
strategy.entry("Long", strategy.long, when = (crossover(RSI_VWAP, RSI_VWAP_overSold)))
strategy.close("Long", when = (crossunder(RSI_VWAP, RSI_VWAP_overBought)))