
The Scalping Dips in Bull Market strategy is a trend-following strategy. It buys the dip during bull markets, sets a wide stop loss to lock in profits when exiting positions. This strategy is suitable for bull markets and can yield excess returns.
This strategy first calculates the percentage price change over a lookback period. When the price drops by more than the preset callback percentage, a buy signal is triggered. At the same time, the moving average line needs to be above the close price as a confirmation of the uptrend.
After entering a position, stop loss and take profit prices are set. The stop loss percentage is large to ensure sufficient funds; the take profit percentage is small for fast profit taking. When the stop loss or take profit is triggered, the position will be closed.
The advantages of this strategy are:
There are also some risks with this strategy:
Counter measures: Strictly control position sizing, adjust stop loss percentage, properly reduce take profit exit ratio to mitigate risks.
The strategy can be optimized in the following aspects:
The Scalping Dips in Bull Market strategy locks in excess returns using a wide stop loss. It capitalizes on buying callback dips in bull market trends for profit opportunities. Fine tuning parameters and risk controls can yield good steady returns.
/*backtest
start: 2023-12-30 00:00:00
end: 2024-01-29 00:00:00
period: 1h
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=3
strategy(shorttitle='Scalping Dips On Trend',title='Scalping Dips On Trend (by Coinrule)', overlay=true, initial_capital = 1000, 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")
fromDay = input(defval = 10, title = "From Day")
fromYear = input(defval = 2020, title = "From Year")
thruMonth = input(defval = 1, title = "Thru Month")
thruDay = input(defval = 1, title = "Thru Day")
thruYear = input(defval = 2112, title = "Thru Year")
showDate = input(defval = true, title = "Show Date Range")
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => true
inp_lkb = input(1, title='Lookback Period')
perc_change(lkb) =>
overall_change = ((close[0] - close[lkb]) / close[lkb]) * 100
// Call the function
overall = perc_change(inp_lkb)
//MA inputs and calculations
MA=input(50, title='Moving Average')
MAsignal = sma(close, MA)
//Entry
dip= -(input(2))
strategy.entry(id="long", long = true, when = overall< dip and MAsignal > close and window())
//Exit
Stop_loss= ((input (10))/100)
Take_profit= ((input (3))/100)
longStopPrice = strategy.position_avg_price * (1 - Stop_loss)
longTakeProfit = strategy.position_avg_price * (1 + Take_profit)
strategy.close("long", when = close < longStopPrice or close > longTakeProfit and window())