HugoCarpegianny

Introdução PineScript - Áreas de Código e Série de dados.

השכלה
BITSTAMP:BTCUSD   ביטקוין
Fala Traders.

Iremos dar continuidade ao nosso estudo Intrudução ao PineScript. Vamos ver hoje sobre como organizar nosso código dividindo-o em áreas específicas para melhor desenvolvimento de estratégias para backtestes. Iremos ver também todo o código do Setup Dave Landry para que vocês possam estudar. Vamos lá?

ÁREAS DE CÓDIGO

Para uma melhor organização e compreensão, é boa prática de quem está escrevendo uma estratégia de execução ou indicador que separe o código e áreas. Na figura abaixo vemos 4 áreas principais:

- Área de Inputs (quando houver);

- Área de declaração de variáveis;

- Área da lógica de execução;

- Área de plotagem de indicadores (quando houver);


Área de inputs

Inputs são valores atribuídos pelo usuário para que o código execute durante todo o código. Inputs significa que houve um valor externo "entrando" no código (input = entrada).

Por exemplo, se você quiser atribuir valores de caixa inicial para sua estratégia para verificar se o capital aumenta ou esgota durante um determinado tempo você irá adicionar o valor deste caixa como sendo um input, pois poderá modificar no futuro apenas o valor inicial sem a necessidade de modificar todo o código.

Para isso, aqui no editor Pine, você precisará adicionar a palavra "Input" antes do nome "caixa inicial" para o editor reconhecer esse valor como sendo um input.

Área de declaração de variáveis


Variáveis são "espaço" em memória do editor para que o mesmo possa usá-lo durante todo o código, para que não haja necessidade de repetição deste valor. É semelhante aos inputs. Porém, para que o editor entenda que uma declaração é tida como variável o usuário terá que adicionar a palavra "var" antes dessa declaração.

No setup do Dave Landry iremos utilizar as variáveis da imagem abaixo.


Vemos na imagem que atribuímos as palavras "candle", "tamanho", "alvo" e "stop" como sendo variáveis de valor 0.

Nas variáveis existem 3 tipos principais que iremos utilizar no desenvolvimento de outros setups. São eles:

- Tipo inteiro;

- Tipo float;

- Tipo booleano;

O tipo inteiro, como o nome já diz, são valores inteiros atribuídos às variáveis. Por exemplo, quero uma média móvel de 20 períodos. O número 20 é um número inteiro, portanto será uma variável do tipo inteiro.

Tipo float ( ou ponto flutuante) são valores fracionários. No nosso exemplo da imagem acima temos o valor "tamanho", "alvo" e "stop" como sendo do tipo float.

Tipo booleano são variáveis que possuem valores lógico como true ou false (verdadeiro ou falso). Tais valores são usado com as terminações IF, THEN e ELSE (são os três principais).

Bom, vimos as principais áreas do código, o que são inputs e variáveis. Agora precisamos saber o que são Série de dados.

SÉRIE DE DADOS

Série de dados nada mais é do que os valores da mínima, máxima, abertura e fechamento de um determinado período, seja ele no período de 1 horas, 30 minutos, diário, entre outros.


Para cada período, utilizamos o valor entre chaves no código pine. Por exemplo, close refere-se ao fechamento da barra anterior. Close, refere-se ao fechamento da barra ante anterior. Assim sucessivamente.


No setup do Dave Landry utilizaremos a função de séries de dados para saber o valor da mínimas e máximas do candle atual, assim como dos dois candles anteriores para fazermos nossa condição de compra e venda.


No código da figura vemos que a condição de compra se dá pela mínima do candle atual sendo menor do que a mínima do candle anterior e menor que a mínima do candle ante anterior e fechamento da barra atual (close) sendo maior do que a média móvel de 20 períodos (low<low and (low<low) and (close>sma(close,20));.

A condição de venda é montada da mesma maneira, porém utilizando a série de dados das máxima dos candles anteriores e fechamento de candle atual menor do que a média móvel de 20 períodos.

Ora meus amigos, isso não é o setup apresentado pelo Dave Landry?

Então, com o conhecimento dada neste estudo e do post anterior, já podemos montar nossa estratégia de execução e testar em vários papeis.

Segue o código completo abaixo:

//@version=4

strategy("DAVE LANDRY - DAY TRADE", overlay = true)

//---------------------------------------------//
// ÁREA DE DECLARAÇÃO DE VARIÁVEIS
//---------------------------------------------//

var candle = 0

var tamanho = 0.00

var alvo = 0.00

var stop = 0.00

// CONDIÇÕES DE COMPRA E VENDA

condicoes_de_compra = (low<low) and (low<low) and (close>sma(close,20))

condicoes_de_venda = (high>high) and (high>high) and (close<sma(close,20))

//---------------------------------------------//
// FUNÇÕES PARA EXCLUIR ORDENS PENDENTES
//---------------------------------------------//

strategy.cancel("entrada_na_compra")

strategy.cancel("entrada_na_venda")

//---------------------------------------------//
// LÓGICA DE ENTRADA NAS OPERAÇÕES
//---------------------------------------------//

if (strategy.position_size==0) and (hour<16)

candle:=0

if (condicoes_de_compra)

strategy.entry("entrada_na_compra", true, stop = high)

if (condicoes_de_venda)

strategy.entry("entrada_na_venda", false, stop = low)

//---------------------------------------------//
// LÓGICA DE SAÍDA DAS OPERAÇÕES DE COMPRA
//---------------------------------------------//

if (strategy.position_size>0)

candle := candle + 1

tamanho := high - low

alvo := (tamanho * 2) + high // Esse é o seu alvo

stop := abs( (tamanho * 2) - low )// Esse é o seu stop

//Abaixo temos o envio da ordem contendo definição do alvo e stop

strategy.exit("saída_da_compra", "entrada_na_compra", limit = alvo, stop = stop)

//---------------------------------------------//
// LÓGICA DE SAÍDA DAS OPERAÇÕES DE VENDA
//---------------------------------------------//

if (strategy.position_size<0)

candle := candle + 1

tamanho := high - low

alvo := abs( ( tamanho * 2 ) - low ) // Esse é o seu alvo

stop := ( tamanho * 2 ) + high // Esse é o seu stop

//Envio da ordem contendo o alvo e o stop

strategy.exit("saída_da_venda", "entrada_na_venda", limit = alvo, stop = stop)

//----------------------------------------------------------//
// HORÁRIO DE ENCERRAMENTO PARA DAY TRADE
//----------------------------------------------------------//

if (hour>=16)

strategy.close("entrada_na_compra", comment = "fechando posição")

strategy.close("entrada_na_venda", comment = "fechando posição")

//---------------------------------------------//
// ÁREA DE PLOTAGEM
//---------------------------------------------//


plot(sma(close,20))



//----------------------------------------------------------------------------------------


FIM DE CÓDIGO!

Basta copiar e colar o código no seu Editor Pine e estuda-lo e fazer o backtest em vários outros papeis. Lembrando que é um código para DayTrade, por isso há funções de encerramento por horário.

Bons estudos.







כתב ויתור

המידע והפרסומים אינם אמורים להיות, ואינם מהווים, עצות פיננסיות, השקעות, מסחר או סוגים אחרים של עצות או המלצות שסופקו או מאושרים על ידי TradingView. קרא עוד בתנאים וההגבלות.