Wednesday 28 March 2018

Tutorial do testador de estratégia do tradingview


Mais um passo.


Complete a verificação de segurança para acessar o código comercial.


Por que eu tenho que completar um CAPTCHA?


Concluir o CAPTCHA prova que você é humano e dá acesso temporário à propriedade da web.


O que posso fazer para evitar isso no futuro?


Se você estiver em uma conexão pessoal, como em casa, você pode executar uma verificação antivírus em seu dispositivo para se certificar de que não está infectado com malware.


Se você estiver em um escritório ou rede compartilhada, você pode pedir ao administrador da rede para executar uma varredura na rede procurando dispositivos mal configurados ou infectados.


Outra maneira de evitar esta página no futuro é usar o Passo de Privacidade. Confira a extensão do navegador na Loja de Complementos do Firefox.


Cloudflare Ray ID: 3ddd82fc736359b4 & bull; Seu IP: 78.109.24.111 & bull; Performance & amp; segurança por Cloudflare.


Mais um passo.


Complete a verificação de segurança para acessar o código comercial.


Por que eu tenho que completar um CAPTCHA?


Concluir o CAPTCHA prova que você é humano e dá acesso temporário à propriedade da web.


O que posso fazer para evitar isso no futuro?


Se você estiver em uma conexão pessoal, como em casa, você pode executar uma verificação antivírus em seu dispositivo para se certificar de que não está infectado com malware.


Se você estiver em um escritório ou rede compartilhada, você pode pedir ao administrador da rede para executar uma varredura na rede procurando dispositivos mal configurados ou infectados.


Cloudflare Ray ID: 3ddd82ff17335972 & bull; Seu IP: 78.109.24.111 & bull; Performance & amp; segurança por Cloudflare.


Estratégias.


Uma estratégia é um estudo que pode enviar, modificar e cancelar pedidos (para comprar / vender). As estratégias permitem que você execute backtesting (emulação de negociação de estratégia em dados históricos) e forwardtesting (emulação de negociação de estratégia em dados em tempo real) de acordo com seus algoritmos pré-modificados.


Uma estratégia escrita no idioma Pine Script tem todas as mesmas capacidades que um indicador Pine. Quando você escreve um código de estratégia, ele deve começar com a palavra-chave "estratégia", não "estudar". Estratégias não apenas traçam algo, mas também colocam, modificam e cancelam pedidos. Eles têm acesso a informações de desempenho de estratégia essenciais através de palavras-chave específicas. A mesma informação está disponível para você na guia "Strategy Tester". Uma vez que uma estratégia é calculada em dados históricos, você pode ver enchimentos de ordem hipotéticos.


Um exemplo de estratégia simples.


Assim que o script for compilado e aplicado a um gráfico, você pode ver marcas de pedidos preenchidas e como seu saldo estava mudando durante o teste de retorno (curva de equidade). É uma estratégia mais simples que compra e vende em cada barra.


A estratégia de primeira linha ("teste") indica que o código pertence ao tipo de estratégia e seu nome é "teste". strategy. entry () é um comando para enviar pedidos "comprar" e "vender". plot (strategy. equity) traça a curva de equidade.


Como aplicar uma estratégia ao gráfico.


Para testar sua estratégia, aplique-a para o gráfico. Use o símbolo e os intervalos de tempo que deseja testar. Você pode usar uma estratégia interna dos "Indicadores & amp; Stratedies ", ou escreva o seu próprio no Pine Editor.


Nota: Ao usar tipos de gráfico não padronizados (Renko, Kagi, Line Break, Ponto e Figura, Heikin Ashi, Gráficos de Distribuição) como base para a estratégia, você precisa perceber que o resultado será diferente. As ordens serão executadas aos preços deste gráfico (por exemplo, para Heikin Ashi, levará os preços Heikin Ashi (os médios) e não os preços reais do mercado). Portanto, recomendamos que você use o tipo de gráfico padrão para estratégias.


Backtesting e forwardtesting.


As estratégias TradingView são calculadas em todos os dados históricos disponíveis no gráfico e continuam o cálculo quando os dados em tempo real chegam.


Tanto durante o cálculo histórico e em tempo real, o código é calculado na barra fecha por padrão.


Se isso for encaminhado, o código calcula em cada tico em tempo real. Para ativar isso, marque a opção "Recalcular em cada toque" nas configurações ou faça-o no próprio script: estratégia (. Calc_on_every_tick = true,.).


Você pode definir a estratégia para executar cálculos adicionais depois de um pedido ser preenchido. Para isso, você precisa marcar "Recalcular após pedido preenchido" nas configurações ou fazê-lo no próprio script: estratégia (..., calc_on_order_fills = true,.).


Emulador de corretores.


Existe um emulador de corretores no TradingView para estratégias de teste. Ao contrário do comércio real, o emulador preenche apenas os preços dos gráficos, por isso um pedido pode ser preenchido somente no próximo teste no teste a seguir e na barra seguinte no backtesting (ou posterior) após a estratégia ser calculada.


Conforme mencionado acima, a estratégia de backtesting é calculada no fechamento do bar. A seguinte lógica é usada para emular preenchimentos de pedidos:


