2倍指数関数移動平均RSI取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-30 15:44:11
タグ:

img

概要

この戦略は"ダブル指数関数移動平均RSI取引戦略"と呼ばれる.自動取引を実施するための主要な取引指標として,ダブルEMAと相対強度指数 (RSI) を使用する.

戦略原則

この戦略は,まず価格のダブル指数関数移動平均 (MA) を計算し,その後MAに基づいてRSIを計算し,さらにRSIの指数関数移動平均 (スムーズ) を計算する.RSIが移動平均を超えると購入信号を生成し,RSIが移動平均を下回ると販売信号を生成する.オプションとして,戦略は,1日最大取引数,株式の割合としての取引量,取引時間セッション,ポイントでの利益とストップ損失,リスク管理のためのポイントでのトライリングストップのパラメータも設定する.

戦略 の 強み

  1. 価格変化に早く反応し 騒音をフィルターで消す
  2. MAに基づいて RSI を計算すると,より安定し,偽取引を避ける.
  3. RSIの移動平均は,取引信号の確認と偽のブレイクを避けるのに役立ちます.
  4. 取引の最大数を設定することで 日々のリスクを制御できます
  5. トレーディングサイズを株式の割合として設定すると,単一のトレード損失が大きすぎるのを避ける.
  6. 取引時間の設定により,キータイムノードを回避し,流動性リスクを制御できます.
  7. ポイントで利益とストップロスを引き出すことは,単一の取引のP&Lを制限するのに役立ちます.
  8. ポイントを停止すると 浮動利益を固定し 引き上げを減らすことができます

戦略リスク

  1. ダブル・EMAは市場の動向に反応が遅いため 短期間の取引機会を逃す.
  2. RSIは偽の死亡/黄金十字信号を形成する傾向があります.慎重な取引のために他の指標と確認する必要があります.
  3. 固定資本の割合は 市場の変動に適応できず 資金の利用が不十分になるリスクがあります
  4. 固定ストップ損失/利益目標が異なる製品や市場状況に適応できず,早期離脱のリスクがあります.
  5. トレイリングストップは 市場が不安定なときに 頻繁に発生する傾向があります

対策:

  1. 感受性を高めるために MA 期間を短縮します.
  2. 音量などの他の指標をフィルター信号に追加します
  3. ダイナミックに取引サイズを調整する
  4. ストップ損失/利益目標を市場変動に基づいて調整する.
  5. 後ろのストップ・ロスト・ポイントを 適正にリラックスさせてください

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

  1. 最適なパラメータを見つけるために,異なる短期/長期のダブルEMA組み合わせをテストする.
  2. RSI計算期間パラメータをテストし,死亡/黄金交差信号の信頼性を向上させる.
  3. 音量やボリンジャー帯などの指標を 信号のノイズをフィルターに追加します
  4. 日々の閉店価格,変動等に基づいて,取引サイズとストップ損失/利益目標を動的に調整します.
  5. 異なる製品と市場環境のために,トレーリングストップメカニズムを最適化する.

概要

戦略には明確な機械的ルールと高い信頼性があり,中長期のトレンド製品に適しています.最適化されると,制御可能なリスクを持つ機械的戦略に従う基本的なトレンドになり,ライブパフォーマンスについてさらなる評価に値します.


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

//@version=2
strategy(title='[STRATEGY][RS]DemaRSI V0', shorttitle='D', overlay=false, initial_capital=100000, currency=currency.USD)
src = input(close)
ma_length = input(21)
rsi_length = input(4)
rsi_smooth = input(4)

ma = ema(ema(src, ma_length), ma_length)
marsi = rsi(ma, rsi_length)
smooth = ema(marsi, rsi_smooth)
plot(title='M', series=marsi, color=black)
plot(title='S', series=smooth, color=red)
hline(0)
hline(50)
hline(100)

max_order_per_day = input(6)
// strategy.risk.max_intraday_filled_orders(max_order_per_day)
trade_size_as_equity_factor = input(false)
trade_size = input(type=float, defval=10000.00) * (trade_size_as_equity_factor ? strategy.equity : 1)
take_profit_in_points = input(100000)
stop_loss_in_points = input(100000)
trail_in_points = input(150)

USE_SESSION = input(true)
trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false)
istradingsession = not USE_SESSION ? true : not na(time('1', trade_session))

buy_entry = istradingsession and crossover(marsi, smooth)
sel_entry = istradingsession and crossunder(marsi, smooth)

strategy.entry('buy', long=true, qty=1, when=buy_entry)
strategy.entry('sel', long=false, qty=1, when=sel_entry)

strategy.exit('buy.Exit', from_entry='buy', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.exit('sel.Exit', from_entry='sel', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.close_all(when=not istradingsession)

もっと