With the new update of PineScript language, it’s become very easy to add a backtesting range to TradingView Strategies.
You can do that in 3 easy steps:
- Insert the following code in your strategy. You can add it after the last input you have in the code, this way you’ll have range inputs last in your input list.
// Calculate start/end date and time condition startDate = input(timestamp("2019-01-01T00:00:00"), type = input.time) finishDate = input(timestamp("2021-01-01T00:00:00"), type = input.time) time_cond = time >= startDate and time <= finishDate
2. Add time condition to all your entries.
If you’re using market orders entries you can use the following syntax:
strategy.entry("long", strategy.long, when = crossover(ma_fast, ma_slow) and time_cond)
If you’re using stop/limit orders you can use if statement:
if (time_cond) strategy.entry("ParLE", strategy.long, stop=psar, comment="ParLE")
3. Last you can close all your open positions and pending orders using the following code:
if (not time_cond) strategy.close_all() strategy.cancel_all()
Example
Here is entire code for a strategy with a backtesting range:
//@version=4 strategy("MA Strategy", overlay=true) // MA Inputs ma_fast_length = input(5) ma_slow_length = input(25) ////////////////////////////////////////////////////////////// // Calculate start/end date and time condition startDate = input(timestamp("2019-01-01T00:00:00"), type = input.time) finishDate = input(timestamp("2021-01-01T00:00:00"), type = input.time) time_cond = time >= startDate and time <= finishDate ////////////////////////////////////////////////////////////// ma_fast = sma(close, ma_fast_length) ma_slow = sma(close, ma_slow_length) plot(ma_fast, color = color.red, linewidth = 2) plot(ma_slow, color = color.blue, linewidth = 2) ////////////////////////////////////////////////////////////// strategy.entry("long", strategy.long, when = crossover(ma_fast, ma_slow) and time_cond) strategy.entry("short", strategy.short, when = crossunder(ma_fast, ma_slow) and time_cond) if (not time_cond) strategy.close_all() strategy.cancel_all()
Hello and happy new year! Do not understand why it is not possible to use timestamp code in this script.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//
//@version=4
//
//Lead-In
strategy(“Två HMA DEMA Strategi”,
shorttitle=”Två HMA DEMA”,
overlay=true,
max_bars_back = 5000,
initial_capital=100000,
max_bars_back = 5000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_type=strategy.commission.percent,
commission_value=0.025,
pyramiding = 0)
short = input(9, minval=1)
srcShort = input(ohlc4, title=”Source Dema 1″)
long = input(10, minval=1)
srcLong = input(ohlc4, title=”Source Dema 2″)
long2 = input(14, minval=1)
srcLong2 = input(ohlc4, title=”Source Dema 3″)
e1 = hma(srcShort, short)
e2 = hma(e1, short)
dema1 = 2 * e1 – e2
plot(dema1, color=color.green, linewidth=2)
e3 = sma(srcLong, long)
e4 = sma(e3, long)
dema2 = 2 * e3 – e4
plot(dema2, color=color.blue, linewidth=2)
e5 = ema(srcLong2, long2)
e6 = ema(e5, long2)
dema3 = 2 * e5 – e6
plot(dema3, color=color.black, linewidth=2)
longC = dema1 > dema2 and dema1 > dema3
shortC = dema1 < dema2 and dema1 < dema3
alertlong = longC and not longC[1]
alertshort = shortC and not shortC[1]
strategy.entry("Long" , strategy.long , when = longC ,comment="Long")
strategy.entry("Short", strategy.short, when = shortC,comment="Short")
// Alerts
alertcondition(longC , title='Long' , message=' Buy Signal ')
alertcondition(shortC , title='Short', message=' Sell Signal ')
Hi, no idea. I believe it should work for this strategy as well if applied properly.