Se o preço de abertura do bar estiver mais próximo do preço mais alto do mesmo bar, o emulador do corretor assume que o preço intrabar estava se movendo desta forma: Abrir → Alto → Baixo → Fechar. Se o preço de abertura do bar estiver mais próximo do preço mais baixo do mesmo bar, o emulador do corretor assume que o preço intrabar estava se movendo desta forma: Abrir → Baixo → Alto → Fechar. O emulador de corretores assume que não havia lacunas dentro da barra, o que significa que todos os preços intrabar estão disponíveis para a execução da ordem. Se a opção "Recalcular On Every Tick" nas propriedades da estratégia estiver ativada (ou a estratégia (. Calc_on_every_tick = true,.) É especificada no script), o código ainda é calculado apenas no fim da barra, seguindo a lógica acima.


Aqui está a estratégia que demonstra como as ordens são preenchidas pelo emulador do corretor:


Este código é calculado uma vez por barra por padrão, em seu fechamento, no entanto, há um cálculo adicional assim que um pedido é preenchido. É por isso que você pode ver 4 ordens preenchidas em cada barra: 2 pedidos em aberto, 1 ordem em alta e 1 ordem em baixo. Isso é uma prova de atraso. Se fosse em tempo real, as ordens seriam executadas em cada novo tiquetaque.


Também é possível emular a fila de pedidos. A configuração é chamada de "Verificar preço para ordens limite" e pode ser encontrada em propriedades de estratégia ou definir no próprio script: estratégia (. Backtest_fill_limits_assumption = X,.). O valor especificado = número de pontos / pips (movimentos de preço mínimo), valor padrão = 0. Uma ordem de limite é preenchida se o preço atual for melhor (maior para ordens de venda, menor para ordens de compra) para o número especificado de pontos / pips. O preço de execução ainda corresponde ao preço da ordem limite.


backtest_fill_limits_assumption = 1. Movimento do preço mínimo = 0,25.


Um pedido de limite de compra é colocado no preço 12,50.


O preço atual é 12,50.


O pedido não pode ser preenchido a preço atual apenas porque backtest_fill_limits_assumption = 1. Para preencher a ordem, o preço deve se tornar 0.25 * 1 menor. A ordem é colocada na fila.


Suponha que o próximo tiquete com preço 12,00. Este preço é 2 pontos mais baixo, o que significa que a condição "backtest_fill_limits_assumption = 1" está satisfeita, portanto, a ordem deve ser preenchida. O pedido é preenchido às 12h50 (preço original do pedido), mesmo que o preço não esteja mais disponível.


Comandos de colocação de pedidos.


Todas as palavras-chave projetadas para estratégias começam com o prefixo "estratégia". Os seguintes comandos são usados ​​para fazer pedidos: strategy. entry, strategy. order e strategy. exit:


strategy. entry - este comando coloca apenas ordens de entrada. É afetado pela configuração piramidal (nas propriedades da estratégia) e pela palavra-chave strategy. risk. allow_entry_in. Se houver uma posição de mercado aberto quando uma ordem de direção oposta for gerada, o número de contratos / partes / lotes / unidades será aumentado pelo número de contratos atualmente abertos (script equivalente: strategy. position_size + quantity). Como resultado, o tamanho da posição de mercado para abrir será igual ao tamanho da ordem, especificado no comando strategy. entry. strategy. order - este comando coloca as ordens de entrada e saída. Não é afetado pela configuração piramidal e pela palavra-chave strategy. risk. allow_entry_in. Ele permite que você crie construções complexas de entrada e saída quando as capacidades da strategy. entry e do strategy. exit não são suficientes. strategy. exit - este comando permite que você saia de uma posição de mercado por meio de uma ordem ou de uma estratégia de pedido de saída múltipla (stop loss, profit target, trailing stop). Todas essas ordens fazem parte do mesmo grupo strategy. oca. reduce. Uma ordem de saída não pode ser colocada se não houver uma posição de mercado aberto ou não haja uma ordem de entrada ativa (uma ordem de saída é vinculada à identificação de uma ordem de entrada). Não é possível sair de uma posição com uma ordem de mercado usando o comando strategy. exit. Para este objetivo, os seguintes comandos devem ser usados: strategy. close ou strategy. close_all. Se o número de contratos / partes / lotes / unidades especificadas para o strategy. exit for inferior ao tamanho da posição aberta atual, a saída será parcial. Não é possível sair da mesma ordem de entrada mais de 1 vez usando a mesma ordem de saída (ID), que permite que você crie estratégias de saída com múltiplos níveis. No caso, quando uma posição de mercado foi formada por várias ordens de entrada (pyramiding habilitado), cada ordem de saída é vinculada a cada ordem de entrada individualmente.


A estratégia acima invoca constantemente a posição de mercado de +4 para -6, para frente e para trás, o que é mostrado por sua trama.


Esta estratégia demonstra o caso, quando a posição do mercado nunca é fechada, porque usa a ordem de saída para fechar a posição do mercado apenas parcialmente e não pode ser usada mais de uma vez. Se você dobrar a linha para sair, a estratégia fechará completamente a posição do mercado.


Este código gera 2 níveis de parênteses (2 pegue ordens de lucro e 2 ordens de perda de parada). Ambos os níveis são ativados ao mesmo tempo: primeiro nível para sair de 2 contratos e o segundo para sair de todo o resto.


As primeiras ordens de lucro 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 assim que um pedido do nível 1 é preenchido, as ordens do nível 2 não são canceladas, ficam ativas.


