この戦略は,現在の市場が過買いまたは過売れているかどうかを判断するために,異なる時間枠にわたるRSI指標の組み合わせを使用し,価格と移動平均の関係を組み合わせて購入と販売信号を生成します.目標は,統合中に利益を得るために,ダウンで購入し,ラリーで販売することです.
5分,15分,および1時間のRSI値を計算する. 5分,15分,および1時間のRSIが同時に25を下回るとき,それは過売状態として判断され,購入信号を生成する. 5分,15分,および1時間のRSIが同時に75を超えると,それは過買い状態として判断され,販売信号を生成する.
21日移動平均を突破することは,取引信号としても機能する.価格が移動平均を下回れば,購入信号が生成される.価格が移動平均を下回れば,販売信号が生成される.
現行のポジションに基づいて,最初の取引サイズとピラミッドルールが設定されます.最初のエントリには2つの契約があり,ポジションが2つの契約に達するまで毎回1つの契約を追加します.
ストップロスは損失が3%に達すると起動します. 利益が1%に達すると利益を取ります.
RSIインジケーターを複数のタイムフレームで利用して過買い・過売状況を決定することで信号の信頼性が向上します
移動平均を組み合わせると 追加の取引信号が生み出し 取引機会を拡大します
ストップ・ロースとテイク・ロースのポジションサイズ制御と利益/損失比を設定することでリスク管理ができます
定量でスケールアップすれば 利益の可能性が広がります
RSIの差異リスク.RSIが逆転する前に過剰購入または過剰販売の限界に達した後,価格がトレンドを継続する可能性があります.RSI信号を盲目的にフォローすると損失を引き起こす可能性があります.
移動平均取引信号は誤解を招く可能性があります.移動平均は,巨大な価格変動の間に価格変化をタイムリーに追跡できていません.
ポジションのサイズと利益/損失比の設定が正しくない場合,リスク管理が不適切になります.
ピラミッド条件を合理的に設定して 損失を拡大しないようにする必要があります
RSI パラメータを調整し,より信頼性の高い過買い/過売り信号を見つけるために異なる期間の組み合わせをテストします.
異なる移動平均値を補助取引信号または他の技術指標としてテストする.
ポジションのサイズを最適化し,ストップ・ロスト/テイク・プロフィートのルールを確立し,より科学的リスク管理メカニズムを構築する.
ピラミッド条件を最適化して増幅損失を防ぐ.固定量スケーリングではなく指数式スケーリングを検討する.
この戦略は,トレンドの可能性を決定し,より高い勝利率を達成するために,複数のタイムフレームにわたってRSIを使用する. 取引機会を拡大するために移動平均値で追加の信号が生成される. リスクはポジションサイジング,ストップ損失/利益を取ること,固定量ピラミディングを通じて管理される. 全体的に,この戦略はトレンドと平均逆転指標を組み合わせ,トレンドフォローと底部ピックリングの論理の両方を組み込み,統合中に有効である. より一貫したパフォーマンスのためにより強力なリスク管理を構築するために,さらなるテストと最適化が必要である.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1) len =14 Initial_Trade_Size = 2 up = rma(max(change(close), 0), len) down = rma(-min(change(close), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) RSI_1h = request.security(syminfo.tickerid, "60", rsi) RSI_3h = request.security(syminfo.tickerid, "180", rsi) RSI_15m = request.security(syminfo.tickerid, "15", rsi) RSI_5m = request.security(syminfo.tickerid, "5", rsi) RSI_1m = request.security(syminfo.tickerid, "1", rsi) ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21) ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21) //(RSI_3h<=25) and (RSI_1h<=25) and (RSI_15m<=25) and Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false //alertcondition(Positive, title='POS', message='POS') //plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny) Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false //alertcondition(Negative, title='NEG', message='NEG') //plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny) Positive and Negative and lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size //lastordersize =1 // and ((ema21_15-low)/ema21_15) > 0.077 //Adding to position rules if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03)) if(strategy.position_avg_price > close and strategy.position_size > 0) strategy.entry("Add", strategy.long , qty = lastordersize , when = true) if(strategy.position_avg_price < close and strategy.position_size < 0) strategy.entry("Add", strategy.short, qty = lastordersize , when = true) if (strategy.position_size == 0) if (Positive or ((ema21_5-low)/ema21_5) > 0.07) strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true) // and ((high-ema21_15)/ema21_15) > 0.077 if (Negative or ((high-ema21_5)/ema21_5) > 0.07) strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true) //lastordersize := lastordersize * 2 //or (strategy.openprofit / abs(strategy.position_size * close))>=0.01 if(cross(ema21_5, high) or cross(ema21_5, low)) strategy.close_all()