ボリューム駆動振動量子戦略

作者: リン・ハーンチャオチャン開催日:2023年12月5日11時35分50秒
タグ:

クリンガー・ボリューム・オシレーター (Klinger Volume Oscillator) をベースとした取引戦略である.これは,市場動向のターニングポイントを特定するために,価格変動の間に買い物・売り物力の変化を把握する.利点は短期的・長期的分析の両方の敏感性と精度である.しかし,いくつかのリスクは注意する必要がある.

戦略の論理

戦略は以下の前提に基づいています.

  1. 価格帯 (高低) は価格変動の幅を反映し,価格変動の原動力は量です.
  2. 今日の高値+低値+閉値の合計が昨日の高値よりも大きい場合,それは購買力と蓄積が強くなっていることを示します.その反対は分布を示します.
  3. 継続的な量の変化は,買い手と売り手の力の変化を反映しています.

理論に基づいて,この戦略は,今日の閉店価格と昨日の閉店価格の合計との関係を比較して,円満の変化と組み合わせて,Klinger Volume Oscillatorを計算する.指標が移動平均線を横切ったとき長くなって,その下の交差点では短くなってしまいます.

具体的には,以下の3つの主要指標が挙げられます.

  1. xトレンド: 日間の価格の合計を比較した価格トレンドの強さを反映します.
  2. xFast: xトレンドの快速EMA 34期.
  3. xSlow: xトレンドの低EMAが55の期間で

差のxKVOは,取引指標として計算されます.13日間のxTrigger EMAを横断するとロング,以下を横断するとショートします.

利点

最大の利点は,短期分析と長期分析の両方に同時に適していることです.高速で遅いEMA設定により,短期変動を感知し,同時に市場のノイズをフィルタリングし,ほとんどの価格ベースの指標が苦戦している長期的傾向を捉えることができます.

さらに,複雑な数学なしで価格とボリュームデータのみに基づいています.これは実際の取引アプリケーションに非常に効率的です.

リスク と 解決策

主なリスクは,誤ったブレイクを区別する能力が弱くなることである.短期的な価格調整は誤ったロング信号を生む可能性がある.傾向を決定するために他の要因を考慮すべきである.

また,戦略はパラメータ調整に敏感である.最適なパフォーマンスを出すために,EMAとトリガーラインの最適化が必要である.

戦略の最適化

リスクに応じて戦略をさらに最適化できる部分:

  1. ストップ・ロストメカニズムを追加します. 退路率で退路するとノイズ干渉が減少します.

  2. MACDのような指標でトレンドフィルタリングを加えれば 市場変動の方向性に関する誤りも回避できます

  3. バックテストでパラメータセットを最適化して 安定性を向上させる

  4. ストップ・ロスト/テイク・プロフィートのレベルに基づく動的ポジションサイズなどの資本管理の最適化

結論

全体的に見ると,この戦略は,価格量とボリュームを感度と安定性の両方に比較することによって市場力の変化を捉える.最適化されたパラメータとトレンド検証を考慮して,うまく機能することができるが,ボリューム指標の固有の制限は依然としてトレーダーにとってリスクをもたらす可能性がある.

[/トランス]


/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 30/08/2017
// The Klinger Oscillator (KO) was developed by Stephen J. Klinger. Learning 
// from prior research on volume by such well-known technicians as Joseph Granville, 
// Larry Williams, and Marc Chaikin, Mr. Klinger set out to develop a volume-based 
// indicator to help in both short- and long-term analysis.
// The KO was developed with two seemingly opposite goals in mind: to be sensitive 
// enough to signal short-term tops and bottoms, yet accurate enough to reflect the 
// long-term flow of money into and out of a security.
// The KO is based on the following tenets:
// Price range (i.e. High - Low) is a measure of movement and volume is the force behind 
// the movement. The sum of High + Low + Close defines a trend. Accumulation occurs when 
// today's sum is greater than the previous day's. Conversely, distribution occurs when 
// today's sum is less than the previous day's. When the sums are equal, the existing trend 
// is maintained.
// Volume produces continuous intra-day changes in price reflecting buying and selling pressure. 
// The KO quantifies the difference between the number of shares being accumulated and distributed 
// each day as "volume force". A strong, rising volume force should accompany an uptrend and then 
// gradually contract over time during the latter stages of the uptrend and the early stages of 
// the following downtrend. This should be followed by a rising volume force reflecting some 
// accumulation before a bottom develops.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. 
////////////////////////////////////////////////////////////
strategy(title="Klinger Volume Oscillator (KVO)", shorttitle="KVO")
TrigLen = input(13, minval=1)
FastX = input(34, minval=1)
SlowX = input(55, minval=1)
reverse = input(false, title="Trade reverse")
hline(0, color=gray, linestyle=line)
xTrend = iff(hlc3 > hlc3[1], volume * 100, -volume * 100)
xFast = ema(xTrend, FastX)
xSlow = ema(xTrend, SlowX)
xKVO = xFast - xSlow
xTrigger = ema(xKVO, TrigLen)
pos = iff(xKVO > xTrigger, 1,
	   iff(xKVO < xTrigger, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )  
plot(xKVO, color=blue, title="KVO")
plot(xTrigger, color=red, title="Trigger")


もっと