Cada comando que faz um pedido possui ID (valor da string) - identificador de pedido exclusivo. Se um pedido com o mesmo ID já estiver colocado (mas ainda não preenchido), o comando atual modifica a ordem existente. Se a modificação não for possível (conversão de compra para venda), a ordem antiga é cancelada, a nova ordem é colocada. strategy. entry e strategy. order funcionam com os mesmos IDs (eles podem modificar a mesma ordem de entrada). strategy. exit funciona com outras IDs de pedido (é possível ter uma ordem de entrada e uma ordem de saída com a mesma ID).


Para cancelar uma ordem específica (por sua ID), o comando strategy. cancel (string id) deve ser usado. Para cancelar todas as ordens pendentes, o comando strategy. cancel_all () deve ser usado. As ordens de estratégia são colocadas assim que suas condições são satisfeitas e o comando é chamado de código. O emulador de corretor não executa as ordens antes do próximo cheque depois que o código foi calculado, enquanto na negociação real com corretor real, um pedido pode ser preenchido mais cedo. Isso significa que, se uma ordem de mercado for gerada no final da barra atual, ela será preenchida na próxima barra aberta.


Se este código é aplicado a um gráfico, todos os pedidos são preenchidos em aberto de cada barra.


As condições para a colocação da ordem (quando, pyramiding, strategy. risk) são verificadas quando o script é calculado. Se todas as condições forem satisfeitas, a ordem será colocada. Se alguma condição não for satisfeita, a ordem não será colocada. É importante cancelar pedidos de preços (ordens limite, parada e parada-limite).


Exemplo (para MSFT 1D):


Mesmo que a pirâmide esteja desativada, essas duas ordens são preenchidas em backtesting, porque quando elas são geradas não há uma posição aberta de mercado longo. Ambas as ordens são colocadas e quando o preço satisfaz a execução da ordem, ambos são executados. Recomenda-se colocar as ordens em 1 grupo OCA por meio de strategy. oca. cancel. neste caso, apenas uma ordem é preenchida e a outra é cancelada. Aqui está o código modificado:


Se, por algum motivo, as condições de colocação de pedidos não forem cumpridas ao executar o comando, a ordem de entrada não será colocada. Por exemplo, se as configurações de pirâmide estiverem configuradas para 2, a posição existente já contém duas entradas e a estratégia tenta colocar uma terceira, ela não será colocada. As condições de entrada são avaliadas no estágio de geração da ordem e não na fase de execução. Portanto, se você enviar duas entradas de tipo de preço com piramide desabilitado, uma vez que uma delas é executada, a outra não será cancelada automaticamente. Para evitar problemas, recomendamos usar grupos OCA-Cancelar para entradas, então, quando uma ordem de entrada é preenchida, os outros são cancelados.


O mesmo é válido para as saídas do tipo de preço - as ordens serão colocadas uma vez que suas condições sejam atendidas (ou seja, é preenchida uma ordem de entrada com o id respectivo).


Se você aplicar este exemplo a um gráfico, você pode ver que a ordem de saída foi preenchida, apesar do fato de ter sido gerado apenas uma vez antes do pedido de entrada a ser fechado. No entanto, a próxima entrada não foi fechada antes do final do cálculo, já que o comando de saída já foi acionado.


Posição de mercado de fechamento.


Apesar de ser possível sair de uma entrada específica no código, quando os pedidos são mostrados na guia Lista de Trades no StrategyTester, todos eles estão vinculados de acordo com a regra FIFO (primeiro dentro, primeiro fora). Se uma ID de pedido de entrada não for especificada para uma ordem de saída no código, a ordem de saída encerra a primeira ordem de entrada que abriu a posição de mercado. Vamos estudar o seguinte exemplo:


O código indicado acima coloca 2 ordens sequencialmente: "Buy1" a preço de mercado e "Buy2" a um preço 10% maior (ordem de parada). O pedido de saída é colocado somente depois que os pedidos de entrada foram preenchidos. Se você aplicar o código a um gráfico, você verá que cada pedido de entrada é fechado pela ordem de saída, embora não especifiquemos a identificação da ordem de entrada para fechar nesta linha: strategy. exit ("bracket", loss = 10, profit = 10, quando = strategy. position_size == 15)


Ele abre 5 contratos de posição longa com a ordem "Buy1". Estende a posição comprada comprando mais 10 contratos com preço 10% maior com a ordem "Buy2". A ordem de saída (strategy. close) para vender 10 contratos (saída de "Buy2") é preenchida.


Se você der uma olhada no enredo, você pode ver esse preço médio de entrada = preço de execução "Buy2" e nossa estratégia fechou exatamente essa ordem de entrada, enquanto na guia TradeList podemos ver que fechou o primeiro pedido "Buy1" e meio do segundo "Buy2". Isso significa que, independentemente da ordem de entrada que você especificar para a sua estratégia fechar, o emulador do corretor ainda fechará o primeiro (de acordo com a regra FIFO). Funciona da mesma maneira quando se troca com o intermediário intermediário.


Grupos OCA.


É possível colocar pedidos em 2 grupos OCA diferentes no Pine Script:


strategy. oca. cancel - assim que um pedido do grupo é preenchido (mesmo parcialmente) ou cancelado, os outros pedidos do mesmo grupo são cancelados. Deve ter em mente que, se os preços das ordens forem iguais ou forem próximos, mais de 1 ordem do mesmo grupo pode ser preenchida. Este tipo de grupo OCA está disponível somente para pedidos de entrada porque todas as ordens de saída são colocadas em strategy. oca. reduce.


