Ferramentas do usuário

Ferramentas do site


tradingview:backtesting:grupos_oca

Grupos OCA

  • É possível colocar ordens em 2 grupos OCA diferentes (On-Cancells-All) no Pine.
  • strategy.oca.cancel
    • Assim que uma ordem do grupo for preenchida, mesmo que parcialmente, ou cancelada, as outras ordens do mesmo grupo são canceladas.
    • É importante considerar que ordens diferentes no mesmo grupo com o mesmo preço ou preços muito próximos pode ser preenchidas.
    • Este tipo de grupo OCA está disponível apenas para entrada de ordens porque todas as saídas são enviadas em strategy.oca.reduce
//@version=4
strategy("oca_cancel demo")
if year > 2014 and year < 2016
    strategy.entry("LE", strategy.long)
    strategy.entry("SE", strategy.short)
  • Você pode ter a impressão que essa é uma estratégia de reversão já que pyramiding não é permitido, mas o fato é que ambas ordens serão preenchidas porque ambas são ordens a mercado, o que siginifca que são pra ser executadas imediatamente no preço atual.
  • A segunda ordem não é cancelada porque ambas são preenchidas quase ao mesmo tempo e o sistema não tem tempo de processar a primeira ordem e cancelar a segunda antes desta ser também executada.
  • O mesmo aconteceria se essas fossem ordens a preço com o mesmo preço ou preços muito próximos, A estratégia enviar todas as ordens permitidas de acordo com a posição no mercado.
  • A estratégia enviar todas as ordens que não contradizem as regras (no caso - a posição no mercado é constante, portanto qualquer ordem de entrada pode ser preenchida).
  • A cada variação de tick, primeiro as ordens que tem suas condições satisfeitas são executadas e apenas então as ordens de grupos onde uma ordem foi executada terá as outras ordens canceladas.
  • Para tornar a estratégia acima em uma estratégia de reversão você precisa enviar ordens no grupo OCA.
//@version=4
strategy("oca_cancel demo")
if year > 2014 and year < 2016
    strategy.entry("LE", strategy.long, oca_type = strategy.oca.cancel, oca_name="Entry")
    strategy.entry("SE", strategy.short, oca_type = strategy.oca.cancel, oca_name="Entry")
  • strategy.oca.reduce
    • Este tipo de grupo permite múltiplas ordens dentro do grupo serem preenchidas.
    • Assim que uma das ordens do grupo começa a ser preenchida, o tamanho das outras ordens reduzem na quantidade executada.
    • É útil para estratégias de saída. Uma vez que o preço toca a ordem take-profit e esta está sendo preenchida, a ordem stop-loss não é cancelada mas o seu tamanho é reduzida pela quantidade executada, protegendo o restante da posição aberta.
  • strategy.oca.none
  • A ordem é enviada fora do grupo - valor padrão das funções strategy.order and strategy.entry
  • Todo grupo tem seu próprio identificador ID único - assim como ordens.
  • Se 2 grupos tem o mesmo ID - mas tipos diferentes - esses serão considerados grupos diferentes.
//@version=4
strategy("My Script")
if year > 2014 and year < 2016
    strategy.entry("Compra", strategy.long, oca_name="My oca", oca_type=strategy.oca.reduce)
    strategy.exit("DaCompra", "Compra", profit=100, loss=200, oca_name="My oca")
    strategy.entry("Venda", strategy.short, oca_name="My oca", oca_type=strategy.oca.cancel)
    strategy.order("Ordem", strategy.short, oca_name="My oca", oca_type=strategy.oca.none)
  • “Compra” e “Venda” serão colocadas em grupos diferentes por terem tipos diferentes.
  • “Order” estará fora de qualquer grupo já que tem seu tipo definido como strategy.oca.none.
  • “Compra” será sempre colocada no grupo de saída já que saídas são sempre colocadas no grupo de tipo strategy.oca.reduce_size


tradingview/backtesting/grupos_oca.txt · Última modificação: 05/04/2023 08:25 por 127.0.0.1