3 10 オスイレータープロフィールのフラグ・戦略

作者: リン・ハーンチャオチャン開催日:2024年2月18日 16:17:26
タグ:

img

概要

3 10 オシレータープロフィールフラグリング戦略は,MACD指標として3日間と10日間の単純な移動平均の差を計算し,市場における買い手と売り手の強さを決定するためのボリューム分析を組み合わせて取引信号を生成する.この戦略には,主要価格領域,ボリューム特性,MACD指標逆転を使用してエントリーと出口機会の確認も含まれています.

戦略原則

この戦略のコア指標は,MACDで,高速移動平均線と遅い移動平均線で構成されている.高速線は3日間のシンプル移動平均線であり,スローラインは10日間のシンプル移動平均線である.その間の違いはMACDヒストグラムを形成する.高速線が下からスローラインを越えると,購買力の強化を表現し,購入信号を生成する.逆に,高速線が上からスローラインを下に越えると,販売力が強化され,販売信号が生成される.

さらに,戦略は,各キャンドルスタイクの購入量と販売量との間のサイズ関係に基づいて,購入および販売量の相対的な強さの分析を組み込む. 具体的な方法は: 購入量 = ボリュームx (Close - Low) ÷ (High - Low); 販売量 = ボリュームx (High - Close) ÷ (High - Low). 購入量が販売量よりも大幅に大きい場合,キャンドルスタイクは比較的強い購入力で閉じる,これは購入信号である.

MACD指標とボリューム分析を組み合わせることで,戦略は供給と需要の関係と市場における未定の方向性を効果的に決定することができる.同時に,戦略は価格が重要な領域にあるかどうか,MACDが効果的な逆転を持っているかどうか,および購入と販売のボリュームの差が十分に大きいかどうかなどの条件を検証し,衝動的なノイズをフィルタリングし,高い確率と高効率のエントリーを確保することができる.

利点分析

  • 市場が待機している方向性を判断するためにMACD指標を使用する
  • 買い手と売り手の強さを決定するための量差分析
  • 多条件スクリーニングは,高い確率で動作することを保証します
  • リスク管理のためのストップ・プロフィット・ストップ・ロスト・戦略を採用する

この戦略の最大の利点は,市場供給と需要関係についての判断を完全に組み込むことである.MACDヒストグラムは,購入力と販売力と市場の待機している方向性の対比を効果的に決定することができる.ボリューム差分析は,買い手と売り手の間の支配力を明確に特定することができる.同時に,戦略は上昇を追いかけて下落を打つのを避けるために複数の条件を設定し,利益の比較的高い確率を確保する.さらに,戦略の内蔵ストップ・プロフィットとストップ・ロスのメカニズムも,単一の損失を制限することができます.

リスク分析

  • MACDの失敗リスク:市場が変動または平らなパターンで固まる場合,MACDは誤った信号を生成する可能性があります.
  • 取引量の増加を目的とした市場操作が起こり,取引量の分析の正確性が低下する可能性があります.
  • パラメータ最適化の難しさ.この戦略は,最適化するのが難しい複数のパラメータを含んでおり,パラメータ調整能力が比較的弱い投資家には不適切である.

上記のリスクは,市場の変動時にこの戦略を使用しないために市場の主要な傾向を正確に決定し,人工的に膨張された取引量を特定するために市場情報に注意を払い,パラメータを注意深く調整し,または専門家の助言を求めることで回避できます.

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

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

  • KD,ボリンジャー帯などの指標を使用し,MACDを置き換えるかサポートし,判断の精度を向上させる
  • 動的パラメータ調整のための位置管理メカニズムを追加
  • ストップ・プロフィートとストップ・ロスのポイントを最適化して,単一の利益を高めること
  • 安定性を向上させるために複数のタイムフレームで実行する

結論として,この戦略の最適化には十分な余地があることがわかります.投資家は,戦略の有効性を向上させるために,自分の状況と市場状況に応じて適切な調整と改善を行うことができます.

概要

3 10 オシレータープロフィールフラグリング戦略は,MACD分析,ボリューム比較,および多条件フィルタリング検証のアイデアを成功裏に統合している.投資家のための重要な検討と深遠な調査に値する戦略は,大きな最適化空間と幅広い応用見通しを有し,投資家のための重要な検討と深遠な調査に値する.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true)

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.8)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=10)
takeProfit = input( title="Take Profit", defval=0.75)
stopLoss = input( title="Stop Loss", defval=0.5)

fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)

buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
//plot(macdSlope, color=color.red, title="Total Volume")
//plot(signalSlope, color=color.green, title="Total Volume")
intrabarRange = high - low

getLookBackSlope(lookBack) => signal - signal[lookBack]
getBuyerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if buyVolume[i] > sellVolume[i]
            j += 1
    j

getSellerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if sellVolume[i] > buyVolume[i]
            j += 1
    j

getVolBias(lookBack) =>
    float b = 0
    float s = 0
    for i = 1 to lookBack
        b += buyVolume[i]
        s += sellVolume[i]
    b > s

getSignalBuyerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] > signalBiasValue
            j += 1
    j

getSignalSellerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < ( 0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0 - signalBiasValue )
            j += 1
    j

getPriceRising(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] > close[i + 1]
            j += 1
    j


getPriceFalling(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] < close[i + 1] 
            j += 1
    j

getRangeNarrowing(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] < intrabarRange[i + 1] 
            j+= 1
    j

getRangeBroadening(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] > intrabarRange[i + 1] 
            j+= 1
    j

bool isNegativeSignalReversal = signalSlope < 0 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0

bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0
bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0

bool hasBearInversion = signalSlope > 0 and macdSlope < 0
bool hasBullInversion = signalSlope < 0 and macdSlope > 0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0
bool hasSignalSellerBias = hasSignalBias and signal < 0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0 - macdBiasValue )

bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)

bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )

// 7.48 Profit 52.5% 
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack  and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
    strategy.entry("Short1", strategy.short, qty=10)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
    strategy.entry("Long1", strategy.long, qty=10)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

もっと