Eu vejo o erro 'Limite do pedido (9000) foi atingido'
Esse erro significa que a estratégia colocou mais ordens ou fechou mais operações do que o número máximo permitido. Essas limitações variam conforme o plano e permitem que nossos servidores trabalhem com mais eficiência.
Para evitar esse erro, você pode usar o parâmetro trim_orders na função strategy(). Com esse parâmetro definido como true, cada nova ordem aparece na Lista de Trades e a ordem mais antiga acima da ordem limite é removida.
Aqui está um exemplo:
//@version=5
strategy("My strategy", overlay = true, margin_long = 100, margin_short = 100, trim_orders = true)if bar_index % 2 == 0 strategy.entry("My Long Entry Id", strategy.long)if bar_index % 2 != 0 strategy.entry("My Short Entry Id", strategy.short)
Como alternativa, você pode limitar as datas em que uma estratégia coloca ordens verificando se há um intervalo de tempo na condição da ordem. O script de exemplo a seguir estabelece um intervalo de tempo para a colocação de ordens, verificando se a hora da barra atual está entre dois timestamps.
//@version=5
strategy("My strategy", overlay = true, margin_long = 100, margin_short = 100)
enableFilter = input(true,"Enable Backtesting Range Filtering")
fromDate = input.time(timestamp("20 Jul 2023 00:00 +0300"), "Start Date")
toDate = input.time(timestamp("20 Jul 2099 00:00 +0300"), "End Date")
tradeDateIsAllowed = not enableFilter or (time >= fromDate and time <= toDate)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))if longCondition and tradeDateIsAllowed strategy.entry("Long", strategy.long)if shortCondition and tradeDateIsAllowed strategy.entry("Short", strategy.short)