資源の読み込みに... 荷物...

マルチテクニカルインジケーター トレンド イチモク・クラウド・ブレイクとストップ・ロスのシステムによる戦略

作者: リン・ハーンチャオチャン,日付: 2024-11-28 15:13:23
タグ:RSIマルチSMAエイマ

img

概要

この戦略は,複数の技術指標を組み合わせた包括的な取引システムで,主に取引決定のためのIchimoku Cloud指標に基づいています.このシステムは,RSIと移動平均を補助フィルタリング条件として組み込むと同時に,テンカンとキジュン線の交差点を通じてエントリーポイントを決定します.この戦略は,クラウドコンポーネントをダイナミックストップロスのレベルとして使用し,完全なリスク管理システムを形成します.

戦略の原則

戦略の基本論理は次の主要な要素に基づいています

  1. 入口信号はテンカン・キジュン交差点によって生成され,上向きの交差点は長い信号,下向きの交差点は短い信号を形成する.
  2. クモ (雲) に関する価格ポジションはトレンド確認として機能し,雲の上の長距離と下の短距離を走ります
  3. 50 日間と 200 日間移動平均の関係がトレンドフィルターとして機能します
  4. 週間のRSI指標は市場の強さを確認し,偽信号をフィルタリングします
  5. 動的リスク管理のための動的ストップ損失ポジションとしてクラウド境界を使用します.

戦略 の 利点

  1. 複数の技術指標の組み合わせにより,より信頼性の高い取引信号が提供され,誤った信号の影響が著しく減少します
  2. クラウドを動的ストップ・ロースとして利用することで,市場変動に基づいてストップ・ロースポジションを自動的に調整し,利益を保護し,十分な価格動きを可能にします
  3. 毎週RSIをフィルタリングすることで,過買い/過売りエリアでの不利な取引が効果的に回避される.
  4. 移動平均のクロスオーバーは,トレンドのさらなる確認を提供し,取引の成功率を向上させる
  5. 完全リスク管理システム 入場,保持,退出段階

戦略リスク

  1. 複数の指標をフィルタリングすることで,潜在的な良い機会が失われる可能性があります.
  2. 複数の市場で頻繁に誤ったブレイクシグナルを生む可能性があります.
  3. イチモク雲の指標は,入力のタイミングに影響を与える可能性があります.
  4. ダイナミックストップ・ロスのポジションは,急激に変動する市場では過度に緩い可能性があります.
  5. 過剰なフィルタリング条件は,取引機会を減少させ,戦略の全体的な収益に影響を与える可能性があります

戦略の最適化方向

  1. 市場変動に基づいて戦略パラメータを調整するための変動指標を導入する
  2. クラウドパラメータを最適化し,異なる市場環境に最適化
  3. 信号信頼性を向上させるため,音量分析を追加
  4. 高波動期を避けるための時間フィルタリングメカニズムを導入する
  5. ダイナミック戦略調整のための適応パラメータ最適化システムを開発

概要

この戦略は,複数の技術指標を組み合わせて完全な取引システムを構築する.この戦略は,信号生成に焦点を当てているだけでなく,包括的なリスク制御メカニズムも含んでいる.複数のフィルタリング条件を通じて,効果的に取引成功率を改善する.一方,動的なストップ・ロスのデザインは,戦略に良いリスク・リワード比率を提供している.最適化余地がある一方で,全体的には明確な論理を持つ構造的な戦略システムである.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Ichimoku Strategy with Optional RSI, MA Filters and Alerts", overlay=true)

// Input for date and time filter
startDate = input(timestamp("2020-01-01 00:00"), title="Start Date")
endDate = input(timestamp("2023-01-01 00:00"), title="End Date")

// Inputs for Ichimoku settings
tenkanPeriod = input.int(9, title="Tenkan Period")
kijunPeriod = input.int(26, title="Kijun Period")
senkouBPeriod = input.int(52, title="Senkou B Period")

// Inputs for Moving Average settings
useMAFilter = input.bool(true, title="Enable Moving Average Filter?")
ma50Period = input.int(50, title="50-day MA Period")
ma200Period = input.int(200, title="200-day MA Period")

// Inputs for RSI settings
useRSIFilter = input.bool(true, title="Enable RSI Filter?")
rsiPeriod = input.int(14, title="RSI Period")
rsiOverbought = input.int(70, title="RSI Overbought Level")
rsiOversold = input.int(30, title="RSI Oversold Level")