Você pode pensar que esta é uma estratégia inversa, uma vez que a pirâmide não é permitida, mas, de fato, ambas as ordens serão preenchidas porque são de ordem do mercado, o que significa que elas serão executadas imediatamente ao preço atual. A segunda ordem não é cancelada porque ambos são preenchidos quase no mesmo momento e o sistema não tem tempo para processar o preenchimento da primeira ordem e cancelar o segundo antes de ser executado. O mesmo aconteceria se estes fossem pedidos de preços com preços iguais ou similares. A estratégia coloca todos os pedidos (que são permitidos de acordo com a posição do mercado, etc.).


A estratégia coloca todos os pedidos que não contradizem as regras (na nossa posição, a posição do mercado é plana, portanto, qualquer pedido de entrada pode ser preenchido). Em cada cálculo do tiquetaque, primeiro todos os pedidos com as condições satisfeitas são executados e somente as ordens do grupo onde um pedido foi executado são canceladas.


strategy. oca. reduce - este tipo de grupo permite que vários pedidos dentro do grupo sejam preenchidos. À medida que uma das ordens dentro do grupo começa a ser preenchida, o tamanho de outras ordens é reduzido pelo valor dos contratos preenchidos. É muito útil para as estratégias de saída. Uma vez que o preço atinja a sua ordem de lucro e está sendo preenchido, a perda de stop não é cancelada, mas seu valor é reduzido pelo valor dos contratos preenchidos, protegendo assim o restante da posição aberta. strategy. oca. none - a ordem é colocada fora do grupo (valor padrão para os comandos strategy. order e strategy. entry).


Todo grupo tem seu id exclusivo (da mesma forma que os pedidos). Se dois grupos tiverem o mesmo id, mas tipo diferente, eles serão considerados grupos diferentes. Exemplo:


"Comprar" e "Vender" serão colocados em diferentes grupos, pois seu tipo é diferente. "Ordem" estará fora de qualquer grupo, pois seu tipo está definido para strategy. oca. none. Além disso, "Buy" será colocado no grupo de saída, pois as saídas são sempre colocadas no grupo de tipo strategy. oca. reduce_size.


Gerenciamento de riscos.


Não é fácil criar uma estratégia lucrativa universal. Normalmente, estratégias são criadas para certos padrões de mercado e podem produzir perdas incontroláveis ​​quando aplicadas a outros dados. Portanto, interromper a negociação automática no tempo, as coisas ficam ruins é um problema sério. Existe um grupo especial de comandos de estratégia para gerenciar riscos. Todos começam com o prefixo strategy. risk. *.


Você pode combinar qualquer número de riscos em qualquer combinação dentro de uma estratégia. Todo comando de categoria de risco é calculado em cada marca, bem como em todos os eventos de execução de pedidos independentemente da configuração da estratégia calc_on_order_fills. Não há como desativar qualquer regra de risco no tempo de execução do script. Independentemente de onde no script a regra de risco estiver localizada, ela sempre será aplicada a menos que a linha com a regra seja excluída e o script seja recompilado.


Se no próximo cálculo qualquer das regras for acionada, nenhuma ordem será enviada. Portanto, se uma estratégia tiver várias regras do mesmo tipo com diferentes parâmetros, ela irá parar de calcular quando a regra com os parâmetros mais rigorosos é desencadeada. Quando uma estratégia é interrompida, todas as ordens não executadas são canceladas e, em seguida, uma ordem de mercado é enviada para fechar a posição se não for plana.


Além disso, vale lembrar que ao usar resoluções superiores a 1 dia, a barra inteira é considerada 1 dia para as regras que começam com o prefixo "strategy. risk. max_intraday_"


A posição será fechada e a negociação será interrompida até o final de cada sessão de negociação após duas ordens serem executadas nesta sessão à medida que a segunda regra é desencadeada anteriormente e é válida até o final da sessão de negociação.


Deve lembrar-se que a regra strategy. risk. allow_entry_in é aplicada somente nas entradas para que seja possível entrar em uma troca usando o comando strategy. order, pois este comando não é um comando de entrada per se. Além disso, quando a regra strategy. risk. allow_entry_in está ativa, as entradas em um "comércio proibido" tornam-se as saídas em vez das negociações reversas.


Exemplo (MSFT 1D):


Como as entradas curtas são proibidas pelas regras de risco, em vez de transações reversas, as negociações de saída longa serão feitas.


As estratégias TradingView podem operar na moeda diferente da moeda do instrumento. NetProfit e OpenProfit são recalculados na moeda da conta. A moeda da conta é definida nas propriedades da estratégia - a lista suspensa Moeda básica ou no script através da palavra-chave estratégia (. Currency = currency. *,.). Ao mesmo tempo, os valores do relatório de desempenho são calculados na moeda selecionada.


O lucro comercial (aberto ou fechado) é calculado com base no lucro na moeda do instrumento multiplicado pela taxa cruzada no fechamento do dia de negociação anterior à barra onde a estratégia é calculada.


Exemplo: trocamos EURUSD, D e selecionamos EUR como moeda da estratégia. Nossa estratégia compra e sai da posição usando 1 lucro de ponto ou stopLoss.


Depois de adicionar esta estratégia ao gráfico, podemos ver que as linhas do gráfico estão em correspondência. Isso demonstra que a taxa para calcular o lucro para cada comércio foi baseada no fechamento do dia anterior.


Ao negociar em resoluções intra-dia, a taxa cruzada no encerramento do dia de negociação anterior ao bar onde a estratégia é calculada será usada e não será alterada durante todo o período de negociação.


