シモンズ戦略による金取引

作者: リン・ハーンチャオチャン,日付: 2024-03-01 12:28:38
タグ:

img

概要

この戦略は,移動平均指標,相対強度指数 (RSI) とエンゲルフィングパターンを組み合わせて,長期および短期取引を行う.主に21日,50日および200日移動平均値のクロスオーバーを取引信号として使用し,RSI指標とエンゲルフィングパターンを活用して,より良い最適化のために追加のエントリー信号をフィルタリングする.

戦略の論理

戦略は,以下の側面に基づいて取引決定を下します.

  1. 移動平均のクロスオーバー

    21日M&Aと200日M&Aのクロスオーバーは,トレンド逆転を決定するための主要な指標として使用されます. ゴールデンクロスは購入信号で,デッドクロスは販売信号です. 50日M&Aは,偽信号をフィルタリングするためにも使用されます.

  2. RSI インディケーター

    RSIは70でオーバー買いラインと30でオーバーセールラインを構成します.RSIは,長信号ではオーバー買いレベル以下,ショート信号ではオーバーセールレベル以上で,ピークを購入し,バレーを売却しないようにする必要があります.

  3. 飲み込むパターン 確認

    黄金十字が起こる時,長信号には上昇傾向の吞没パターンが必要である.死十字が起こる時,短信号には下落傾向の吞没パターンが必要である.これはさらにトレンド逆転を確認する.

上記3つの条件がすべて満たされたときに取引信号が生成される.これは戦略のための厳格なフィルターを構成する.

利点

最大の利点は,意思決定のための複数のパラメータと指標の包括的な使用にあります.これは誤った信号をうまくフィルターし,不要なストップ損失を減らすことができます.特に:

  1. 移動平均戦略自体は比較的安定性があります.

  2. RSIの設定は 買い上げピークと売り上げバレーを 防止します

  3. 流れの逆転判断の信頼性を向上させる.

  4. ストップ・ロスはより小さいので リスクを効果的にコントロールできます

リスク

この戦略は信号フィルタリングとリスク管理において優れているが,依然としていくつかの弱点とリスクを含んでいる.

  1. 複雑なパラメータ調節には,最適な組み合わせを見つけるために 重要な努力が必要です

  2. 厳格な入口信号は 良い機会を逃すかもしれません

  3. 極めて不安定な市場状況下では 遅延が一定です

  4. 長期安定性と有効性はさらに検証する必要があります.

上記のリスクに対処するために パラメータを微調整し 論理流を最適化し 他の指標を組み込み 戦略を改善することができます

最適化 の 機会

複数の指標を組み合わせることでうまくいっているにもかかわらず,この戦略にはまだ最適化のための余地があります.

  1. さらに,バックテストにより最適なパラメータセットを見つけ,より良いパラメータ組み合わせを決定するために,結果に対する異なるパラメータの影響を評価する.

  2. 傾向逆転のタイミングを判断するのに役立つMACD,KDなどの他の指標を組み込む.これはより包括的な指標システムを形成します.

  3. ストップ・ロスのメカニズムを強化し,改良する.より大きなストップ・ロスの割合が不必要なポジション変更を減らすことができるかどうかを評価する.

  4. 戦略の長期的有効性を検証するために,より長い歴史的データセットをテストします. 異なる市場条件のより多くの年に渡る安定性を調べます.

結論

結論として,この戦略は,移動平均値,RSI,およびエングルフィングパターンのような技術分析ツールのツールを活用して,長いショートゴールドトレードを行う.パラメータ構成とシグナルフィルタリングを通じて,ある程度リスクを制御するための比較的厳格なシステムを確立する.しかし,いかなる戦略も絶対的に完璧であることはできません.この戦略には依然として最適化と方向的な改善のための多くの余地があります.一般的に,定量化取引のための有意義な参照を提供します.しかし,実際に適用するときに実用的な調整で慎重に使用する必要があります.


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

//@version=4
strategy("Gold Trading with Simons Strategy", overlay=true)

// Parameters
length21 = input(21, minval=1, title="Length for 21 MA")
length50 = input(50, minval=1, title="Length for 50 MA")
length200 = input(200, minval=1, title="Length for 200 MA")
rsiLength = input(14, minval=1, title="RSI Length")
rsiOverbought = input(70, title="RSI Overbought Level")
rsiOversold = input(30, title="RSI Oversold Level")
takeProfitPercent = input(4, title="Take Profit %")
stopLossPercent = input(1, title="Stop Loss %")

// Moving Averages
ma21 = sma(close, length21)
ma50 = sma(close, length50)
ma200 = sma(close, length200)

// RSI
rsi = rsi(close, rsiLength)

// Engulfing Pattern
isBullishCandle(c) => close[c] > open[c]
isBearishCandle(c) => close[c] < open[c]

bearishEngulfing = isBullishCandle(1) and isBearishCandle(0) and close < open[1] and open > close[1]
bullishEngulfing = isBearishCandle(1) and isBullishCandle(0) and close > open[1] and open < close[1]

// Calculate Take Profit and Stop Loss Levels
takeProfitLevel(entryPrice) => entryPrice * (1 + takeProfitPercent / 100)
stopLossLevel(entryPrice) => entryPrice * (1 - stopLossPercent / 100)

// Entry Conditions
longCondition = crossover(ma21, ma200) and close > ma21 and close > ma50 and rsi < rsiOverbought and bullishEngulfing
shortCondition = crossunder(ma21, ma200) and close < ma21 and close < ma50 and rsi > rsiOversold and bearishEngulfing

// Entry
if (longCondition)
    entryPrice = close
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit", "Long", limit=takeProfitLevel(entryPrice))
    strategy.exit("Stop Loss", "Long", stop=stopLossLevel(entryPrice))
if (shortCondition)
    entryPrice = close
    strategy.entry("Short", strategy.short)
    strategy.exit("Take Profit", "Short", limit=takeProfitLevel(entryPrice))
    strategy.exit("Stop Loss", "Short", stop=stopLossLevel(entryPrice))

// Plotting
plot(ma21, color=color.blue, title="21 MA")
plot(ma50, color=color.orange, title="50 MA")
plot(ma200, color=color.red, title="200 MA")
hline(rsiOverbought, "RSI Overbought", color=color.green)
hline(rsiOversold, "RSI Oversold", color=color.red)
plot(rsi, "RSI", color=color.purple)

もっと