Moving Average Afl Code


Fig 1. Abrimento de preço aberto Qualquer outro array é calculado a partir desses 6 arrays usando fórmulas embutidas no AFL. Esses arrays não são armazenados no banco de dados, mas calculados quando necessário. Cada valor individual em uma matriz tem uma data associada a ela. Se você tiver a opção de ponta de ferramenta ativada (Preferências - gt Guia Diversos - dicas de ferramentas de dados de gt Price), quando você move o cursor sobre uma vela em um gráfico diário de velas, aparece um pequeno retângulo amarelo. AFL então olha para cima os valores de volume aberto, baixo, alto, fechar na matriz apropriada e exibe-los dentro da dica da ferramenta. Processando arrays - por que AFL é tão rápido Permite ver como a seguinte instrução é processada: MyVariable (High Low) 2 Quando AFL está avaliando instruções como esta (High Low) 2, não é necessário reinterpretar esse código para cada barra. Em vez disso, ele toma o ARRAY Alto e Low ARRAY e adiciona elementos de matriz correspondentes em um único estágio. Em outras palavras, o operador (e outros operadores também) trabalham em matrizes de uma só vez e é executado em velocidade de código compilado completo, então o array resultante (cada elemento dele) é dividido por 2 também em estágio único. Vamos olhar para os detalhes - ver fig 2. Quando o motor AFL olha para o (High Low) 2, ele primeiro toma arrays High (1) e Low (2) e produz (em um único passo compilado) o array temporário (3). Em seguida, ele cria a matriz final (4), dividindo cada elemento de matriz temporária por dois. Este resultado é atribuído a myVariable Fig 2. AFL etapas quando o processamento (High Low) 2 médias móveis, declarações condicionais Vamos considerar agora o seguinte código: Cond1 Fechar gt MA (Close, 3) Cond2 Volume gt Ref (Volume, -1) Comprar Cond1 AND Cond2 Sell High gt 1.30 Este código gera um sinal de compra quando fechar de hoje é superior a 3 dias de média móvel de fechar E hoje volume é maior do que o volume de ontem. Ele também gera um sinal de venda quando a alta de hoje é maior do que 1,30. Se em seu código AFL você precisa ver se o preço de fechamento é maior do que dizer uma média móvel simples de 3 dias AFL primeiro será executado através da matriz próxima criar uma nova matriz chamada MA (fechar, 3) para o símbolo que está sendo analisado. Cada célula na nova matriz pode então ser comparada uma para uma na matriz de close. No exemplo, uma matriz chamada Cond1 é criada dessa maneira. Para cada célula onde o preço de fechamento é maior que o valor da célula correspondente em MA (fechar, 3) o valor da célula para a nova matriz Cond1 é definido como 1. Se o preço de fechamento não for maior que o preço correspondente na matriz de fechamento o valor Em Cond1 é definido como 0. AFL também pode olhar para a frente ou para trás um número de células em uma matriz usando a função Ref (veja a linha 6 onde matriz temporária é criada segurando volume dia anterior) Na linha 9 uma nova matriz chamada Cond2 foi criado Comparando o valor de cada célula na matriz de volume com sua célula anterior, definindo o valor da célula Cond2 para 1 se verdadeiro e 0 se for falso. A linha 10 mostra uma matriz chamada Buy criada comparando os valores de célula em Cond1 com os valores de célula em Cond2. Se a célula em Cond1 tem um 1 E assim faz a célula correspondente em Cond2, em seguida, um 1 é colocado na célula Buy array. A linha 11 mostra uma matriz chamada Sell criada sempre que o valor da célula na matriz de fechamento for maior que 1,30. Obviamente Buy and Sell são matrizes especiais cujos resultados podem ser exibidos na janela Analisador ou na tela usando um valor vermelho ou verde conforme necessário. Ficando um pouco mais complexo Os exemplos acima eram muito simples. Agora vou explicar apenas 3 coisas que parecem gerar alguma confusão entre os usuários: Referenciando valores selecionados (SelectedValue, BeginValue, EndValue, LastValue) Função IIF Função AMA Como escrito no Tutorial: Guia básico de gráficos você pode selecionar qualquer citação do gráfico E você pode marcar From-To intervalo. A barra selecionada por linha verticall é chamada quotselectedquot bar, enquanto início e fim barras do intervalo são chamados quotbeginquot e quotendquot barras. AFL tem funções especiais que permitem ao valor de referência da matriz na barra selecionada, início e fim, respectivamente. Essas funções são chamadas SelectedValue, BeginValue e EndValue. Existe mais uma função chamada LastValue que permite obter o valor da matriz na última barra. Estas quatro funções tomam o elemento de matriz na dada barra e retornam SINGLE NUMBER representando o valor da matriz em determinado ponto. Isso permite calcular algumas estatísticas sobre pontos selecionados. Por exemplo: EndValue (Close) - BeginValue (Close) Dá-lhe a alteração de dólar entre os preços de fechamento no intervalo selecionado de-para. Quando o número recuperado por qualquer uma dessas funções é comparado a uma matriz ou qualquer outra operação aritmética envolvendo número ea matriz é executada funciona como o número abrangido por todos os elementos da matriz. Isto é ilustrado na tabela abaixo (linhas 2, 6, 7). A cor verde marca a barra do quotbeginquot e a cor vermelha marca a barra do quotendquot. A barra selecionada é marcada com azul. Agora a função IIF (condição, parte verdadeira, parte falso). Ele funciona que retorna o valor de segundo (truepart) ou terceiro argumento (falsepart) dependendo da condição. Como você pode ver na tabela acima na linha 8 os valores vêm de Close array (truepart) para barras quando condição for true (1) e vêm de Open array (falsepart) para as barras restantes. Nesse caso, a matriz retornada pela função IIF consiste em alguns valores de Close e alguns valores de Open array. Observe que tanto truepart quanto falsepart são matrizes e eles são avaliados independentemente da condição (portanto, esta não é uma instrução IF-THEN-ELSE regular mas função que retorna matriz) A função AMA (matriz, fator) parece causar mais problemas com Entendê-lo. Mas na verdade é muito simples. Ele funciona de maneira recursiva. Isso significa que ele usa seu valor anterior para o cálculo do valor atual. Processa a barra de matriz por barra, com cada passo que multiplica a célula dada do primeiro argumento (array) pela célula dada do segundo argumento (fator) e adiciona-o ao valor anterior de AMA multiplicado por (1 fator). Consideremos a coluna 3. O valor de AMA na coluna 3 é dado pelo preço de fechamento múltiplo da coluna 3 (1,23) pelo fator (0,4). Do que somamos o valor anterior de AMA (1.0363) multiplicado por (1-factor 0,6). O resultado (arredondado para 4 lugares) é 1,23 0,4 1,0363 0,6 1,1138. Se você olhar para os números na linha 12 você pode notar que esses valores parecem uma média móvel de fechar. E isso é verdade. Na verdade, apresentamos como calcular a média móvel exponencial de período variável usando a função AMA. Com a versão 4.40 o AmiBroker traz a capacidade de iterar entre aspas usando for e while loops e adiciona if-else declaração de controle de fluxo. Esses aprimoramentos tornam possível trabalhar de AMBAS maneiras: use o processamento ARRAY (descrito acima) para velocidade e simplicidade ou use LOOPS para fazer coisas complexas. Como um exemplo de como implementar a média exponencial período variável (descrito acima) usando looping ver o seguinte código: Period. Calcula o valor do i-ésimo elemento da matriz usando esta barra close (close i) e o cálculo do valor do fator de suavização Fator 2 (Período i 1) (1 - Factor) vaexp i - 1 Como você pode ver o código é mais longo, mas por outro lado é muito semelhante a qualquer outra linguagem de programação como CPascalBasic. Assim, as pessoas com alguma experiência com programação podem achar mais fácil de entender. Se você é iniciante eu sugiro aprender o processamento de matriz primeiro antes de cavar em coisas de loop mais complexas. Se você está tendo problemas para codificar AFL eu sugiro que você gere os arrays no exemplo no Excel para si mesmo. Se isso é um problema obter alguma ajuda de um amigo - especialmente se esse amigo é um contador. Uma vez que você tem o jeito dele você pode codificar qualquer sistema de um livro sobre a negociação - ou construir um você mesmo. --- Agradecimentos especiais a Geoff Mulhall pelo artigo original no boletim de notícias que era a base deste tutorial --- AFL é uma linguagem de programação especial usada para definir e criar indicadores feitos sob encomenda, varreduras, explorações, back-testes e comentários do guru. Elementos lexicais Este capítulo descreve as diferentes categorias de unidades de palavras (tokens) reconhecidas pelo intérprete de linguagem AFL. Whitespace Whitespace é o nome coletivo dado aos espaços (espaços em branco), guias, novos caracteres de linha e comentários. Espaços em branco podem servir para indicar onde os tokens começam e terminam, mas além dessa função, qualquer espaço em branco excedente é descartado. Comentários são peças de texto usadas para anotar um programa. Comentários são para os programadores usam apenas eles são removidos do código fonte antes de analisar. Existem duas maneiras de delinear comentários: C-como comentários e C como comentários. Um comentário semelhante a C é qualquer sequência de caracteres colocada após o par de símbolos. O comentário termina na primeira ocorrência do par após a inicial. A sequência inteira, incluindo os quatro símbolos de delimitador de comentário, é substituída por um espaço. Um C como comentários são comentários de linha única que começam usando duas barras adjacentes () em qualquer posição dentro da linha e estender até a próxima nova linha. AFL não permite comentários aninhados. AFL reconhece cinco classes de tokens: identificadores constantes string-literals operadores pontuadores (também conhecidos como separadores) Identificadores são nomes arbitrários de qualquer comprimento dado a funções e variáveis. Os identificadores podem conter as letras (a-z, A-Z), o caractere sublinhado (quotquot) e os dígitos (0-9). O primeiro caractere deve ser uma letra. Os identificadores AFL não são sensíveis a maiúsculas e minúsculas. As constantes são tokens que representam valores numéricos ou de caracteres fixos. As constantes numéricas consistem em um inteiro decimal e opcionalmente: ponto decimal e parte de fração decimal. As constantes numéricas negativas têm unary menos (-) prefixadas. Constantes de string, também conhecidas como literais de string. Formam uma categoria especial de constantes usadas para manipular seqüências fixas de caracteres e são escritas como uma seqüência de qualquer número de caracteres rodeado por aspas duplas: quot Isto é literalmente uma stringquot A string nula (vazia) é escrita quotquot. Os caracteres dentro das aspas duplas podem incluir seqüências de escape (quotnquot - uma nova seqüência de escape de linha). A Expressão constante é uma expressão que sempre é avaliada como uma constante. Eles são avaliados exatamente como expressões regulares. Punctuator (também conhecido como separador) em AFL é um dos seguintes caracteres: (). . Parênteses (abra e feche) expressões de grupo, isolar expressões condicionais e indicar chamadas de função e parâmetros de função: dc (ab) substituir precedência normal a (b AND c) OU (d AND e) expressão condicional func () função call no arguments A vírgula (,) separa os elementos de uma lista de argumentos de função O ponto-e-vírgula () é um terminador de instrução. Qualquer expressão legal AFL seguida de um ponto-e-vírgula é interpretada como uma instrução, conhecida como declaração de expressão. A expressão é avaliada e seu valor é descartado (exceto Guru Commentaries onde os valores de string são gravados na janela de saída) O ponto (.) É um operador de acesso a membros. Ele é usado para chamar métodos de objeto COM. Se a variável myobj contiver o objeto, usando o operador ponto podemos chamar os métodos (funções) do objeto myobj: O sinal de igual () separa as declarações de variáveis ​​das listas de inicialização: x 5 Também indica o valor padrão para um parâmetro (consulte built-in Descrição da função): macd (fast 12 slow 26) valores padrão para argumentos rápidos e lentos) Estrutura de linguagem Cada fórmula na AFL contém de uma ou mais declarações de expressão. Cada declaração deve ser terminada por ponto e vírgula (). Desta forma, você é capaz de quebrar longas expressões em várias linhas físicas (a fim de ganhar clareza) e AmiBroker ainda tratá-lo como uma única instrução até terminar semicolon. Exemplos: Identificadores Identificadores em AFL são usados ​​para identificar variáveis ​​e funções. Existem alguns identificadores predefinidos que referenciam arrays e funções incorporadas. Os mais importantes são os identificadores de preço. Eles identificam campos de preço específico que a fórmula deve operar em. Os identificadores de tabela de preços válidos estão abertos. Alto . Baixo. fechar . Volume. Openint média . Os identificadores de tabela de preços podem ser abreviados como mostrado na tabela a seguir. Note que estes não são específicos do caso. Armazena o valor do segundo operando no objeto especificado pelo primeiro operando (8220simple assignment8221). O operador de atribuição atribui um valor a uma variável: onde result é variável identificador e expressão é qualquer numérico, matriz ou expressão de texto. Como o operador se comporta como outros operadores, as expressões que o utilizam têm um valor além de atribuir esse valor à variável. Isso significa que você pode encadear operadores de atribuição da seguinte maneira: j k l 0 j, k, e l igual a zero após a instrução de exemplo ser executada. Atenção: NÃO confunda o operador de atribuição () com a verificação de igualdade () Estes são dois operadores diferentes e você não deve usar assign () para verificar a igualdade. If (Name () quotMSFTquot) WRONG. - operador de atribuição de variáveis ​​usado em vez de verificação de igualdade se (Nome () quotMSFTquot) CORREIO - operador de igualdade usado corretamente Este é um dos erros comuns de codificação listados aqui. Operadores aritméticos As fórmulas podem conter os seguintes operadores matemáticos: Obter o OR inclusivo de bits do primeiro e segundo operandos armazenar o resultado no objeto especificado pelo primeiro operando operador typeof () O operador typeof é usado da seguinte maneira: typeof (operand) O operador typeof retorna uma seqüência de caracteres indicando o tipo do operando não avaliado. Operando é a seqüência de caracteres, variável, identificador de função ou objeto para o qual o tipo deve ser retornado. Ao fornecer o identificador, ele deve ser fornecido sozinho, sem operadores aritméticos, sem argumentos extra e sem chaves. Se você quiser verificar o tipo de valor retornado pela função, você deve primeiro atribuir o valor de retorno a uma variável e, em seguida, use typeof (variável). Os valores de retorno possíveis são: quotundefinedquot - identificador não está definido quotnumberquot - operando representa um número (escalar) quotarrayquot - operando representa uma matriz quotstringquot - operando representa uma string quotfunctionquot - operando é um built - in function identifier quotuser functionquot - Função definida quotobjectquot - operando representa objeto COM quotmemberquot - operando representa função de membro ou propriedade de objeto COM quothandlequot - operando representa Windows handle quotunknownquot - tipo de operando é desconhecido (não deve acontecer) typeof operador permite, entre outras coisas, detectar variáveis ​​indefinidas no seguinte O seguinte exemplo de código COMMENTARY mostra a saída de typeof () em algumas situações comuns: x MACD () y LastValue (x) função testfun () return 1 Printf (typeof (teste) n) a variável indefinida printf (typeof (1) n) aceso (Typeof (y) n) variável escalar printf (typeof (MACD) n) identificador de função printf (typeof (testfun) n) Identificador de função do usuário Prioridade do operador e os parênteses AFL suporta parênteses em fórmulas. Parênteses podem ser usados ​​para controlar a precedência da operação (a ordem em que os operadores são calculados). AmiBroker sempre faz operações dentro dos parênteses mais íntimos em primeiro lugar. Quando parênteses não são utilizados, a precedência é a seguinte (precedência mais alta listada em primeiro lugar): (sem parênteses) seria calculado por AmiBroker como quotL 2quot mais "Hquot, uma vez que divisão tem uma precedência mais elevada. Isso resultaria em um valor muito diferente do que algumas palavras sobre incrementdecrement operadores. Existem dois tipos deles: postfix e prefix. Os operadores unários (e -) são chamados 8220prefix8221 incrementar ou decrementar operadores quando os operadores de incremento ou decremento aparecem antes do operando. O incremento e decremento de Postfix tem precedência maior que os operadores de incremento e decremento de prefixo. Quando o operador aparece antes de seu operando, o operando é incrementado ou diminuído eo seu novo valor é o resultado da expressão. J i i será incrementado primeiro eo resultado (número 6) será atribuído a j. O resultado da operação de incremento ou decréscimo de postfix é o valor da expressão postfix antes do operador de incremento ou decremento ser aplicado. O tipo do resultado é o mesmo que o da expressão postfix, mas já não é um valor l. Depois que o resultado é obtido, o valor do operando é incrementado (ou diminuído). Jij será atribuído o valor de 5 (antes de incremento) e então i será incrementado para 6. Acessando elementos de matriz: - subscript operator Um identificador de array seguido por uma expressão em colchetes () é uma representação de um elemento subscrita de um array objeto. Representa o valor da expressão-ésimo elemento da matriz. Constante de BarCount dá o número de barras na matriz (como Close, High, Low, Open, Volume, etc). Os elementos da matriz são numerados de 0 (zero) para BarCount-1. O BarCount NÃO muda enquanto sua fórmula continua a execução, mas pode mudar entre execuções quando novas barras são adicionadas, o fator de zoom é alterado ou o símbolo é alterado. Para obter a primeira barra você pode usar a matriz 0, para obter a última barra da matriz você pode usar a matriz BarCount - 1 Fechar 5 Representa o sexto elemento (barra) da matriz de fechamento. Fechar 0 Representa a primeira barra disponível da matriz de fechamento. High BarCount - 1 Representa a última barra de High array. Matrizes e matrizes Matrizes são matrizes bidimensionais de números. Para criar uma matriz use: myvarname Matrix (linhas, cols, initvalue) Para acessar elementos de matriz, use: myvarname row col onde row é um índice de linha (0. número de linhas-1) e col é um índice de coluna Das colunas-1) As matrizes e seus elementos suportam todas as operações aritméticas e lógicas escalares (element-wise). Todos esses operadores padrão são executados em matrizes em função do elemento. Por essa razão, por exemplo, para adicionar duas matrizes devem ser do mesmo tamanho (o número de linhas e colunas deve ser o mesmo). Se eles não são o mesmo, cabe a você como executar o cálculo em cada elemento via loop. Assim você pode, por exemplo, adicionar, subtrair, multiplicar, dividir duas matrizes se eles têm as mesmas dimensões com uma chamada. X Matriz (5. 6.9) matriz 5 linhas 6 colunas, valor inicial 9 y Matriz (5. 6. 10) matriz 5 linhas 6 colunas, valor inicial 10 zy - x lhe dará matriz 5 linhas e 6 colunas preenchidas Elementos com valor 1 (diferença entre 10 e 9). Todas essas operações são realizadas ELEMENT-WISE. Você também pode aplicar qualquer operação aritmética e lógica na matriz E valor escalar. Isso iria executar a operação elemento-sábio em cada elemento da matriz de origem e dado valor escalar. M Matriz (10.10 0) m será 10x10 matriz preenchida com zeros z m z é agora também uma matriz para (i 0 i lt 10 i) z i 4 i preencher z com alguns outros valores, observe que m permanecerá inalterado. Para (i 0 i lt 10 i) TRACEF (gg, g, gn, i, mi 1, mi 4, zi 4) adição escalar (elemento sábio) z 3 m 5 para (i 0 i lt 10 i) TRACEF (gg , G, gn, i, mi 1, mi 4, zi 4) Há um operador especial que trabalha somente em matrizes - é produto de matriz. O operador para o produto matricial é (o sinal at). O produto Matrix é a forma de álgebra linear para multiplicar matrizes. Se você escreve CAB, ele multiplica a matriz A (n, k) pela matriz B (k, m) para produzir a matriz C (n, m) então o número de colunas na matriz A deve ser igual ao número de linhas na matriz B. Para obter mais informações, consulte: en. wikipedia. orgwikiMatrixmultiplication A precedência do operador de produto de matriz é o mesmo que (portanto, ele tem maior precedência do que adição e subtração). A Matriz (1,3) B Matriz (3,2) matriz A 1, 4, 6 matriz B 2, 3 5, 8 7, 9 A 0 0 1 A 0 1 4 A 0 2 6 B 0 0 2 B 0 1 3 B 1 0 5 B 1 1 8 B 2 0 7 B 2 1 9 TRACEF (g g, X 0 0, X 0 1) Declarações compostas (Blocks) Uma declaração composta consiste em zero ou mais declarações encerradas em chaves ). Uma instrução composta pode ser usada em qualquer lugar onde uma declaração seja esperada. Compromissos são comumente chamados de 8220blocks.8221 (isto é emprestado da linguagem C, os usuários de outras linguagens de programação são usados ​​para usar BEGIN para) se (Montante gt 100) TRACE (Montante acima de 100) Saldo Saldo Saldo Saldo Saldo - In Funções Além de operadores matemáticos, AmiBroker contém mais de 70 funções integradas que executam operações matemáticas. A seguinte fórmula consiste em uma única função que dá as raízes quadradas dos preços de fechamento: A fórmula a seguir consiste em uma única função que fornece um indicador de RSI de 14 períodos: A fórmula a seguir é composta por duas funções. O resultado é a diferença entre o indicador MACD e uma média móvel exponencial de 9 períodos do MACD: Todas as chamadas de função devem consistir em identificador de função (nome) seguido por um par de parênteses. Como foi evitado em exemplos anteriores, uma função pode ser denominada dentro de uma função. A função aninhada pode servir como o parâmetro de matriz de dados de funções principais. Os exemplos a seguir mostram funções aninhadas dentro de funções: O primeiro exemplo calcula uma média móvel simples de 10 períodos de um Índice de Força Relativa de 15 períodos (RSI). O segundo exemplo calcula uma média móvel exponencial de 20 períodos de um RSI de 15 períodos e, em seguida, calcula uma média móvel simples de 10 períodos dessa média móvel. Função condicional IIF () A função iif () é usada para criar atribuições condicionais. Ele contém três parâmetros como mostrado no exemplo a seguir. A instrução quotiifquot acima lê (em Inglês) da seguinte forma: Se hoje fechar é maior do que a média móvel simples de 10 dias do fechamento, então atribua um RSI de 9 dias à variável dynamicrsi, caso contrário, atribua um RSI de 14 dias. A fórmula seguinte atribui 147 volume positivo a 14 para variável volresult se o fechamento for maior que o preço médio. Caso contrário, o volume quotnegativo é atribuído. Se você simplesmente deseja que uma expressão seja avaliada como verdadeira ou falsa, ela pode ser feita sem o uso da função iif (). A seguinte fórmula resultará em um 1 (verdadeiro) ou um 0 (falso): O mesmo feito com iif () dá os mesmos resultados, mas a fórmula é mais longa. Observe que o IIF é uma função - portanto, o resultado da avaliação é retornado por essa função e deve ser atribuído a alguma variável. IIf sempre avalia TRUEPART e FALSEPART, mesmo que ele retorna apenas um deles. Devido a isso, você deve observar os efeitos colaterais indesejáveis. A função IIF não é uma declaração de controle de fluxo. Se você precisar de controle de fluxo (execução condicional de algumas partes de código), você deve procurar instruções if-else condicionais descritas posteriormente neste documento. O exemplo a seguir mostra um erro comum feito com a função IIF: IIf (condição, resultado 7. resultado 9) ISTO É ERRADO Uso correto é: resultado IIf (condição, 7. 9) 7 ou 9 é retornado e atribuído à variável de resultado dependendo de Condição A fim de encurtar, simplificar, melhorar e tornar a manutenção de fórmulas complexas mais fácil, você pode querer usar variáveis. Na verdade, usando variáveis, você pode melhorar significativamente a velocidade de cálculo da fórmula. Portanto, é altamente recomendável usar variáveis ​​e não há limite no número de variáveis ​​que você pode definir. Uma variável é um identificador que é atribuído a uma expressão ou uma constante. O número de variáveis ​​usadas em uma fórmula não é limitado. As variáveis ​​devem ser atribuídas antes que a variável seja usada na fórmula. As variáveis ​​não podem ser atribuídas em uma chamada de função. Os nomes de variáveis ​​definidos pelo usuário (identificadores) não podem duplicar nomes já usados ​​por funções (por exemplo, ma, rsi, cci, iif, etc.) ou identificadores de matriz predefinidos (por exemplo, abertos, H, s, a). Variáveis ​​reservadas O AmiBroker usa alguns nomes de variáveis ​​reservadas em suas fórmulas, por exemplo, na janela de Auto-Análise, você tem que atribuir valores a 2 variáveis ​​nomeadas comprar ou vender para especificar as condições em que as condições quotbuyquot e quotsellquot ocorrem. Por exemplo (sistema que compra quando MACD sobe acima de 0 linha, e vende quando MACD cai abaixo de 0 linha) AmiBroker usa os seguintes nomes reservados de variável. Observe que as variáveis ​​marcadas como obsoletas NÃO devem ser usadas em novas codificações. Eles são deixados apenas para compatibilidade com versões anteriores e novas fórmulas devem usar funções modernas como Plot () para plotar indicadores e AddColumn () para definir colunas de exploração. A cor do gráfico N (obsoleto) define o índice de cores da Nª linha de gráfico (os índices de cor estão relacionados com a paleta atual - consulte PreferênciasColor) colorCustom1 0 colorCustom2 1 colorCustom3 2 colorCustom4 3 colorCustom5 4 colorCustom6 5 colorCustom7 6 colorCustom8 7 colorCustom9 8 colorCustom10 9 colorCustom11 10 colorCustom12 11 colorCustom13 12 colorCustom14 13 colorCustom15 14 colorCustom16 15 colorBlack 16 colorBrown 17 colorDarkOliveGreen 18 colorDarkGreen 19 colorDarkTeal 20 colorDarkBlue 21 colorIndigo 22 colorDarkGrey 23 colorDarkRed 24 colorOrange 25 colorDarkYellow 26 ColorGreen 27 colorTeal 28 colorBlue 29 colorBlueGrey 30 colorGrey40 31 Colorred 32 colorLightOrange 33 colorLime 34 colorSeaGreen 35 ColorAqua 35 colorLightBlue 37 colorViolet 38 colorGrey50 39 colorPink 40 colorGold 41 colorYellow 42 colorBrightGreen 43 colorTurquoise 44 colorSkyblue 45 colorPlum 46 colorLightGrey 47 colorRose 48 colorTan 49 colorLightYellow 50 col Barcolor (obsoleto) define a matriz que contém índices de paleta para cada barra desenhada gráfico N estilo (obsoleto) define o estilo de N º gráfico. Estilo é definido como uma combinação (soma) de um ou mais seguintes sinalizadores: styleLine 1 - normal (linha) gráfico (padrão) styleHistogram 2 - histograma chart styleThick 4 - gordura (thick) styleDots 8 - include dots styleNoLine 16 - nenhuma linha styleLog 32 - estilo semi-logarítmico da escalaCandle 64 - estilo do gráfico do candlestickBar 128 - gráfico de barra tradicional styleNoDraw 256 - nenhuma tração (execute a escala do eixo somente) styleStaircase 512 - carta da escadaria (estilo quadrado) styleSwingDots 1024 - pontos médios para o estilo do gráfico da escadariaNoRescale 2048 - nenhum estilo do rescaleNoLabel 4096 - nenhum rótulo de valor stylePointAndFigure 8192 - ponto e figura (novo em 4.20): styleArea 16384 - gráfico de área (histograma extra largo) styleOwnScale 32768 - gráfico está usando estilo de escala independenteLeftAxisScale 65536 - gráfico está usando a escala do eixo esquerdo (independente do eixo direito) Nem todas as combinações de sinalizadores fazem sentido, por exemplo (641) (linha de candlestick) resultará em gráfico de castiçal (style64) Nota sobre gráficos de candlestickbar: estes estilos usam em Diretamente O, H, L arrays, além do gráfico N. Assim ordinário candlestick tabela de preço fórmula é graph0close graph0style64. Mas se você quiser desenhar outra coisa além de fechar o preço, você deve atribuir novos valores a arrays O, H, L predefinidos. Gráfico N barcolor (obsoleto) define a matriz de índices de cor para as barras e castiçais em N gramas ine (índices de cor estão relacionados com a paleta atual - consulte PreferencesColor) AFL DEVELOPMENT Responder admin 5 de maio de 2012 às 15:15 SECTIONBEGIN ( ROC-close) safeguardThis é desenvolvido por StockBangladesh departamento de Investigação e Desenvolvimento, se você precisar de alguma Assistência contacte-nos através amibrokerstockbangladesh preStrMid (salvaguarda, 21, 15) stockbangladeshperiods Param (Períodos, 3, 1, 200, 1) stockbangladeshROCcloseROC (C, stockbangladeshperiods) Plot (ROC (C, StockBangladeshperiods), DefaultName (), ParamColor (cores, colorCycle), ParamStyle (Style)) pré StrMid (salvaguarda, 33, 15) StockBangladeshPriceUp LinRegSlope (StockBangladeshROCclose, StockBangladeshperiods) 0 printf (PriceUp fn, StockBangladeshPriceUp) SECTIONBEGIN (ROC-Volume) StockBangladeshperiods Param (Períodos, 3, 1, 200, 1) Plot (ROC (V, StockBangladeshperiods), DEFAULTNAME (), ParamColor (Color, colorGreen), ParamStyle (Style)) StockBangladeshROCvolumeROC (V, StockBangladeshperiods) StockBangladeshVolumeUp LinRegSlope (StockBangladeshROCvolume, StockBangladeshperiods) 0 printf (VolumeUp fn, StockBangladeshVolumeUp) StockBangladeshBullishDiv NÃO StockBangladeshPriceUP E StockBangladeshROCvolume StockBangladeshBearishDiv StockBangladeshPriceUP E NÃO StockBangladeshVolumeUp Filtro StockBangladeshBullishDiv OU StockBangladeshBearishDiv preStockBangladesh AddColumn (StockBangladeshBullishDiv, divergência de alta, 1,0, colorDefault , IIf (StockBangladeshBullishDiv, colorGreen, colorDefault)) AddColumn (StockBangladeshBearishDiv. Divergência de baixa, 1,0, colorDefault, IIf (StockBangladeshBearishDiv. Colorred, colorDefault)) GfxSetOverlayMode (1) GfxSelectFont (Tahoma, Estado (pxheight) 5) GfxSetTextAlign (6) de alinhamento do centro GfxSetTextColor ColorRGB (200, 200, 200 ()) GfxSetBkMode (1 ) Transparente GfxTextOut (pre, Status (pxwidth) 2, Status (pxheight) 12) Responder admin 5 de maio de 2012 às 9:50 pm caro senhor, ple. Converter os indicadores mq4 abaixo para afl8217s Responder reddi 2 de novembro de 2012 às 21:24 property indicatorchartwindow property indicatorbuffers 8 property indicatorcolor1 Azul property indicatorcolor2 Red property indicatorcolor3 Azul property indicatorcolor4 Vermelho property indicatorcolor5 Blue property indicatorcolor6 Red property indicatorcolor7 Blue property indicatorcolor8 Vermelho 8212- input Parâmetros extern int ChannelPeriod9 Preço Canal Período extern dual Factor de estreitamento do canal risk0.30 (082300,5) extern int Signal1 Modo de sinais de visualização: 1-Signals amp Stops 0-only Paragens 2-only Sinais extern int Line1 Display line mode: 0-no , 1-Sim extern int ColorBar1 modo barras de visor a cores: 0-sem, 1-Sim extern int TimeFrame0 TimeFrame em extern int min Nbars1000 8212- tampões indicador duplo UpTrendBuffer dupla DownTrendBuffer dupla UpTrendSignal dupla DownTrendSignal dupla UpTrendLine dupla DownTrendLine dupla UpTrendBar dupla DownTrendBar 8212821282128212821282128212821282128212821282128 212821282128212821282128212821282128212 personalizado função de inicialização indicador 8212821282128212821282128212821282128212821282128212821282128212821282128212821282128212 int init () cadeia nomecurto 8212- linha indicadora SetIndexBuffer (0, UpTrendBuffer) SetIndexBuffer (1, DownTrendBuffer) SetIndexBuffer (2, UpTrendSignal) SetIndexBuffer (3, DownTrendSignal) SetIndexBuffer (4, UpTrendLine) SetIndexBuffer (5, SetIndexStyle (3, DRAWARROW) SetIndexStyle (3, DRAWARROW) SetIndexStyle (3, DRAWARROW) SetIndexStyle (4, DRAWARROW) SetIndexStyle (5, DRAWARROW) SetIndexStyle (5, DRAWARROW) SetIndexStyle(6,DRAWHISTOGRAM, STYLESOLID,1) SetIndexStyle(7,DRAWHISTOGRAM, STYLESOLID,1) SetIndexArrow(0,159) SetIndexArrow(1,159) SetIndexArrow(2,108) SetIndexArrow(3,108) 8212- name for DataWindow and indicator subwindow label shortname8221PriceChannelStop(8220ChannelPeriod8221)8221 IndicatorShortName(shortname) SetIndexLabel(0,8221UpTrend Stop8221) SetIndexLabe l(1,8221DownTrend Stop8221) SetIndexLabel(2,8221UpTrend Signal8221) SetIndexLabel(3,8221DownTrend Signal8221) SetIndexLabel(4,8221UpTrend Line8221) SetIndexLabel(5,8221DownTrend Line8221) SetIndexLabel(6,8221UpTrend Bar8221) SetIndexLabel(7,8221DownTrend Bar8221) 8212- SetIndexDrawBegin(0,ChannelPeriod) SetIndexDrawBegin(1,ChannelPeriod) SetIndexDrawBegin(2,ChannelPeriod) SetIndexDrawBegin(3,ChannelPeriod) SetIndexDrawBegin(4,ChannelPeriod) SetIndexDrawBegin(5,ChannelPeriod) SetIndexDrawBegin(6,ChannelPeriod) SetIndexDrawBegin(7,ChannelPeriod) 8212- return(0) 8212821282128212821282128212821282128212821282128212821282128212821282128212821282128212 PriceChannelStopv6 8212821282128212821282128212821282128212821282128212821282128212821282128212821282128212 int start() datetime TimeArray int i, shift, trend, y0 double high, low, price, sum, VolAverage, UpBar, DnBar double smax25000,smin25000,bsmax25000,bsmin25000,Mid25000,Vol25000 double LowArray, HighArray for (shiftNbars-1shiftgt0shift8211) UpTrendBuffershift0.0 DownTrendBuffershift0.0 UpTrendSignalshift0.0 DownTrendSignalshift0.0 UpTrendLineshiftEMPTYVALUE DownTrendLineshiftEMPTYVALUE UpTrendBarshift0.0 DownTrendBarshift0.0 Draw price channel boards calculation. Channel middle, half channel width, ArrayCopySeries(TimeArray, MODETIME, Symbol(),TimeFrame) ArrayCopySeries(LowArray, MODELOW, Symbol(),TimeFrame) ArrayCopySeries(HighArray, MODEHIGH, Symbol(),TimeFrame) for(i0,y0iltNbarsi) if (Timei0shift8211) Calculation channel stop values Signal area. any conditions to trend determination: 1. Price Channel breakout if(Riskgt0) if(Closeshiftgtbsmaxshift) trend1 if(Closeshiftbsmaxshift1) trend1 if(Closeshift0) if(Riskgt0 ampamp Closeshiftltbsminshift) bsminshiftbsminshift1 if(bsminshiftltbsminshift1) bsminshiftbsminshift1 if(trend0 ampamp Closeshiftgtbsmaxshift) bsmaxshiftbsmaxshift1 if(bsmaxshiftgtbsmaxshift1) bsmaxshiftbsmaxshift1 Drawing area UpBarbsmaxshift DnBarbsminshift if (trendgt0) if (Signalgt0 ampamp UpTrendBuffershift1-1.0) bsminshiftsminshift UpTrendSignalshiftbsminshift if(Linegt0) UpTrendLineshiftbsminshift else UpTrendBuffershiftbsminshift if(Linegt0) UpTrendLineshiftbsminshift UpTrendSignalshift-1 if(ColorBargt0) if(CloseshiftgtUpBar) UpTrendBarshiftHighshift DownTrendBarshiftLowshift else UpTrendBarshiftEMPTYVALUE DownTrendBarshiftEMPTYVALUE if (Signal2) UpTrendBuffershift0 DownTrendBuffershift-1.0 DownTrendLineshiftEMPTYVALUE if (trend0 ampamp DownTrendBuffershift1-1.0) bsmaxshiftsmaxshift DownTrendSignals hiftbsmaxshift if(Linegt0) DownTrendLineshiftbsmaxshift else DownTrendBuffershiftbsmaxshift if(Linegt0)DownTrendLineshiftbsmaxshift DownTrendSignalshift-1 if(ColorBargt0) if(CloseshiftBars) CountBarsBars SetIndexDrawBegin(0,Bars-CountBarsATP) SetIndexDrawBegin(1,Bars-CountBarsATP) int i, i2,loopbegin, countedbarsIndicatorCounted() double SsMax, SsMin, K, val1, val2, smin, smax, price static int alrt0 if(countedbarsltATP1) for(i1iltATPi) ExtMapBuffer1CountBars-i0.0 for(i1i1i8211) SsMax HighHighest(NULL,0,MODEHIGH, ATP, i-ATP1) SsMin Low Lowest (NULL,0,MODELOW, ATP, i-ATP1) smin SsMin-(SsMax-SsMin)Minima100 smax SsMax-(SsMax-SsMin)Maxima100 ExtMapBuffer1i-ATP1smax ExtMapBuffer2i-ATP-1smax if (ExtMapBuffer10 gt ExtMapBuffer20 ampamp ExtMapBuffer11 lt ExtMapBuffer21 ampamp alrt 1) alrt 1 Alert(quotTM. quotSymbol()quot quotPeriod()quot 8211 Changing Trend Direction Long nowquot) SendMail(quotFrom TMquot, quotTM. quotSymbol()quot quotPeriod()quot 8211 Changing Trend Direction Long nowquot) if (ExtMapBuffer10 ExtMapBuffer21 ampamp alrt-1) alrt -1 Alert(8220TM. 8220Symbol()8221 8220Period()8221 8211 Changing Trend Direction Short now8221) SendMail(8220From TM8221,8221TM. 8220Symbol()8221 8220Period()8221 8211 Changing Trend Direction Short now8221) property indicatorchartwindow property indicatorbuffers 3 property indicatorcolor1 Green property indicatorcolor2 Blue property indicatorcolor3 Red 8212- indicator parameters extern int ExtDepth34 extern color Linecolor Red extern color Targetcolor Blue extern bool DrawZZfalse extern bool ShowTargettrue int UpArrowCode 241 int DownArrowCode 242 color UpArrowColor Blue color DownArrowColor Red int UpArrowSize 3 int DownArrowSize 3 8212- indicator buffers double zzL double zzH double zz double target10,target20 8212821282128212821282 128212821282128212821282128212821282128212821282128212821282128212 Custom indicator initialization function 8212821282128212821282128212821282128212821282128212821282128212821282128212821282128212 int init() IndicatorBuffers(3) 8212- drawing settings SetIndexStyle(2,DRAWARROW) SetIndexStyle(1,DRAWARROW) SetIndexStyle(0,DRAWSECTION) SetIndexArrow(2,159) SetIndexArrow(1,159) 8212- indicator buffers mapping if(DrawZZ) SetIndexBuffer(0,zz) SetIndexBuffer(1,zzH) SetIndexBuffer(2,zzL) SetIndexEmptyValue(0,0.0) SetIndexEmptyValue(1,0.0) SetIndexEmptyValue(2,0.0) return(0) int deinit() 8212- ObjectDelete(8220xpMA8221) ObjectDelete(8220Target18221) ObjectDelete(8220Target28221) ObjectDelete(8220TargetUp8221) ObjectDelete(8220TargetDown8221) ObjectDelete(8220TP18243) ObjectDelete(8220TP28243) ObjectDelete(8220R18243) ObjectDelete(8220R28243) ObjectDelete(8220R38243) ObjectDelete(8220R48243) ObjectDelete(8220LH8221) ObjectDelete(8220LL8221) ObjectDelete(8220Low8221) ObjectDelete(8220High8221) ObjectDelete(82200.6188243) ObjectDelete(82200.58243) ObjectDelete(82200.3828243) ObjectDelete(82200.2368243) Comment(8221 8220) 8212- return(0) 8212821282128212821282128212821282128212821282128212821282128212821282128212821282128212 8212821282128212821282128212821282128212821282128212821282128212821282128212821282128212 int start() int i, shift, pos, lasthighpos, lastlowpos, curhighpos, curlowpos double curlow, curhigh, lasthigh, lastlow double min, max ArrayInitialize(zz,0.0) ArrayInitialize(zzL,0.0) ArrayInitialize(zzH,0.0) lasthighposBars lastlowposBars lastlowLowBarslasthighHighBars for(shiftBars-ExtDepth shiftgt0 shift8211) curlowposLowest(NULL,0,MODELOW, ExtDepth, shift) curlowLowcurlowpos curhighposHighest(NULL,0,MODEHIGH, ExtDepth, shift) curhighHighcurhighpos 8212821282128212821282128212821282128212821282128212821282128212 if( curlowgtlastlow ) else if( lasthighposgtcurlowpos ) zzLcurlowposcurlow min100000 poslasthighpos for(ilasthighpos igtcurlowpos i8211) if (zzLi0.0) continue if (z zLiltmin) zzi0.0 zzposmin lastlowposcurlowpos lastlowcurlow 8212 high if( curhighcurhighpos ) zzHcurhighposcurhigh max-100000 poslastlowpos for(ilastlowpos igtcurhighpos i8211) if (zzHi0.0) continue if (zzHigtmax) zzi0.0 zzposmax lasthighposcurhighpos lasthighcurhigh double p, r4,r3,r2,r1 double R lasthigh 8211 lastlowrange if(lastlowposr4 )target1 curhigh (R 0.618) if(Close0gttarget1)target1 0 if(lasthighposltlastlowpos) p curhigh r4 p 8211 (R 0.618) r3 p 8211 (R 0.5) r2 p 8211 (R 0.382) r1 p 8211 (R 0.236) if(Close0ltr4 )target2 curlow 8211 (R 0.618) if(Close00 ampamp ShowTargettrue) drawLine(target1,8221TP18243, Targetcolor,2) drawLabel(8220TargetUp8221,target1,Targetcolor,7) drawTarget(8220Target18221,target1,Targetcolor,1) if(r4gtr2 ampamp Close0gtr4 ampamp target1gtr4) DrawObject(1, (target1curhigh)2) if(r4r2 ampamp target1gtr2) DrawObject(1, (target1curhigh)2) if(target2gt0 ampamp ShowTargettrue) drawLine(target2,8221TP28243, Targetcolor,2) drawLabel(8220Targ etDown8221,target2,Targetcolor,7) drawTarget(8220Target28221,target2,Targetcolor,2) if(r4ltr2 ampamp Close0ltr4 ampamp target2r2 ampamp Close0ltr2 ampamp target2ltr2) DrawObject(2, (target2curlow)2) void drawTarget(string name, double lvl, color Color, int num) string targetDoubleToStr(lvl, Digits) string verquotVequot ObjectCreate(name, OBJLABEL, 0, 0, 0) if(num1) ObjectSet(name, OBJPROPXDISTANCE, 470) ObjectSet(name, OBJPROPYDISTANCE, 2) ObjectSetText(name, quotTarget UP quottarget, 9, quotArialquot, Blue) if(num2) ObjectSet(name, OBJPROPXDISTANCE, 470) ObjectSet(name, OBJPROPYDISTANCE, 15) ObjectSetText(name, quotTarget DOWN quottarget, 9, quotArialquot, Blue) 8212821282128212821282128212821282128212821282128212821282128212821282128212821282128212 void drawLabel(string name, double lvl, color Color, int time) if(ObjectFind(name) 0) ObjectCreate(name, OBJTEXT, 0, Timetime, lvl) ObjectSetText(name, name, 8, quotArialquot, EMPTY) ObjectSet(name, OBJPROPCOLOR, Color) else ObjectMove(na me, 0, Timetime, lvl) void drawLine(double lvl, string name, color Col, int type) if(ObjectFind(name) 0) if(type 1) ObjectCreate(name, OBJHLINE, 0, Time0, lvl, Time0,lvl) else ObjectCreate(name, OBJGANNLINE, 0, Time15, lvl, Time0,lvl) ObjectSet(name, OBJPROPSTYLE, STYLESOLID) ObjectSet(name, OBJPROPCOLOR, Col) ObjectSet(name, OBJPROPWIDTH,1) if(type 1) ObjectCreate(name, OBJHLINE, 0, Time0, lvl, Time0,lvl) else ObjectCreate(name, OBJGANNLINE, 0, Time15, lvl, Time0,lvl) ObjectSet(name, OBJPROPSTYLE, STYLESOLID) ObjectSet(name, OBJPROPCOLOR, Col) ObjectSet(name, OBJPROPWIDTH,1) void DrawObject(int direction, double price) static int count 0 count string Obj quotquot Obj quotxpMAquot if (direction1) up arrow ObjectCreate(Obj, OBJARROW,0,Time0,price) ObjectSet(Obj, OBJPROPCOLOR, UpArrowColor) ObjectSet(Obj, OBJPROPARROWCODE, UpArrowCode) ObjectSet(Obj, OBJPROPWIDTH, UpArrowSize) if (direction2) down arrow ObjectCreate(Obj, OBJARROW,0,Time0,price) ObjectSet(Obj, OBJPROPCOLOR, DownArrowColor) Ob jectSet(Obj, OBJPROPARROWCODE, DownArrowCode) ObjectSet(Obj, OBJPROPWIDTH, DownArrowSize) Reply reddi November 2, 2012 at 9:53 pm thanks in advance hope u will do the same. thank u Reply rubaiyat November 7, 2012 at 8:23 am Dear admin would you please provide me a volume price analysis afl along with volume bar and fibonaci retracement. as like a afl that used by mr. kartik marar in stocknewsbd. Reply narendra jain November 27, 2012 at 9:10 am Sub:Amibroker Charts formula development for AUTOMATED TRADING Hi, this is to inform you that we are having an automated trading platform which works only through AMIBROKER. But it works with the arrows which gets ploted in the amibroker charts. for example:if it gives buy arrow then our platform places a buy order amp if it gives sell arrow then it sells our existing position. But with this, we are not getting handsome profit so, we want you to develop our charting. But we want the chartings to be develoved in such a way that no human involvement is required i. e.100 auto trading. If you do so then this is our requirement for formula development:- 1.when the AB chart gives a buy signal then my platform places a buy order now we want that the charting gives profit booking signal or square off position signal or exit position signal too according to the calculations of targets made by the chart. 2.if, in case, our 1st target doesnt gets achieve then our charting should also generate stop loss signal and trailing stop loss signal amp if market sustains above 1st target then again charting should generate 2nd buy signal and so on accordingly. 3. generation for sell signal as accordingly. So, these are our requirements for AB charting formula development as stated above. In short, we want to take benefit of both rising amp falling market(242157). For these, whatever nominal charges is required, we are ready to pay for it. Day To Day Income Reply Saifz December 27, 2012 at 11:23 pm Dear admin, do you have the latest version of VPA amp VSA afl of legendary Karthik Marar It8217ll be of great help, if you share it with us. Obrigado. Reply Krishnaraj. K January 31, 2013 at 11:28 pm Please provide me the corrected version of the Foundation V 13.41 Version afl becaus e iam getting some syntax errors pls do help me in this regard as i value the indicator as a great one. Hope you will do the needful at least sent it by mail if possible also. Reply prasadaraokarri April 22, 2013 at 10:02 am sir, can you convert mq4 formula in to afl languageplease letme know the further details as soon as possible. Reply gangadhar May 3, 2013 at 10:01 pm I have 1,3,5,7,10,15,20 min and 1 hour Time frames, with buy amp sell signal. I want to see all trigger in one window . Regards Gangadhar K need aFL FOR CRUDE OIL Reply Gupta June 28, 2013 at 12:46 am Dear administrator, First of all i thank you for helping small traders like us. i also have a small request for my Afl.. its on 8230. Nick MA Swing system(ATR-14ampK-1) with TEMA-39 close AND EMA-49 close THE system rules are as fallows. 1)for buy price candle TEMA 39 should be above EMA 49 Nick System Buy signal (filtration additional). 2)for sell price candle TEMA 39 should be below EMA 49 Nick system sell signal (filtration additional). 3)stoploss will be a)Nick system BuySell signal 6 points above high for Sell and 6 points below low for Buy of the SAME candle. b)Reversal signal FOR BuySell 6 points above high for Sell and 6 points below low for Buy of the SAME candle. 4) targets 25 to 50 points (optional) Filtration are as fallows. 1)When Nick System Buy Sell signal APPEAR it should only Buy Sell at next candle . 2)In next candle it should only BuySell if it cross signals highlow 6 points ABOVE HIGH AND BELOW LOW.. Thanking you Gupta Your Blog follower Reply Mozammal Hoque October 1, 2013 at 12:55 pm Dear administrator, I need a volume amp money flow afl with exploration and buy - sell signal . Please provide me. Thanks for your support. Reply Andrea Bertini November 8, 2013 at 3:15 pm I need a free system scan with AmiBroker of about 300 asset management products, in a medium-to long-term, in order to determine the trends and signals of buying and selling, thanks Reply SHANKAR PAWAR November 18, 2013 at 10:13 pm I need a Regular Bearish AND BULLISH Divergence, afl with exploration and buy-sell signal.

Comments

Popular Posts