モメント市場情緒指標戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-13 17:51:20
タグ:

img

概要

この戦略は,価格変化とボリュームを比較して市場情勢を明らかにし,それをMACD形式で提示し,取引信号を生成します.

戦略の論理

戦略は主に以下の方法を使って市場情勢を明らかにします.

  1. 各バーの物体量別価格の変化.これは直接,買取力と販売力の強さを示しています.

  2. 価格変化とボリュームに指数関数移動平均を別々に適用し,価格変化のEMAをボリュームのEMAで割る.これはいくつかのノイズをフィルタリングし,よりスムーズな"市場感情"曲線を生む.

  3. MACDのような線を得るために,市場情勢に高速および遅いEMAを適用します.MACD線はモメンタム方向と強さを示し,シグナル線は移動平均線であり,ヒストグラムはモメンタム変化を表す違いを示します.

ヒストグラムが0を超えると上昇傾向が上昇し,0を下回ると下落傾向が上昇する.ヒストグラムの差異も観察できる.

利点分析

この戦略には以下の利点があります.

  1. 市場情勢を判断するために 音量情報を利用し より説得力があります

  2. MACD形式は直感的で使いやすい.

  3. 異なる製品と時間枠に合わせて設定できるパラメータ

  4. ヒストグラムの差異を検知して トレンドの逆転を 見つけることができます

  5. 簡単なコード構造で 分かりやすく最適化できます

リスク分析

この戦略には次のリスクもあります

  1. 価格の動きと組み合わせる必要がある.

  2. MACD パラメータの設定が正しくない場合,見落としたまたは誤った信号が発生する可能性があります. パラメータは特定の製品およびタイムフレームに最適化する必要があります.

  3. 差異は誤った信号であり,トレンド逆転を確認できないので,慎重に解釈する必要があります.

  4. 遅刻して入場し 罠にかかったりします. ストップ損失を待つか,トレンドや関連製品で検証することができます.

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

戦略は以下の側面で最適化できます.

  1. 最適なパラメータを見つけるために,異なる製品と時間枠でパラメータの組み合わせをテストする.

  2. 損失リスクを減らすためにストップロスを追加します.

  3. 関連商品価格動向と組み合わせてシグナルを検証する.

  4. マシン学習を使って パーマータを動的に最適化します

  5. 誤った信号を減らすためにフィルターを追加します.例えば,より高い時間枠の傾向,変動など.

結論

この戦略は,価格変化とボリュームを比較することによって市場情勢を判断し,MACD形式で信号を生成する.価格に加えてボリュームを考慮すると,買い手と売り手の強さをより正確に決定することができる.パラメータは,さらなる最適化の可能性のある異なる製品とタイムフレームのために最適化することができる.全体として,この戦略には新しいアイデアがあり,使用が簡単で,効果的に市場の勢いを把握し,さらなる開発に値する.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 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/
// © dannylimardi

//@version=4
strategy("Sentiment Oscillator", "Sentiment", overlay=false, initial_capital=100, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.08)


//Inputs
msLen = input(49, type=input.integer, title="Market Sentiment Lookback Length")
emaLen1 = input(40, type=input.integer, title="Fast EMA Length")
emaLen2 = input(204, type=input.integer, title="Slow EMA Length")
signalLen = input(20, type=input.integer, title="Signal Length")
showMs = input(false, type=input.bool, title="Show Market Sentiment?")
showHist = input(true, type=input.bool, title="Show Momentum?")
showMacd = input(false, type=input.bool, title="Show MACD Line?")
showSignal = input(false, type=input.bool, title="Show Signal Line?")
showCpv = input(false, type=input.bool, title="(Show Change/Volume for Each Bar?)")
showEma1 = input(false, type=input.bool, title="(Show Fast EMA?)")
showEma2 = input(false, type=input.bool, title="(Show Slow EMA?)")

//Calculations
priceChange = close - close[1]
changePerVolume = (priceChange/volume) * 10000000  // (The 1000000 doesn't have any significance, it's just to avoid color-change errors when the values are too emall.)
priceChangeEma = ema(priceChange, msLen)
volumeEma = ema(volume, msLen)
marketSentiment = priceChangeEma/volumeEma * 100000000
msEma1 = ema(marketSentiment, emaLen1)
msEma2 = ema(marketSentiment, emaLen2)
macd = msEma1-msEma2
signal = ema(macd, signalLen)
hist = macd-signal

//Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

//Drawings
plot(showHist ? hist : na, title="Histogram", style=plot.style_area, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)), transp=0 )
plot(showMacd ? macd : na, title="MACD", color=col_macd, transp=0)
plot(showSignal ? signal : na, title="Signal", color=col_signal, transp=0)
plot(showCpv ? changePerVolume : na, color=changePerVolume > changePerVolume[1] ? color.teal : color.red)
plot(0, color=color.white, transp=80)
plot(showEma1 ? msEma1 : na, color=color.aqua)
plot(showEma2 ? msEma2 : na, color=color.yellow)
plot(showMs ? marketSentiment : na, color=color.lime)

//Strategy
strategy.entry("Buy", strategy.long, when=crossover(hist, 0))
strategy.close("Buy", when=crossunder(hist, 0))

もっと