変更されたOBVとMACD量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2023年11月15日 17時58分42秒
タグ:

img

概要

この戦略は,取引信号を生成するために変更されたバランスボリューム (OBV) とMACDを使用する.価格指数MACDと変更されたOBVを総量と価格の包括的な指標として組み合わせ,価格とボリュームが強くなると取引機会を把握することを目的としています.

戦略の論理

  1. 単純な移動平均値 (SMA) を計算して市場傾向を決定する.

  2. 変更された OBV を計算する. OBV をより敏感にするために,接近価格と以前の接近価格関係に基づいて OBV の計算を修正する.

  3. 変化した OBV で MACD を計算する.MACD は,速線,遅線,およびヒストグラムから構成され,ボリュームモメントの変化を識別する.

  4. MACDが黄金線を横断して上昇すると,買い信号が生成されます.

  5. MACDがデッドクロスでダウンすると,売り信号が発信されます.

  6. トレンドのない市場では不要な取引を避けるためにSMAをチェックします.

利点分析

  1. 変化したOBVは 早期の音量変化に敏感です

  2. MACD は 音量 動向 変化 と キー レベル を 明確に 示す.

  3. 音量と価格の組み合わせにより 信号の正確性が向上します

  4. SMAは市場の動向を特定することで 偽信号をフィルターします

  5. 明確な戦略論理と大きな最適化空間

リスク分析

  1. OBVの変更により 誤った信号が生じる可能性があるので 他の指標でフィルターする必要があります

  2. MACD パラメータの設定が正しくない場合,取引が失敗したり,誤った信号を引き起こす可能性があります.

  3. 損失を避けるために,株の詳細に注意してください.

  4. 戦略が特殊なシナリオでは機能しない可能性があるため,市場の状況を監視する.

  5. バックテストの過剰なリスクは,ライブ取引のパフォーマンスが悪化する可能性があります.

オプティマイゼーションの方向性

  1. 市場傾向の決定を最適化するために,異なるSMA期間の組み合わせをテストする.

  2. マックドのパラメータをテストして,ボリューム・インパントの変化をより正確に識別する.

  3. KDJ,RSIなど,フィルターとして他の指標を追加します.

  4. ストップ・ロスは,トレード毎の損失制限に追加します.

  5. 全体的な収益性を向上させるためのマネーマネジメントを最適化します

  6. 試験パラメータの違い

結論

この戦略は,変更されたOBVとMACDを組み合わせて,ボリュームと価格の合成を達成する.ボリュームの勢力の変化を早期に把握し,取引信号を生成することができる.OBVまたはMACDを単独で使用すると比較して,この戦略はより信頼できる取引機会を提供します.しかし,誤った信号リスクが存在し,指標とパラメータのさらなる最適化, գումարマネーマネジメントはライブ取引で安定した利益を得るために必要です.全体として,この戦略は明確な論理を持ち,その可能性を調査するためにテストおよび最適化する価値があります.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-14 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/
// © stocktechbot

//@version=5
strategy("Altered OBV On MACD", overlay=true, margin_long=100, margin_short=100)

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot
//@version=5
//SMA Tredline
out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)
//sma plot
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200", offset=offset)
plot(outf, color=color.maroon, title="MA50", offset=offset)
plot(outn, color=color.orange, title="MA90", offset=offset)
plot(outt, color=color.olive, title="MA21", offset=offset)
plot(outthree, color=color.fuchsia, title="MA9", offset=offset)

fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
chng = 0
obv = ta.cum(math.sign(ta.change(close)) * volume)
if close < close[1] and (open < close)
    chng := 1
else if close > close[1]
    chng := 1
else
    chng := -1
obvalt = ta.cum(math.sign(chng) * volume)
//src = input(title="Source", defval=close)
src = obvalt
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
//hline(0, "Zero Line", color=color.new(#787B86, 50))
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
//BUY Signal
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macd,2)
macdlong = ta.crossover(macd, signal)
longCondition=false
if macdlong and macdrise
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macd,1)
macdsell = macd < signal
shortCondition = false
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
    shortCondition := true


if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


もっと