この戦略は,相対強度指数 (RSI) 指標に基づいています.この戦略は,RSI値が事前に設定された上位および下位
この戦略は,市場における過剰購入および過剰売却のシグナルを捕捉するために,RSI指標を利用し,リスク管理のためにストップ・ロストとポジション期間制限を導入する.戦略論理はシンプルで直接的で,実装し最適化することは簡単です.しかし,戦略のパフォーマンスには市場の変動とパラメータ設定の影響があります.したがって,戦略の安定性と収益性を向上させるために,他の分析方法とリスク管理措置を組み合わせることが必要です.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Simple RSI Strategy", overlay=true, initial_capital=20, commission_value=0.1, commission_type=strategy.commission.percent) // Define the hardcoded date (Year, Month, Day, Hour, Minute) var hardcodedYear = 2024 var hardcodedMonth = 6 var hardcodedDay = 10 // Convert the hardcoded date to a timestamp var start_date = timestamp(hardcodedYear, hardcodedMonth, hardcodedDay) // settings order_size_usdt = input.float(20, title="Order Size (USDT)") rsiLength = input.int(9, title="RSI Length") rsiBuyThreshold = input.int(30, title="RSI Buy Threshold") rsiSellThreshold = input.int(70, title="RSI Sell Threshold") rsibuystrat = input.int(1, title="buy strat 1=achieved,2=recross") rsisellstrat = input.int(1, title="sell strat 1=achieved,2=recross") stoploss = input.int(1, title="Stop loss percent") max_duration = input(24, title="Max Position Duration (hours)")*60 // emaPeriod = input.int(50, title="EMA Period") // smaPeriod = input.int(200, title="SMA Period") rsi = ta.rsi(close, rsiLength) // ma_rsi = ta.sma(rsi, rsiLength) // ema = ta.ema(close,emaPeriod) // sma = ta.sma(close,smaPeriod) // plot(sma, color=color.red, title="exp Moving Average") // plot(smal, color=color.blue, title="Simple Moving Average") longCondition = ((ta.crossunder(rsi, rsiBuyThreshold) and rsibuystrat==1) or (ta.crossover(rsi, rsiBuyThreshold) and rsibuystrat==2) ) and strategy.position_size == 0 shortCondition = ( (ta.crossover(rsi, rsiSellThreshold) and rsisellstrat==1) or (ta.crossunder(rsi, rsiSellThreshold) and rsisellstrat==2) ) and strategy.position_size > 0 // Execute Buy and Sell orders if (longCondition) positionSize = order_size_usdt / close strategy.entry("Long", strategy.long,qty=positionSize) if (stoploss>0) stopLossPrice = close * (1 - stoploss/100 ) strategy.exit("Stop Loss", from_entry="Long", stop=stopLossPrice) if (shortCondition )//or stopCondition) strategy.close("Long") //add condition open time if (strategy.position_size > 0 and max_duration >0) var float entry_time = na if (strategy.opentrades > 0) entry_time := nz(strategy.opentrades.entry_time(0), na) else entry_time := na current_time = time var float duration_minutes = -1 if (not na(entry_time)) duration_minutes := (current_time - entry_time) / 60000 // Close positions after a certain duration (e.g., 60 minutes) // if ( duration_minutes > max_duration and close>=strategy.opentrades.entry_price(0)) if ( duration_minutes > max_duration ) label.new(bar_index, high, text="Duration: " + str.tostring(duration_minutes/60) + " hrs", color=color.blue, textcolor=color.white, style=label.style_label_down, size=size.small) strategy.close("Long") // Plot Buy and Sell signals plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") //plotshape(series=stopCondition, title="stop Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Plot RSI // hline(rsiBuyThreshold, "RSI Buy Threshold", color=color.green) // hline(rsiSellThreshold, "RSI Sell Threshold", color=color.red)