Ao negociar em deliberações superiores a 1 dia, será utilizada a taxa cruzada no encerramento do dia de negociação anterior ao encerramento do bar, onde a estratégia será calculada. Digamos que trocamos em um gráfico semanal, então a taxa de cruzamento no fechamento da sessão de quinta-feira sempre será usada para calcular os lucros.


Em tempo real, a taxa de fechamento da sessão de ontem é usada.


algotrading.


100 & # 32; пользователей находятся здесь.


МОДЕРАТОРЫ.


Bem-vindo ao Reddit,


a primeira página da internet.


e inscreva-se em uma das milhares de comunidades.


Quer adicionar à discussão?


помощь правила сайта центр поддержки вики реддикет mod guidelines связаться с нами.


приложенияи инструменты Reddit para iPhone Reddit para o site móvel Android кнопки.


Использование данного сайта означает, что вы принимаете & # 32; пользовательского соглашения & # 32; и & # 32; Политика конфиденциальности. &cópia de; 2018 reddit инкорпорейтед. Все права защищены.


REDDIT e o logotipo ALIEN são marcas registradas da reddit inc.


& pi; Renderizado pelo PID 4365 em & # 32; app-285 & # 32; em 2018-01-16 02: 05: 47.266103 + 00: 00 executando b995ef9 código do país: UA.


Estratégias.


Uma estratégia é um estudo que pode enviar, modificar e cancelar pedidos (para comprar / vender). As estratégias permitem que você execute backtesting (emulação de negociação de estratégia em dados históricos) e forwardtesting (emulação de negociação de estratégia em dados em tempo real) de acordo com seus algoritmos pré-modificados.


Uma estratégia escrita no idioma Pine Script tem todas as mesmas capacidades que um indicador Pine. Quando você escreve um código de estratégia, ele deve começar com a palavra-chave "estratégia", não "estudar". Estratégias não apenas traçam algo, mas também colocam, modificam e cancelam pedidos. Eles têm acesso a informações de desempenho de estratégia essenciais através de palavras-chave específicas. A mesma informação está disponível para você na guia "Strategy Tester". Uma vez que uma estratégia é calculada em dados históricos, você pode ver enchimentos de ordem hipotéticos.


Um exemplo de estratégia simples.


Assim que o script for compilado e aplicado a um gráfico, você pode ver marcas de pedidos preenchidas e como seu saldo estava mudando durante o teste de retorno (curva de equidade). É uma estratégia mais simples que compra e vende em cada barra.


A estratégia de primeira linha ("teste") indica que o código pertence ao tipo de estratégia e seu nome é "teste". strategy. entry () é um comando para enviar pedidos "comprar" e "vender". plot (strategy. equity) traça a curva de equidade.


Como aplicar uma estratégia ao gráfico.


Para testar sua estratégia, aplique-a para o gráfico. Use o símbolo e os intervalos de tempo que deseja testar. Você pode usar uma estratégia interna dos "Indicadores & amp; Stratedies ", ou escreva o seu próprio no Pine Editor.


Nota: Ao usar tipos de gráfico não padronizados (Renko, Kagi, Line Break, Ponto e Figura, Heikin Ashi, Gráficos de Distribuição) como base para a estratégia, você precisa perceber que o resultado será diferente. As ordens serão executadas aos preços deste gráfico (por exemplo, para Heikin Ashi, levará os preços Heikin Ashi (os médios) e não os preços reais do mercado). Portanto, recomendamos que você use o tipo de gráfico padrão para estratégias.


Backtesting e forwardtesting.


As estratégias TradingView são calculadas em todos os dados históricos disponíveis no gráfico e continuam o cálculo quando os dados em tempo real chegam.


Tanto durante o cálculo histórico e em tempo real, o código é calculado na barra fecha por padrão.


Se isso for encaminhado, o código calcula em cada tico em tempo real. Para ativar isso, marque a opção "Recalcular em cada toque" nas configurações ou faça-o no próprio script: estratégia (. Calc_on_every_tick = true,.).


Você pode definir a estratégia para executar cálculos adicionais depois de um pedido ser preenchido. Para isso, você precisa marcar "Recalcular após pedido preenchido" nas configurações ou fazê-lo no próprio script: estratégia (..., calc_on_order_fills = true,.).


Emulador de corretores.


Existe um emulador de corretores no TradingView para estratégias de teste. Ao contrário do comércio real, o emulador preenche apenas os preços dos gráficos, por isso um pedido pode ser preenchido somente no próximo teste no teste a seguir e na barra seguinte no backtesting (ou posterior) após a estratégia ser calculada.


Conforme mencionado acima, a estratégia de backtesting é calculada no fechamento do bar. A seguinte lógica é usada para emular preenchimentos de pedidos:


Se o preço de abertura do bar estiver mais próximo do preço mais alto do mesmo bar, o emulador do corretor assume que o preço intrabar estava se movendo desta forma: Abrir → Alto → Baixo → Fechar. Se o preço de abertura do bar estiver mais próximo do preço mais baixo do mesmo bar, o emulador do corretor assume que o preço intrabar estava se movendo desta forma: Abrir → Baixo → Alto → Fechar. O emulador de corretores assume que não havia lacunas dentro da barra, o que significa que todos os preços intrabar estão disponíveis para a execução da ordem. Se a opção "Recalcular On Every Tick" nas propriedades da estratégia estiver ativada (ou a estratégia (. Calc_on_every_tick = true,.) É especificada no script), o código ainda é calculado apenas no fim da barra, seguindo a lógica acima.


