This strategy identifies strong trends and favorable timing for short-term trading with loss control. It tracks price breakouts of simple moving averages as trend signals and sets stop loss/take profit based on RSI divergences to capture short-term price movements.
Calculating multi-period simple moving averages
Setting 9-day, 50-day and 100-day SMAs
Short SMA crossing long SMA indicates trend direction
Judging overbought/oversold levels using RSI
RSI length is 14 periods
RSI above 70 is overbought, below 30 is oversold
Entering trades when price breaks 9-day SMA
Go long when price breaks above 9-day SMA
Go short when price breaks below 9-day SMA
Setting stop loss/take profit based on RSI divergences
RSI divergence for stop loss
Take profit when RSI reaches preset levels
Captures short-term trends, suitable for high frequency trading
SMA combos filter trend signals, avoiding bad trades
RSI helps determine timing, effectively control risks
Flexible stop loss/take profit locks short-term profits
Combining indicators improves stability
Inaccurate short-term trend judgment causes chasing
False RSI signals expand losses
Improper stop loss/take profit settings reduce profit or magnify losses
High trading frequency increases costs and slippage
Ineffective parameters and abnormal markets impact strategy
Optimize parameters, strict stop loss, manage costs
Test different SMA combos to improve trend judgment
Consider additional indicators like STOCH to verify RSI signals
Employ machine learning to determine valid breakouts
Adjust parameters for different products and sessions
Optimize stop loss/take profit logic for dynamic trailing
Explore auto parameter tuning mechanisms
This strategy combines SMA and RSI for a conservative short-term trading approach. Fine-tuning parameters, validating signals, controlling risks makes it more robust and adaptive. There is room for improvement by exploring more SMA combos, adding machine learning models etc. Continuous optimization will lead to further maturity.
/*backtest start: 2023-08-27 00:00:00 end: 2023-09-26 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Coinrule //@version=4 strategy(shorttitle='Maximized Scalping On Trend',title='Maximized Scalping On Trend (by Coinrule)', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 30, commission_type=strategy.commission.percent, commission_value=0.1) //Backtest dates fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 10, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2019, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2112, title = "Thru Year", type = input.integer, minval = 1970) showDate = input(defval = true, title = "Show Date Range", type = input.bool) start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => true // create function "within window of time" //MA inputs and calculations movingaverage_fast = sma(close, input(9)) movingaverage_mid= sma(close, input(50)) movingaverage_slow = sma(close, input (100)) //Trend situation Bullish= cross(close, movingaverage_fast) Momentum = movingaverage_mid > movingaverage_slow // RSI inputs and calculations lengthRSI = 14 RSI = rsi(close, lengthRSI) //Entry strategy.entry(id="long", long = true, when = Bullish and Momentum and RSI > 50) //Exit TP = input(70) SL =input(30) longTakeProfit = RSI > TP longStopPrice = RSI < SL strategy.close("long", when = longStopPrice or longTakeProfit and window()) plot(movingaverage_fast, color=color.black, linewidth=2 ) plot(movingaverage_mid, color=color.orange, linewidth=2) plot(movingaverage_slow, color=color.purple, linewidth=2)