// Ichimoku Cloud components
tenkan = (ta.highest(high, tenkanPeriod) + ta.lowest(low, tenkanPeriod)) / 2
kijun = (ta.highest(high, kijunPeriod) + ta.lowest(low, kijunPeriod)) / 2
senkouA = ta.sma(tenkan + kijun, 2) / 2
senkouB = (ta.highest(high, senkouBPeriod) + ta.lowest(low, senkouBPeriod)) / 2
chikou = close[26]

// Moving Averages
ma50 = ta.sma(close, ma50Period)
ma200 = ta.sma(close, ma200Period)

// Weekly RSI
rsiSource = request.security(syminfo.tickerid, "W", ta.rsi(close, rsiPeriod))

// Plotting the Ichimoku Cloud components
pTenkan = plot(tenkan, color=color.blue, title="Tenkan")
pKijun = plot(kijun, color=color.red, title="Kijun")
pSenkouA = plot(senkouA, color=color.green, title="Senkou A")
pSenkouB = plot(senkouB, color=color.maroon, title="Senkou B")
plot(chikou, color=color.purple, title="Chikou")
plot(ma50, color=color.orange, title="50-day MA")
plot(ma200, color=color.yellow, title="200-day MA")

// Corrected fill function
fill(pSenkouA, pSenkouB, color=senkouA > senkouB ? color.green : color.red, transp=90)

// Debugging: Output values on the chart to see if conditions are ever met
plotshape(series=(tenkan > kijun), color=color.blue, style=shape.triangleup, title="Tenkan > Kijun")
plotshape(series=(tenkan < kijun), color=color.red, style=shape.triangledown, title="Tenkan < Kijun")
plotshape(series=(ma50 > ma200), color=color.orange, style=shape.labelup, title="MA 50 > MA 200")
plotshape(series=(ma50 < ma200), color=color.yellow, style=shape.labeldown, title="MA 50 < MA 200")

// Define the trailing stop loss using Kumo
var float trailingStopLoss = na

// Check for MA conditions (apply only if enabled)
maConditionLong = not useMAFilter or (useMAFilter and ma50 > ma200)
maConditionShort = not useMAFilter or (useMAFilter and ma50 < ma200)

// Check for Ichimoku Cloud conditions
ichimokuLongCondition = close > math.max(senkouA, senkouB)
ichimokuShortCondition = close < math.min(senkouA, senkouB)

// Check for RSI conditions (apply only if enabled)
rsiConditionLong = not useRSIFilter or (useRSIFilter and rsiSource > rsiOverbought)
rsiConditionShort = not useRSIFilter or (useRSIFilter and rsiSource < rsiOversold)

// Combine conditions for entry
longCondition = maConditionLong and tenkan > kijun and ichimokuLongCondition and rsiConditionLong
shortCondition = maConditionShort and tenkan < kijun and ichimokuShortCondition and rsiConditionShort

// Date and time filter
withinDateRange = true

// Check for Long Condition
if (longCondition and withinDateRange) 
    strategy.entry("Long", strategy.long)
    trailingStopLoss := math.min(senkouA, senkouB)
    alert("Buy Signal: Entering Long Position", alert.freq_once_per_bar_close)

// Check for Short Condition
if (shortCondition and withinDateRange) 
    strategy.entry("Short", strategy.short)
    trailingStopLoss := math.max(senkouA, senkouB)
    alert("Sell Signal: Entering Short Position", alert.freq_once_per_bar_close)

// Exit conditions
exitLongCondition = close < kijun or tenkan < kijun
exitShortCondition = close > kijun or tenkan > kijun

if (exitLongCondition and strategy.position_size > 0)
    strategy.close("Long")
    alert("Exit Signal: Closing Long Position", alert.freq_once_per_bar_close)

if (exitShortCondition and strategy.position_size < 0)
    strategy.close("Short")
    alert("Exit Signal: Closing Short Position", alert.freq_once_per_bar_close)

// Apply trailing stop loss
if (strategy.position_size > 0)
    strategy.exit("Trailing Stop Long", stop=trailingStopLoss)
else if (strategy.position_size < 0)
    strategy.exit("Trailing Stop Short", stop=trailingStopLoss)


関連性

もっと