Aqui está a estratégia que demonstra como as ordens são preenchidas pelo emulador do corretor:


Este código é calculado uma vez por barra por padrão, em seu fechamento, no entanto, há um cálculo adicional assim que um pedido é preenchido. É por isso que você pode ver 4 ordens preenchidas em cada barra: 2 pedidos em aberto, 1 ordem em alta e 1 ordem em baixo. Isso é uma prova de atraso. Se fosse em tempo real, as ordens seriam executadas em cada novo tiquetaque.


Também é possível emular a fila de pedidos. A configuração é chamada de "Verificar preço para ordens limite" e pode ser encontrada em propriedades de estratégia ou definir no próprio script: estratégia (. Backtest_fill_limits_assumption = X,.). O valor especificado = número de pontos / pips (movimentos de preço mínimo), valor padrão = 0. Uma ordem de limite é preenchida se o preço atual for melhor (maior para ordens de venda, menor para ordens de compra) para o número especificado de pontos / pips. O preço de execução ainda corresponde ao preço da ordem limite.


backtest_fill_limits_assumption = 1. Movimento do preço mínimo = 0,25.


Um pedido de limite de compra é colocado no preço 12,50.


O preço atual é 12,50.


O pedido não pode ser preenchido a preço atual apenas porque backtest_fill_limits_assumption = 1. Para preencher a ordem, o preço deve se tornar 0.25 * 1 menor. A ordem é colocada na fila.


Suponha que o próximo tiquete com preço 12,00. Este preço é 2 pontos mais baixo, o que significa que a condição "backtest_fill_limits_assumption = 1" está satisfeita, portanto, a ordem deve ser preenchida. O pedido é preenchido às 12h50 (preço original do pedido), mesmo que o preço não esteja mais disponível.


Comandos de colocação de pedidos.


Todas as palavras-chave projetadas para estratégias começam com o prefixo "estratégia". Os seguintes comandos são usados ​​para fazer pedidos: strategy. entry, strategy. order e strategy. exit:


strategy. entry - este comando coloca apenas ordens de entrada. É afetado pela configuração piramidal (nas propriedades da estratégia) e pela palavra-chave strategy. risk. allow_entry_in. Se houver uma posição de mercado aberto quando uma ordem de direção oposta for gerada, o número de contratos / partes / lotes / unidades será aumentado pelo número de contratos atualmente abertos (script equivalente: strategy. position_size + quantity). Como resultado, o tamanho da posição de mercado para abrir será igual ao tamanho da ordem, especificado no comando strategy. entry. strategy. order - este comando coloca as ordens de entrada e saída. Não é afetado pela configuração piramidal e pela palavra-chave strategy. risk. allow_entry_in. Ele permite que você crie construções complexas de entrada e saída quando as capacidades da strategy. entry e do strategy. exit não são suficientes. strategy. exit - este comando permite que você saia de uma posição de mercado por meio de uma ordem ou de uma estratégia de pedido de saída múltipla (stop loss, profit target, trailing stop). Todas essas ordens fazem parte do mesmo grupo strategy. oca. reduce. Uma ordem de saída não pode ser colocada se não houver uma posição de mercado aberto ou não haja uma ordem de entrada ativa (uma ordem de saída é vinculada à identificação de uma ordem de entrada). Não é possível sair de uma posição com uma ordem de mercado usando o comando strategy. exit. Para este objetivo, os seguintes comandos devem ser usados: strategy. close ou strategy. close_all. Se o número de contratos / partes / lotes / unidades especificadas para o strategy. exit for inferior ao tamanho da posição aberta atual, a saída será parcial. Não é possível sair da mesma ordem de entrada mais de 1 vez usando a mesma ordem de saída (ID), que permite que você crie estratégias de saída com múltiplos níveis. No caso, quando uma posição de mercado foi formada por várias ordens de entrada (pyramiding habilitado), cada ordem de saída é vinculada a cada ordem de entrada individualmente.


A estratégia acima invoca constantemente a posição de mercado de +4 para -6, para frente e para trás, o que é mostrado por sua trama.


Esta estratégia demonstra o caso, quando a posição do mercado nunca é fechada, porque usa a ordem de saída para fechar a posição do mercado apenas parcialmente e não pode ser usada mais de uma vez. Se você dobrar a linha para sair, a estratégia fechará completamente a posição do mercado.


Este código gera 2 níveis de parênteses (2 pegue ordens de lucro e 2 ordens de perda de parada). Ambos os níveis são ativados ao mesmo tempo: primeiro nível para sair de 2 contratos e o segundo para sair de todo o resto.


As primeiras ordens de lucro 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 assim que um pedido do nível 1 é preenchido, as ordens do nível 2 não são canceladas, ficam ativas.


Cada comando que faz um pedido possui ID (valor da string) - identificador de pedido exclusivo. Se um pedido com o mesmo ID já estiver colocado (mas ainda não preenchido), o comando atual modifica a ordem existente. Se a modificação não for possível (conversão de compra para venda), a ordem antiga é cancelada, a nova ordem é colocada. strategy. entry e strategy. order funcionam com os mesmos IDs (eles podem modificar a mesma ordem de entrada). strategy. exit funciona com outras IDs de pedido (é possível ter uma ordem de entrada e uma ordem de saída com a mesma ID).


