マルチパラメータランダム振動インテリジェントトレンド取引戦略

STOCH EMA SMA RR SL TP POP
作成日: 2025-01-06 16:09:58 最終変更日: 2025-01-06 16:09:58
コピー: 1 クリック数: 374
1
フォロー
1617
フォロワー

マルチパラメータランダム振動インテリジェントトレンド取引戦略

概要

この戦略は、ストキャスティクス オシレーターに基づいたインテリジェントな取引システムです。動的なトレンド認識、複数のシグナル確認、インテリジェントなリスク管理機能を組み合わせ、買われすぎや売られすぎの市場状況を自動的に識別して取引を行うことができます。この戦略は、色分けシステムを通じて市場の状況を視覚的に表示し、トレンド確認のために複数期間の移動平均 (EMA) を統合し、柔軟なストップロスとテイクプロフィットの設定を提供します。

戦略原則

この戦略の中核は、ストキャスティクス オシレーターと複数の移動平均システムの調整に基づいています。 K 値が、事前に設定された買われすぎまたは売られすぎレベル (9315) または中間レベル (40) を突破すると、取引シグナルが生成されます。システムは、色の変化を通じて市場の状況を視覚的に表示します (赤は下落の可能性、緑は上昇の可能性、青は中立を示します)。また、トレンド確認のために、20、50、100、200 期間の指数移動平均 (EMA) も組み込まれています。この戦略には、1:1、1:4、1:8 などのさまざまなリスク リターン比率設定をサポートするインテリジェントなリスク管理システムも含まれています。

戦略的優位性

  1. シグナルシステムは明確で直感的であり、色分けにより市場の状況を素早く識別できます。
  2. 誤信号のリスクを軽減する複数の信号確認メカニズム
  3. 柔軟なリスク管理システム、カスタマイズされたリスクリターン比率をサポート
  4. 複数期間の移動平均と組み合わせることでトレンドの確認が可能
  5. 手動操作のリスクを軽減するための自動ストップロスとテイクプロフィット設定
  6. コード構造は明確で、保守や最適化が容易です。

戦略リスク

  1. 不安定な市場では、頻繁に取引シグナルが生成される可能性がある
  2. 固定された買われすぎと売られすぎの閾値は、すべての市場環境において適切ではない可能性がある。
  3. 移動平均システムは不安定な市場では遅れをとる可能性がある
  4. リスクを管理するために適切なストップロスを設定する必要がある 解決策としては、信号フィルタリング メカニズムの追加、しきい値の動的な調整、移動平均パラメータの最適化、ストップロス戦略の厳格な実装などが挙げられます。

戦略最適化の方向性

  1. 市場の変動に応じて買われすぎと売られすぎのレベルを動的に調整する適応閾値システムを導入
  2. 信号を確認するためのボリュームインジケーターを追加
  3. 誤った信号を減らすためのインテリジェントな信号フィルタリングメカニズムを開発する
  4. 移動平均パラメータを最適化してトレンド判断の精度を向上させる
  5. パラメータ選択を最適化する機械学習アルゴリズムの導入
  6. リトレースメント制御メカニズムを追加

要約する

この戦略は、ストキャスティクス オシレーター、移動平均システム、インテリジェントなリスク管理を組み合わせて、包括的な取引システムを構築します。戦略設計は実用性と操作性に重点を置いており、さまざまなリスク嗜好を持つトレーダーに適しています。継続的な最適化と改善を通じて、この戦略はさまざまな市場環境において安定したパフォーマンスを維持することが期待されます。

