//@version=4
strategy("Reversão Demo")
if bar_index < 100
strategy.entry("compra", strategy.long, 4, when=strategy.position_size <= 0)
strategy.entry("venda", strategy.short, 6, when=strategy.position_size > 0)
plot(strategy.equity)
//@version=4
strategy("Uma Saída Demo")
strategy.entry("compra", strategy.long, 4, when=strategy.position_size <= 0)
strategy.exit("saida", "compra", 2, profit=10, loss=10)
//@version=4
strategy("Saída Parcial Demo")
if bar_index < 100
strategy.entry("compra", strategy.long, 4, when=strategy.position_size <= 0)
strategy.exit("bracket1", "compra", 2, profit=10, stop=10)
strategy.exit("bracket2", "compra", profit=20, stop=20)
As primeiras ordens take profit e stop loss (nível 1) estão em um grupo OCA.
As outras ordens (nível 2) estão em outro grupo OCA.
Isso significa que uma ordem do nível 1 é preenchida - ordens do nível 2 não são canceladas - elas se mantém ativas.
Ordens de estratégias são enviadas assim que as condições definidas sejam satisfeitas e o comando chamado no código.
O emulador do TradingView não executa a ordem antes antes do próximo tick acontecer enquanto em mercados reais isso pode acontecer antes.
Quando uma ordem a mercado é gerada no fechamento da barra atual, o emulador apenas executa a ordem na abertura do preço da próxima barra.
//@version=4
strategy("Execução Próxima Barra Demo")
if bar_index < 100
strategy.order("compra", strategy.long, when=strategy.position_size == 0)
strategy.order("venda", strategy.short, when=strategy.position_size != 0)
Com o código acima todas as ordens são preenchidas na abertura de cada barra.
Condições para envio da ordem (when, pyramiding, strategy.risk) são testadas quando o script é calculado.
Se todas as condições são satisfeitas a ordem é enviada.
Se qualquer condição não for satisfeita a ordem não é enviada.
É importante cancelar ordens enviadas a preço (ordens limite, stop, stop-limite)
//@version=4
strategy("Entrada no Preço Demo")
var c = 0
if year >= 2018
c := c + 1
if c == 1
strategy.order("C1", strategy.long, 2, stop = high + 35 * syminfo.mintick)
strategy.order("C2", strategy.long, 2, stop = high + 5 * syminfo.mintick)
Mesmo que pyramiding esteja desabilitado, ambas ordens serão preenchidas no backtesting porque quando são geradas não há posições de compra abertas no mercado.
Ambas ordens são enviadas e quando o preço satifaz a condição de execução, ambas são executadas.
É recomendado colocar as ordens em grupos OCA usando strategy.oca.cancel.
Desta forma apenas 1 ordem é executada e a outra é cancelada.
//@version=4
strategy("Entrada no Preço Demo v2")
var c = 0
if year > 2020
c := c + 1
if c == 1
strategy.order("C1", strategy.long, 2, stop = high + 35 * syminfo.mintick, oca_type = strategy.oca.cancel, oca_name = "COMPRAS")
strategy.entry("C2", strategy.long, 2, stop = high + 5 * syminfo.mintick, oca_type = strategy.oca.cancel, oca_name = "COMPRAS")
Se, por algum motivo, as condições de envio de ordens não são satisfeitas ao executar o comando - a entrada não é enviada. Por exemplo, se configurações de pyramiding estão definidas em 2, a posição existente já contém 2 entradas e a estratégia tenta uma terceira, isso não acontecerá.
As condições de entrada são testadas no estágio da geração da ordem e não no estágio da execução.
Portanto, se você enviar 2 entradas no preço com pyramiding desabilitado, assim que uma delas seja executada a outra não será cancelada automaticamente.
Para evitar problemas recomendamos usar grupos strategy.oca.cancel para entradas para que quando uma entrada seja preenchida a outra seja cancelada.
O mesmo é válido para ordens de saída no preço, ordens serão enviadas uma vez que suas condições sejam satisfeitas uma ordem de entrada com um ID equivalente é preenchida.