Para cancelar uma ordem específica (por sua ID), o comando strategy. cancel (string id) deve ser usado. Para cancelar todas as ordens pendentes, o comando strategy. cancel_all () deve ser usado. As ordens de estratégia são colocadas assim que suas condições são satisfeitas e o comando é chamado de código. O emulador de corretor não executa as ordens antes do próximo cheque depois que o código foi calculado, enquanto na negociação real com corretor real, um pedido pode ser preenchido mais cedo. Isso significa que, se uma ordem de mercado for gerada no final da barra atual, ela será preenchida na próxima barra aberta.


Se este código é aplicado a um gráfico, todos os pedidos são preenchidos em aberto de cada barra.


As condições para a colocação da ordem (quando, pyramiding, strategy. risk) são verificadas quando o script é calculado. Se todas as condições forem satisfeitas, a ordem será colocada. Se alguma condição não for satisfeita, a ordem não será colocada. É importante cancelar pedidos de preços (ordens limite, parada e parada-limite).


Exemplo (para MSFT 1D):


Mesmo que a pirâmide esteja desativada, essas duas ordens são preenchidas em backtesting, porque quando elas são geradas não há uma posição aberta de mercado longo. Ambas as ordens são colocadas e quando o preço satisfaz a execução da ordem, ambos são executados. Recomenda-se colocar as ordens em 1 grupo OCA por meio de strategy. oca. cancel. neste caso, apenas uma ordem é preenchida e a outra é cancelada. Aqui está o código modificado:


Se, por algum motivo, as condições de colocação de pedidos não forem cumpridas ao executar o comando, a ordem de entrada não será colocada. Por exemplo, se as configurações de pirâmide estiverem configuradas para 2, a posição existente já contém duas entradas e a estratégia tenta colocar uma terceira, ela não será colocada. As condições de entrada são avaliadas no estágio de geração da ordem e não na fase de execução. Portanto, se você enviar duas entradas de tipo de preço com piramide desabilitado, uma vez que uma delas é executada, a outra não será cancelada automaticamente. Para evitar problemas, recomendamos usar grupos OCA-Cancelar para entradas, então, quando uma ordem de entrada é preenchida, os outros são cancelados.


O mesmo é válido para as saídas do tipo de preço - as ordens serão colocadas uma vez que suas condições sejam atendidas (ou seja, é preenchida uma ordem de entrada com o id respectivo).


Se você aplicar este exemplo a um gráfico, você pode ver que a ordem de saída foi preenchida, apesar do fato de ter sido gerado apenas uma vez antes do pedido de entrada a ser fechado. No entanto, a próxima entrada não foi fechada antes do final do cálculo, já que o comando de saída já foi acionado.


Posição de mercado de fechamento.


Apesar de ser possível sair de uma entrada específica no código, quando os pedidos são mostrados na guia Lista de Trades no StrategyTester, todos eles estão vinculados de acordo com a regra FIFO (primeiro dentro, primeiro fora). Se uma ID de pedido de entrada não for especificada para uma ordem de saída no código, a ordem de saída encerra a primeira ordem de entrada que abriu a posição de mercado. Vamos estudar o seguinte exemplo:


O código indicado acima coloca 2 ordens sequencialmente: "Buy1" a preço de mercado e "Buy2" a um preço 10% maior (ordem de parada). O pedido de saída é colocado somente depois que os pedidos de entrada foram preenchidos. Se você aplicar o código a um gráfico, você verá que cada pedido de entrada é fechado pela ordem de saída, embora não especifiquemos a identificação da ordem de entrada para fechar nesta linha: strategy. exit ("bracket", loss = 10, profit = 10, quando = strategy. position_size == 15)


Ele abre 5 contratos de posição longa com a ordem "Buy1". Estende a posição comprada comprando mais 10 contratos com preço 10% maior com a ordem "Buy2". A ordem de saída (strategy. close) para vender 10 contratos (saída de "Buy2") é preenchida.


Se você der uma olhada no enredo, você pode ver esse preço médio de entrada = preço de execução "Buy2" e nossa estratégia fechou exatamente essa ordem de entrada, enquanto na guia TradeList podemos ver que fechou o primeiro pedido "Buy1" e meio do segundo "Buy2". Isso significa que, independentemente da ordem de entrada que você especificar para a sua estratégia fechar, o emulador do corretor ainda fechará o primeiro (de acordo com a regra FIFO). Funciona da mesma maneira quando se troca com o intermediário intermediário.


Grupos OCA.


É possível colocar pedidos em 2 grupos OCA diferentes no Pine Script:


strategy. oca. cancel - assim que um pedido do grupo é preenchido (mesmo parcialmente) ou cancelado, os outros pedidos do mesmo grupo são cancelados. Deve ter em mente que, se os preços das ordens forem iguais ou forem próximos, mais de 1 ordem do mesmo grupo pode ser preenchida. Este tipo de grupo OCA está disponível somente para pedidos de entrada porque todas as ordens de saída são colocadas em strategy. oca. reduce.


Você pode pensar que esta é uma estratégia inversa, uma vez que a pirâmide não é permitida, mas, de fato, ambas as ordens serão preenchidas porque são de ordem do mercado, o que significa que elas serão executadas imediatamente ao preço atual. A segunda ordem não é cancelada porque ambos são preenchidos quase no mesmo momento e o sistema não tem tempo para processar o preenchimento da primeira ordem e cancelar o segundo antes de ser executado. O mesmo aconteceria se estes fossem pedidos de preços com preços iguais ou similares. A estratégia coloca todos os pedidos (que são permitidos de acordo com a posição do mercado, etc.).