ストラテジーソースコード
/*backtest
start: 2024-12-06 00:00:00
end: 2025-01-04 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © petrusvorenusperegrinus

//██████╗ ███████╗████████╗██████╗ ██╗   ██╗███████╗                             
//██╔══██╗██╔════╝╚══██╔══╝██╔══██╗██║   ██║██╔════╝                             
//██████╔╝█████╗     ██║   ██████╔╝██║   ██║███████╗                             
//██╔═══╝ ██╔══╝     ██║   ██╔══██╗██║   ██║╚════██║                             
//██║     ███████╗   ██║   ██║  ██║╚██████╔╝███████║                             
//╚═╝     ╚══════╝   ╚═╝   ╚═╝  ╚═╝ ╚═════╝ ╚══════╝                             
                                                                               
//██╗   ██╗ ██████╗ ██████╗ ███████╗███╗   ██╗██╗   ██╗███████╗                  
//██║   ██║██╔═══██╗██╔══██╗██╔════╝████╗  ██║██║   ██║██╔════╝                  
//██║   ██║██║   ██║██████╔╝█████╗  ██╔██╗ ██║██║   ██║███████╗                  
//╚██╗ ██╔╝██║   ██║██╔══██╗██╔══╝  ██║╚██╗██║██║   ██║╚════██║                  
// ╚████╔╝ ╚██████╔╝██║  ██║███████╗██║ ╚████║╚██████╔╝███████║                  
//  ╚═══╝   ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝                  
                                                                               
//██████╗ ███████╗██████╗ ███████╗ ██████╗ ██████╗ ██╗███╗   ██╗██╗   ██╗███████╗
//██╔══██╗██╔════╝██╔══██╗██╔════╝██╔════╝ ██╔══██╗██║████╗  ██║██║   ██║██╔════╝
//██████╔╝█████╗  ██████╔╝█████╗  ██║  ███╗██████╔╝██║██╔██╗ ██║██║   ██║███████╗
//██╔═══╝ ██╔══╝  ██╔══██╗██╔══╝  ██║   ██║██╔══██╗██║██║╚██╗██║██║   ██║╚════██║
//██║     ███████╗██║  ██║███████╗╚██████╔╝██║  ██║██║██║ ╚████║╚██████╔╝███████║
//╚═╝     ╚══════╝╚═╝  ╚═╝╚══════╝ ╚═════╝ ╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝ ╚══════╝

//@version=6
strategy("CM Stochastic POP Method 3", shorttitle="CM_Stochastic POP_M3", overlay=true)

// Stochastic Settings
length = input.int(14, "Stochastic Length", minval=1)
smoothK = input.int(5, "Smooth K", minval=1)

// Risk:Reward Settings
use_rr = input.bool(true, "Use Risk:Reward Ratio")
use_sl = input.bool(true, "Use Stop Loss")  // New input for Stop Loss toggle
rr_options = input.string("1:1", "Risk:Reward Ratio", options=["1:1", "1:4", "1:8"])
stop_percent = input.float(1.0, "Stop Loss (%)", minval=0.1, step=0.1)

// Convert selected R:R ratio to number
get_rr_multiplier(rr) =>
    switch rr
        "1:1" => 1.0
        "1:4" => 4.0
        "1:8" => 8.0
        => 1.0  // default case
rr_ratio = get_rr_multiplier(rr_options)

// Fixed Level Settings
upperLine = 93.0  // Fixed sell level
midLine = 40.0    // Buy/Sell level
lowerLine = 15.0  // Fixed buy level

// EMA Settings
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)

// Calculate Stochastic with smoothing
k = ta.sma(ta.stoch(close, high, low, length), smoothK)

// Dynamic color based on K value
kColor = k >= upperLine ? color.red :    // Above 93 -> Red
         k <= lowerLine ? color.green :   // Below 15 -> Green
         k <= midLine ? color.green :     // Below 40 -> Green
         color.blue                       // Between 40-93 -> Blue

// Buy Signals:
longCondition1 = ta.crossover(k, lowerLine)   // Cross above 15
longCondition2 = ta.crossover(k, midLine)     // Cross above 40

// Sell Signals:
shortCondition1 = ta.crossunder(k, upperLine) // Cross below 93
shortCondition2 = ta.crossunder(k, midLine)   // Cross below 40

calc_tp_sl(entry_price, is_long) =>
    sl_distance = entry_price * (stop_percent / 100)
    sl = is_long ? entry_price - sl_distance : entry_price + sl_distance
    tp_distance = sl_distance * rr_ratio
    tp = is_long ? entry_price + tp_distance : entry_price - tp_distance
    [sl, tp]

// Long entries
if (longCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_15", strategy.long)
        if (use_sl)
            strategy.exit("Exit_15", "Long_15", stop=sl, limit=tp)
        else
            strategy.exit("Exit_15", "Long_15", limit=tp)
    else
        strategy.entry("Long_15", strategy.long)

if (longCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, true)
        strategy.entry("Long_40", strategy.long)
        if (use_sl)
            strategy.exit("Exit_40", "Long_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Long_40", limit=tp)
    else
        strategy.entry("Long_40", strategy.long)

// Short entries
if (shortCondition1)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_93", strategy.short)
        if (use_sl)
            strategy.exit("Exit_93", "Short_93", stop=sl, limit=tp)
        else
            strategy.exit("Exit_93", "Short_93", limit=tp)
    else
        strategy.entry("Short_93", strategy.short)

if (shortCondition2)
    if (use_rr)
        [sl, tp] = calc_tp_sl(close, false)
        strategy.entry("Short_40", strategy.short)
        if (use_sl)
            strategy.exit("Exit_40", "Short_40", stop=sl, limit=tp)
        else
            strategy.exit("Exit_40", "Short_40", limit=tp)
    else
        strategy.entry("Short_40", strategy.short)

// Plot EMAs
plot(ema20, title="EMA 20", color=color.blue, linewidth=1, force_overlay = true)
plot(ema50, title="EMA 50", color=color.yellow, linewidth=1, force_overlay = true)
plot(ema100, title="EMA 100", color=color.orange, linewidth=1, force_overlay = true)
plot(ema200, title="EMA 200", color=color.purple, linewidth=1, force_overlay = true)

// Plot Stochastic line 
plot(k, title="Stochastic", color=kColor, linewidth=2)

// Plot reference lines 
hline(100, title="100 Line", color=color.white, linestyle=hline.style_solid)
hline(upperLine, title="93 Line", color=color.red, linestyle=hline.style_solid)
hline(midLine, title="40 Line", color=color.green, linestyle=hline.style_dashed)
hline(lowerLine, title="15 Line", color=color.green, linestyle=hline.style_solid)
hline(0, title="0 Line", color=color.white, linestyle=hline.style_solid)