A estratégia coloca todos os pedidos que não contradizem as regras (na nossa posição, a posição do mercado é plana, portanto, qualquer pedido de entrada pode ser preenchido). Em cada cálculo do tiquetaque, primeiro todos os pedidos com as condições satisfeitas são executados e somente as ordens do grupo onde um pedido foi executado são canceladas.


strategy. oca. reduce - este tipo de grupo permite que vários pedidos dentro do grupo sejam preenchidos. À medida que uma das ordens dentro do grupo começa a ser preenchida, o tamanho de outras ordens é reduzido pelo valor dos contratos preenchidos. É muito útil para as estratégias de saída. Uma vez que o preço atinja a sua ordem de lucro e está sendo preenchido, a perda de stop não é cancelada, mas seu valor é reduzido pelo valor dos contratos preenchidos, protegendo assim o restante da posição aberta. strategy. oca. none - a ordem é colocada fora do grupo (valor padrão para os comandos strategy. order e strategy. entry).


Todo grupo tem seu id exclusivo (da mesma forma que os pedidos). Se dois grupos tiverem o mesmo id, mas tipo diferente, eles serão considerados grupos diferentes. Exemplo:


"Comprar" e "Vender" serão colocados em diferentes grupos, pois seu tipo é diferente. "Ordem" estará fora de qualquer grupo, pois seu tipo está definido para strategy. oca. none. Além disso, "Buy" será colocado no grupo de saída, pois as saídas são sempre colocadas no grupo de tipo strategy. oca. reduce_size.


Gerenciamento de riscos.


Não é fácil criar uma estratégia lucrativa universal. Normalmente, estratégias são criadas para certos padrões de mercado e podem produzir perdas incontroláveis ​​quando aplicadas a outros dados. Portanto, interromper a negociação automática no tempo, as coisas ficam ruins é um problema sério. Existe um grupo especial de comandos de estratégia para gerenciar riscos. Todos começam com o prefixo strategy. risk. *.


Você pode combinar qualquer número de riscos em qualquer combinação dentro de uma estratégia. Todo comando de categoria de risco é calculado em cada marca, bem como em todos os eventos de execução de pedidos independentemente da configuração da estratégia calc_on_order_fills. Não há como desativar qualquer regra de risco no tempo de execução do script. Independentemente de onde no script a regra de risco estiver localizada, ela sempre será aplicada a menos que a linha com a regra seja excluída e o script seja recompilado.


Se no próximo cálculo qualquer das regras for acionada, nenhuma ordem será enviada. Portanto, se uma estratégia tiver várias regras do mesmo tipo com diferentes parâmetros, ela irá parar de calcular quando a regra com os parâmetros mais rigorosos é desencadeada. Quando uma estratégia é interrompida, todas as ordens não executadas são canceladas e, em seguida, uma ordem de mercado é enviada para fechar a posição se não for plana.


Além disso, vale lembrar que ao usar resoluções superiores a 1 dia, a barra inteira é considerada 1 dia para as regras que começam com o prefixo "strategy. risk. max_intraday_"


A posição será fechada e a negociação será interrompida até o final de cada sessão de negociação após duas ordens serem executadas nesta sessão à medida que a segunda regra é desencadeada anteriormente e é válida até o final da sessão de negociação.


Deve lembrar-se que a regra strategy. risk. allow_entry_in é aplicada somente nas entradas para que seja possível entrar em uma troca usando o comando strategy. order, pois este comando não é um comando de entrada per se. Além disso, quando a regra strategy. risk. allow_entry_in está ativa, as entradas em um "comércio proibido" tornam-se as saídas em vez das negociações reversas.


Exemplo (MSFT 1D):


Como as entradas curtas são proibidas pelas regras de risco, em vez de transações reversas, as negociações de saída longa serão feitas.


As estratégias TradingView podem operar na moeda diferente da moeda do instrumento. NetProfit e OpenProfit são recalculados na moeda da conta. A moeda da conta é definida nas propriedades da estratégia - a lista suspensa Moeda básica ou no script através da palavra-chave estratégia (. Currency = currency. *,.). Ao mesmo tempo, os valores do relatório de desempenho são calculados na moeda selecionada.


O lucro comercial (aberto ou fechado) é calculado com base no lucro na moeda do instrumento multiplicado pela taxa cruzada no fechamento do dia de negociação anterior à barra onde a estratégia é calculada.


Exemplo: trocamos EURUSD, D e selecionamos EUR como moeda da estratégia. Nossa estratégia compra e sai da posição usando 1 lucro de ponto ou stopLoss.


Depois de adicionar esta estratégia ao gráfico, podemos ver que as linhas do gráfico estão em correspondência. Isso demonstra que a taxa para calcular o lucro para cada comércio foi baseada no fechamento do dia anterior.


Ao negociar em resoluções intra-dia, a taxa cruzada no encerramento do dia de negociação anterior ao bar onde a estratégia é calculada será usada e não será alterada durante todo o período de negociação.


Ao negociar em deliberações superiores a 1 dia, será utilizada a taxa cruzada no encerramento do dia de negociação anterior ao encerramento do bar, onde a estratégia será calculada. Digamos que trocamos em um gráfico semanal, então a taxa de cruzamento no fechamento da sessão de quinta-feira sempre será usada para calcular os lucros.


Em tempo real, a taxa de fechamento da sessão de ontem é usada.

No comments:

Post a Comment