5 sistema de negociação 20
Estratégia de negociação 80-20.
Introdução.
'80 -20 'é um nome de uma das estratégias de negociação (TS) descritas no livro "Street Smarts: estratégias de negociação de curto prazo de alta probabilidade" por Linda Raschke e Laurence Connors. Semelhante às estratégias discutidas no meu artigo anterior, os autores atribuem-no ao palco quando o preço testa as fronteiras do intervalo. Também está focado em lucrar com falhas falsas e roll-backs das fronteiras. Mas desta vez, analisamos o movimento de preços em um intervalo de histórico significativamente menor envolvendo apenas o dia anterior. O tempo de vida de um sinal obtido também é relativamente curto, já que o sistema é destinado a negociação intradiária.
O primeiro objetivo do artigo é descrever o desenvolvimento do módulo de sinal de estratégia de negociação '80 -20 'usando linguagem MQL5. Então, vamos conectar este módulo à versão ligeiramente editada do robô comercial básico desenvolvido no artigo anterior da série. Além disso, vamos usar o mesmo módulo para o desenvolvimento de um indicador para negociação manual.
Como já dissemos, o código fornecido na série de artigos destina-se principalmente a programadores novatos ligeiramente avançados. Portanto, além de seu objetivo principal, o código é projetado para ajudar a passar da programação processual para o orientado a objetos. O código não incluirá classes. Em vez disso, implementará totalmente estruturas mais fáceis de dominar.
Outro objetivo do artigo é desenvolver ferramentas que nos permitam verificar se a estratégia ainda é viável hoje, já que Raschke e Connors usaram o comportamento do mercado no final do século passado ao criá-lo. Alguns testes de EA com base nos dados de histórico atualizados são apresentados no final do artigo.
Sistema de negociação '80 -20 '.
Os autores citam a técnica de Taylor Trading de George Taylor, bem como os trabalhos de Steve Moore sobre a análise informática dos mercados de futuros e a experiência comercial da Derek Gipson como base teórica para seu próprio trabalho. A essência da estratégia de negociação pode ser descrita brevemente da seguinte forma: se os preços Abertos e Fechar do dia anterior estiverem localizados nas áreas de alcance diário opostas, a probabilidade de uma reversão em relação à abertura do dia anterior é muito alta hoje. Os preços de abertura e fechamento do dia anterior devem localizar perto das fronteiras do intervalo. A reversão deve começar o dia atual (não antes da vela do dia anterior estar fechada). As regras de estratégia para comprar são as seguintes:
1. Certifique-se de que o mercado se abriu nos 20% superiores e fechou nos 20% mais baixos do intervalo diário ontem.
2. Aguarde até que o Baixo de hoje queque o dia anterior pelo menos por 5 carrapatos.
3. Coloque um pedido pendente de compra no limite inferior do intervalo de ontem.
4. Uma vez que a ordem pendente se desencadeia, defina seu StopLoss inicial no Low do dia.
5. Use o stop para proteger o lucro obtido.
As regras de venda de entrada são semelhantes, mas a barra de ontem deve ser otimista, uma ordem de compra deve estar localizada na margem superior da barra, enquanto o StopLoss deve ser colocado no High de hoje.
Ainda outro detalhe importante é o tamanho de uma barra diária fechada. De acordo com Linda Raschke, deve ser grande o suficiente - mais do que o tamanho médio dos bares diários. No entanto, ela não especifica quantos dias do histórico devem ser levados em consideração ao calcular o intervalo diário médio.
Também devemos ter em mente que o TS foi projetado exclusivamente para negociação intradiária - exemplos apresentados no livro usam gráficos M15.
O bloco de sinal e o indicador que faz um layout de acordo com a estratégia são descritos abaixo. Você também pode ver algumas capturas de tela com os resultados da operação do indicador. Eles ilustram claramente os padrões correspondentes às regras do sistema e aos níveis de negociação ligados aos padrões.
A análise de padrões deve resultar na colocação de uma ordem pendente de compra. Os níveis de negociação apropriados são melhor vistos no prazo de M1:
Um padrão semelhante com a direção comercial oposta no prazo M5:
Seus níveis de negociação (prazo M1):
Módulo de sinal.
Vamos adicionar o cálculo do nível Take Profit para ilustrar a adição de novas opções a um TS personalizado. Não há tal nível na versão original, pois apenas uma parada final é usada para fechar uma posição. Vamos tornar o Take Profit dependente do nível de breakout mínimo personalizado (TS_8020_Extremum_Break) - vamos multiplicá-lo pela relação personalizada TS_8020_Take_Profit_Ratio.
Precisaremos dos seguintes elementos da função principal do módulo de sinal fe_Get_Entry_Signal: status atual do sinal, níveis calculados de entrada e saída (Stop Loss and Take Profit), bem como as bordas do intervalo de ontem. Todos os níveis são recebidos através de links para as variáveis passadas para a função, enquanto o status de retorno do sinal usa a lista de opções do artigo anterior:
ENTRY_BUY, // comprar sinal.
ENTRY_SELL, // sinal de venda.
ENTRY_NONE, // nenhum sinal.
ENTRY_UNKNOWN // status não definido.
datetime t_Time, // hora atual.
duplo & amp; d_Entry_Level, // nível de entrada (link para a variável)
duplo & amp; d_SL, // nível StopLoss (link para a variável)
duplo & amp; d_TP, // nível TakeProfit (link para a variável)
duplo & amp; d_Range_High, // Alto da 1ª barra do padrão (link para a variável)
duplo & amp; d_Range_Low // Baixa da 1ª barra do padrão (link para a variável)
Para detectar um sinal, precisamos analisar as duas últimas barras do período D1. Vamos começar do primeiro - se não cumprir os critérios do TS, não há necessidade de verificar a segunda barra. Existem dois critérios:
1. O tamanho da barra (diferença entre alto e baixo) deve exceder o valor médio nos últimos XX dias (definido pela configuração personalizada TS_8020_D1_Average_Period)
2. Os níveis de barra aberta e fechada devem estar localizados em frente 20% do intervalo da barra.
Se essas condições forem atendidas, os preços altos e baixos devem ser economizados para uso posterior. Uma vez que os primeiros parâmetros da barra não mudam durante todo o dia, não há nenhum ponto em verificar-los em cada chamada de função. Vamos armazená-los em variáveis estáticas:
input uint TS_8020_D1_Average_Period = 20; // 80-20: Número de dias para calcular o alcance diário médio.
input uint TS_8020_Extremum_Break = 50; // 80-20: Fuga mínima do extremum de ontem (em pontos)
estático ENUM_ENTRY_SIGNAL se_Possible_Signal = ENTRY_UNKNOWN; // direção do sinal da primeira barra do padrão.
// variáveis para armazenar níveis calculados entre carrapatos.
sd_SL = 0, sd_TP = 0,
sd_Range_High = 0, sd_Range_Low = 0.
// marque a primeira barra do padrão em D1:
se (se_Possible_Signal == ENTRY_UNKNOWN)
st_Last_D1_Bar = t_Curr_D1_Bar; // 1 st bar não muda neste dia.
double d_Average_Bar_Range = fd_Average_Bar_Range (TS_8020_D1_Average_Period, PERIOD_D1, t_Time);
// 1 st bar não é suficientemente grande.
se_Possible_Signal = ENTRY_NONE; // significa sem sinal hoje.
ma_Rates [0].open & gt; ma_Rates [0].high - d_20_Percents // barra aberta nos 20% superiores
ma_Rates [0].close & lt; ma_Rates [0].low + d_20_Percents // e fechado nos 20% mais baixos
ma_Rates [0].close & gt; ma_Rates [0].high - d_20_Percents // barra fechada nos 20% superiores
ma_Rates [0].open & lt; ma_Rates [0].low + d_20_Percents // e aberto nos 20% mais baixos
// 1 st bar corresponde às condições.
// define a direção comercial de hoje para a 1ª barra do padrão:
se_Possible_Signal = ma_Rates [0].open & gt; ma_Rates [0].close? ENTRY_BUY: ENTRY_SELL;
// nível de entrada no mercado:
sd_Entry_Level = d_Entry_Level = se_Possible_Signal == ENTRY_BUY? ma_Rates [0].low: ma_Rates [0].high;
Fronteiras de intervalo de 1 barramento do padrão do //:
sd_Range_High = d_Range_High = ma_Rates [0].high;
sd_Range_Low = d_Range_Low = ma_Rates [0].low;
// os níveis de abertura / fechamento de 1ª barra não correspondem às condições.
se_Possible_Signal = ENTRY_NONE; // significa sem sinal hoje.
Listagem da função para definir o intervalo de barras médio dentro do número especificado de barras no período de tempo especificado a partir da função de tempo especificada:
int i_Bars_Limit, // quantas barras considerar.
ENUM_TIMEFRAMES e_TF = PERIOD_CURRENT, // intervalos de barras.
datetime t_Time = WRONG_VALUE // quando iniciar o cálculo.
duplo d_Average_Range = 0; // variável para somar valores.
se (i_Bars_Limit & lt; 1) retornar (d_Average_Range);
se (t_Time == WRONG_VALUE) t_Time = TimeCurrent ();
int i_Price_Bars = CopyRates (_Symbol, e_TF, t_Time, i_Bars_Limit, ma_Rates);
se (Log_Level & gt; LOG_LEVEL_NONE) PrintFormat ("% s: CopyRates: erro #% u", __FUNCTION__, _LastError);
se (Log_Level & gt; LOG_LEVEL_NONE) PrintFormat ("% s: CopyRates: copiado% u barras de% u", __FUNCTION__, i_Price_Bars, i_Bars_Limit);
int i_Bar = i_Price_Bars;
d_Average_Range + = ma_Rates [i_Bar].high - ma_Rates [i_Bar].low;
retornar (d_Average_Range / double (i_Price_Bars));
Existe apenas um critério para a segunda barra (atual) do padrão - breakout da margem da faixa de ontem não deve ser menor que a especificada nas configurações (TS_8020_Extremum_Break). Assim que atingir o nível, aparece um sinal para colocar uma ordem pendente:
se (se_Possible_Signal == ENTRY_BUY)
sd_SL = d_SL = ma_Rates [1].low; // StopLoss - para o High de hoje.
se (TS_8020_Take_Profit_Ratio & gt; 0) sd_TP = d_TP = d_Entry_Level + _Point * TS_8020_Extremum_Break * TS_8020_Take_Profit_Ratio; // Obter lucros.
// a fuga é claramente vista?
ma_Rates [1].close & lt; ma_Rates [0].low - _Point * TS_8020_Extremum_Break?
sd_SL = d_SL = ma_Rates [1].high; // StopLoss - para o Low de hoje.
se (TS_8020_Take_Profit_Ratio & gt; 0) sd_TP = d_TP = d_Entry_Level - _Point * TS_8020_Extremum_Break * TS_8020_Take_Profit_Ratio; // Obter lucros.
// a fuga ascendente é claramente vista?
ma_Rates [1].close & gt; ma_Rates [0].high + _Point * TS_8020_Extremum_Break?
Salve as duas funções mencionadas acima (fe_Get_Entry_Signal e fd_Average_Bar_Range) e as configurações personalizadas relacionadas à recepção de um sinal para o arquivo da biblioteca mqh. A listagem completa está anexada abaixo. Vamos nomear o arquivo Signal_80-20.mqh e colocá-lo no diretório apropriado da pasta de dados do terminal (MQL5 \ Include \ Expert \ Signal).
Indicador para negociação manual.
Assim como a EA, o indicador é usar o módulo de sinal descrito acima. O indicador deve informar um comerciante ao receber um sinal de colocação de pedido pendente e fornecer os níveis calculados - colocação de pedidos, tomar lucros e parar os níveis de perda. Um usuário pode selecionar um método de notificação - uma janela pop-up padrão, alerta por e-mail ou notificação push. É possível escolher tudo de uma vez ou qualquer combinação que você gosta.
Outro indicador de objetivo é um layout de histórico comercial de acordo com '80 -20 'TS. O indicador é destacar as barras diárias correspondentes aos critérios do sistema e aos níveis de negociação calculados por lotes. As linhas de nível mostram como a situação evoluiu ao longo do tempo. Para mais clareza, façamos o seguinte: quando o preço toca a linha de sinal, o último é substituído por uma linha de pedido pendente. Quando a ordem pendente é ativada, sua linha é substituída pelas linhas Take Profit e Stop Loss. Estas linhas são interrompidas quando o preço toca um deles (o pedido está fechado). Este layout facilita a avaliação da eficiência das regras do sistema comercial e define o que pode ser melhorado.
Comecemos por declarar os buffers e seus parâmetros de exibição. Primeiro, precisamos declarar os dois buffers com o preenchimento da área vertical (DRAW_FILLING). O primeiro é destacar o intervalo de barras diárias completo do dia anterior, enquanto outro é para destacar a área interna apenas para separá-lo dos 20% superiores e inferiores do alcance usado em TS. Depois disso, declare os dois buffers para a linha de sinal multicolorida e a linha de pedido pendente (DRAW_COLOR_LINE). Sua cor depende da direção comercial. Existem outras duas linhas (Take Proft e Stop Loss) com a cor restante do mesmo (DRAW_LINE) - eles devem usar as mesmas cores padrão atribuídas no terminal. Todos os tipos de exibição selecionados, com exceção de uma linha simples, requerem dois buffers cada, portanto, o código é o seguinte:
#property indicator_buffers 10.
#property indicator_plots 6.
#property indicator_type1 DRAW_FILLING.
#property indicator_color1 clrDeepPink, clrDodgerBlue.
#property indicator_width1 1.
#property indicator_type2 DRAW_FILLING.
#property indicator_color2 clrDeepPink, clrDodgerBlue.
#property indicator_width2 1.
#property indicator_type3 DRAW_COLOR_LINE.
#property indicator_style3 STYLE_SOLID.
#property indicator_color3 clrDeepPink, clrDodgerBlue.
#property indicator_width3 2.
#property indicator_type4 DRAW_COLOR_LINE.
#property indicator_style4 STYLE_DASHDOT.
#property indicator_color4 clrDeepPink, clrDodgerBlue.
#property indicator_width4 2.
#property indicator_type5 DRAW_LINE.
#property indicator_style5 STYLE_DASHDOTDOT.
#property indicator_color5 clrCrimson.
#property indicator_width5 1.
#property indicator_type6 DRAW_LINE.
#property indicator_style6 STYLE_DASHDOTDOT.
#property indicator_color6 clrLime.
#property indicator_width6 1.
Vamos fornecer aos comerciantes a capacidade de desativar o preenchimento da primeira barra do padrão diário, selecionar as opções de notificação de sinal e limitar a profundidade do layout do histórico. Todas as configurações do sistema comercial do módulo de sinal também estão incluídas aqui. Para fazer isso, precisamos enumerar preliminarmente as variáveis usadas no módulo, mesmo que algumas delas sejam usadas apenas na EA e não são necessárias no indicador:
input bool Show_Inner = true; // 1ª barra do padrão: mostra a área interna?
input bool Alert_Popup = true; // Alerta: mostra uma janela pop-up?
input bool Alert_Email = false; // Alerta: Enviar um e-mail?
cadeia de entrada Alert_Email_Subj = ""; // Alerta: assunto do e-mail.
input bool Alert_Push = true; // Alerta: envia uma notificação push?
buff_1st_Bar_Outer [], buff_1st_Bar_Outer_Zero [], // buffers para traçar a gama completa da 1ª barra do padrão.
buff_1st_Bar_Inner [], buff_1st_Bar_Inner_Zero [], // buffers para traçar os 60% internos da 1ª barra do padrão.
buff_Signal [], buff_Signal_Color [], // buffers de linha de sinal.
buff_Entry [], buff_Entry_Color [], // buffers de linha de ordem pendentes.
buff_SL [], buff_TP [], // StopLoss e TakeProfit linhas 'buffers.
gd_Extremum_Break = 0 // TS_8020_Extremum_Break em preços de símbolos.
gi_D1_Average_Period = 1, // valor correto para TS_8020_D1_Average_Period.
gi_Min_Bars = WRONG_VALUE // número mínimo exigido de barras para re-cálculo.
// verifique o parâmetro TS_8020_D1_Average_Period inserido:
gi_D1_Average_Period = int (fmin (1, TS_8020_D1_Average_Period));
// converter pontos para valores de símbolos:
gd_Extremum_Break = TS_8020_Extremum_Break * _Point;
// número mínimo exigido de barras para re-cálculo = número de barras do TF atual em um dia.
gi_Min_Bars = int (86400 / PeriodSeconds ());
SetIndexBuffer (0, buff_1st_Bar_Outer, INDICATOR_DATA);
PlotIndexSetDouble (0, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (1, buff_1st_Bar_Outer_Zero, INDICATOR_DATA);
SetIndexBuffer (2, buff_1st_Bar_Inner, INDICATOR_DATA);
PlotIndexSetDouble (1, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (3, buff_1st_Bar_Inner_Zero, INDICATOR_DATA);
SetIndexBuffer (4, buff_Signal, INDICATOR_DATA);
PlotIndexSetDouble (2, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (5, buff_Signal_Color, INDICATOR_COLOR_INDEX);
SetIndexBuffer (6, buff_Entry, INDICATOR_DATA);
PlotIndexSetDouble (3, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (7, buff_Entry_Color, INDICATOR_COLOR_INDEX);
SetIndexBuffer (8, buff_SL, INDICATOR_DATA);
PlotIndexSetDouble (4, PLOT_EMPTY_VALUE, 0);
SetIndexBuffer (9, buff_TP, INDICATOR_DATA);
PlotIndexSetDouble (5, PLOT_EMPTY_VALUE, 0);
IndicatorSetString (INDICATOR_SHORTNAME, "80-20 TS");
Coloque o código do programa principal na função OnCalculate incorporada - organize o loop para iterar sobre as barras do tempo atual do passado para o futuro pesquisando-os para um sinal usando a função do módulo de sinal. Declare e inicialize as variáveis necessárias usando os valores iniciais. Vamos definir a barra de loop mais antiga para o primeiro cálculo considerando um limite de profundidade de histórico definido pelo usuário (Bars_Limit). Para chamadas subseqüentes, todas as barras do dia atual (em vez da última barra) são recalculadas, uma vez que o padrão de duas barras realmente pertence ao gráfico D1, independentemente do período de tempo atual.
Além disso, devemos proteger contra os chamados fantasmas: se não realizarmos um apagamento de buffers de indicadores forçados durante a reinicialização, as áreas preenchidas permanecem ainda mais na tela ao trocar prazos ou símbolos. A limpeza do buffer deve ser vinculada à primeira chamada de função OnCalculate após a inicialização do indicador. No entanto, a variável de cálculo prévio padrão não é suficiente para definir se a chamada é a primeira, uma vez que pode conter zero não apenas durante a primeira chamada de função, mas também "ao alterar a soma de verificação". Vamos passar algum tempo para resolver adequadamente este problema, criando a estrutura não afetada pela configuração da variável calculada anterior para zero. A estrutura é armazenar e processar dados freqüentemente usados nos indicadores:
- bandeira do primeiro lançamento da função OnCalculate;
- o contador de barras calculadas que não está definido para zero ao alterar a soma de verificação;
- bandeira de alterar a soma de verificação;
- bandeira do início de uma nova barra;
- hora de início da barra atual.
A estrutura que combina todos esses dados deve ser declarada no nível global. Ele deve ser capaz de reunir ou apresentar dados de / para qualquer função incorporada ou personalizada. Vamos nomear esta estrutura Brownie. Pode ser colocado no final do código do indicador. Um único objeto de estrutura de tipo global chamado go_Brownie também deve ser declarado:
datetime t_Last_Bar_Time; // hora da última barra processada.
int i_Prew_Calculated; // número de barras calculadas.
bool b_First_Run; // primeira bandeira de lançamento.
bool b_History_Updated; // sinalizador de atualização do histórico.
bool b_Is_New_Bar; // nova bandeira de abertura de barra.
b_First_Run = b_Is_New_Bar = true;
se (b_Reset_First_Run) b_First_Run = true; // é definido como zero se houver permissão.
// bandeira da função inicial OnCalculate primeira chamada.
se (b_First_Run & amp; i_Prew_Calculated & gt; 0) b_First_Run = false;
datetime t_This_Bar_Time = TimeCurrent () - TimeCurrent ()% PeriodSeconds ();
b_Is_New_Bar = t_Last_Bar_Time == t_This_Bar_Time;
se (b_Is_New_Bar) t_Last_Bar_Time = t_This_Bar_Time;
// há alguma alteração no histórico?
b_History_Updated = i_New_Prew_Calculated == 0 & amp; & amp; i_Prew_Calculated & gt; VALOR ERRADO ;
se (i_Prew_Calculated == WRONG_VALUE) i_Prew_Calculated = i_New_Prew_Calculated;
// ou se não houver nenhuma atualização do histórico.
senão se (i_New_Prew_Calculated & gt; 0) i_Prew_Calculated = i_New_Prew_Calculated;
Informe o Brownie do evento de desinicialização do indicador:
go_Brownie. f_Reset (); // informe Brownie.
Se necessário, a quantidade de dados armazenados pelo Brownie pode ser expandida se as funções ou classes personalizadas necessitarem de preços, volumes ou o valor de propagação atual da barra (Open, High, Low, Close, tick_volume, volume, spread). É mais conveniente usar dados pré-fabricados da função OnCalculate e passá-los através de Brownie em vez de usar as funções de cópia da série temporal (CopyOpen, CopyHigh etc. ou CopyRates) - isso economiza os recursos da CPU e elimina a necessidade de organizar o processamento de erros dessas funções de linguagem.
Voltemos à função principal do indicador. Declarar variáveis e preparar os arrays usando a estrutura go_Brownie da seguinte maneira:
i_Period_Bar = 0, // contador auxiliar.
i_Current_TF_Bar = rates_total - int (Bars_Limit) // índice de barras do início do ciclo TF atual.
data estático st_Last_D1_Bar = 0; // hora da última barra processada do par de barras D1 (2 ª barra do padrão)
static int si_1st_Bar_of_Day = 0; // índice da primeira barra do dia atual.
// limpe os buffers durante a reinicialização:
ArrayInitialize (buff_1st_Bar_Inner, 0); ArrayInitialize (buff_1st_Bar_Inner_Zero, 0);
ArrayInitialize (buff_1st_Bar_Outer, 0); ArrayInitialize (buff_1st_Bar_Outer_Zero, 0);
ArrayInitialize (buff_Entry, 0); ArrayInitialize (buff_Entry_Color, 0);
ArrayInitialize (buff_Signal, 0); ArrayInitialize (buff_Signal_Color, 0);
ArrayInitialize (buff_TP, 0);
ArrayInitialize (buff_SL, 0);
datetime t_Time = TimeCurrent ();
// profundidade mínima de re-cálculo - do dia anterior:
i_Current_TF_Bar = rates_total - Barras (_Symbol, PERIOD_CURRENT, t_Time - t_Time% 86400, t_Time) - 1;
ENUM_ENTRY_SIGNAL e_Signal = ENTRY_UNKNOWN; // sinal.
d_SL = WRONG_VALUE, // nível de SL.
d_TP = WRONG_VALUE, // TP level.
d_Entry_Level = WRONG_VALUE, // nível de entrada.
d_Range_High = WRONG_VALUE, d_Range_Low = WRONG_VALUE // bordas do intervalo do 1 st bar do padrão.
t_Curr_D1_Bar = 0, // tempo atual da barra D1 (2 ª barra do padrão)
t_D1_Bar_To_Fill = 0 // Tempo da barra D1 a ser preenchido (1 st bar do padrão)
i_Current_TF_Bar = int (fmax (0, fmin (i_Current_TF_Bar, rates_total - gi_Min_Bars)));
// o loop do programa principal deve ser localizado aqui.
Verifique a presença de um sinal durante a iteração sobre as barras de tempo atuais:
se (e_Signal & gt; 1) continuar; // nenhum sinal durante o dia em que a barra pertence.
Se houver um sinal na primeira barra de um novo dia, o intervalo da barra diária anterior deve ser preenchido. O valor da variável t_D1_Bar_To_Fill do tipo datetime é usado como uma bandeira. Se for igual a WRONG_VALUE, nenhum preenchimento é necessário nesta barra. A linha de sinal deve começar na mesma primeira barra, mas vamos estendê-la à última barra do dia anterior para uma melhor percepção de layout. Uma vez que os cálculos de uma linha de sinal, bem como cores de linha e preenchimento para barras de alta e baixa são diferentes, vamos fazer dois blocos semelhantes:
t_D1_Bar_To_Fill = Tempo [i_Current_TF_Bar - 1] - Tempo [i_Current_TF_Bar - 1]% 86400;
senão t_D1_Bar_To_Fill = WRONG_VALUE; // barra do dia anterior, não é necessário um novo preenchimento.
st_Last_D1_Bar = t_Curr_D1_Bar; // lembrar.
// Preenchendo a barra D1 do dia anterior:
se (Show_Outer) enquanto (--i_Period_Bar & gt; 0)
se (Tempo [i_Period_Bar] & lt; t_D1_Bar_To_Fill) quebrar;
enquanto (--i_Period_Bar & gt; 0)
se (Tempo [i_Period_Bar] & lt; t_D1_Bar_To_Fill) quebrar;
buff_1st_Bar_Inner_Zero [i_Period_Bar] = d_Range_Low + 0.2 * (d_Range_High - d_Range_Low);
buff_1st_Bar_Inner [i_Period_Bar] = d_Range_High - 0.2 * (d_Range_High - d_Range_Low);
// início da linha de sinal - da última barra do dia anterior.
buff_Signal [i_Current_TF_Bar] = buff_Signal [i_Current_TF_Bar - 1] = d_Range_Low - gd_Extremum_Break;
buff_Signal_Color [i_Current_TF_Bar] = buff_Signal_Color [i_Current_TF_Bar - 1] = 0;
se (Show_Outer) enquanto (--i_Period_Bar & gt; 0)
se (Tempo [i_Period_Bar] & lt; t_D1_Bar_To_Fill) quebrar;
enquanto (--i_Period_Bar & gt; 0)
se (Tempo [i_Period_Bar] & lt; t_D1_Bar_To_Fill) quebrar;
buff_1st_Bar_Inner_Zero [i_Period_Bar] = d_Range_High - 0.2 * (d_Range_High - d_Range_Low);
buff_1st_Bar_Inner [i_Period_Bar] = d_Range_Low + 0.2 * (d_Range_High - d_Range_Low);
// início da linha de sinal - da última barra do dia anterior.
buff_Signal [i_Current_TF_Bar] = buff_Signal [i_Current_TF_Bar - 1] = d_Range_High + gd_Extremum_Break;
buff_Signal_Color [i_Current_TF_Bar] = buff_Signal_Color [i_Current_TF_Bar - 1] = 1;
Todas as linhas de layout restantes devem ser plotadas dentro do loop de iteração de barras do tempo atual. Como já mencionado, a linha de sinal deve terminar na barra onde o preço o tocou. A linha de pedido pendente deve começar na mesma barra e terminar na barra, na qual ocorre o contato com o preço. As linhas Take Profit e Stop Loss devem começar na mesma barra. O layout do padrão é concluído no bar, no qual o preço toca em um deles:
enquanto (++ i_Period_Bar & lt; rates_total)
se (Tempo [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) quebrar;
buff_Signal [i_Period_Bar] = d_Range_Low - gd_Extremum_Break;
se (d_Range_Low - gd_Extremum_Break & gt; = Low [i_Period_Bar]) quebrar;
enquanto (++ i_Period_Bar & lt; rates_total)
se (Tempo [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) quebrar;
buff_Signal [i_Period_Bar] = d_Range_High + gd_Extremum_Break;
se (d_Range_High + gd_Extremum_Break & lt; = High [i_Period_Bar]) quebrar;
enquanto (++ i_Period_Bar & lt; rates_total)
se (Tempo [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) quebrar;
se (d_Range_Low & lt; = High [i_Period_Bar])
se (buff_Entry [i_Period_Bar - 1] == 0.)
// iniciar e terminar em uma única barra, estender por 1 barra para o passado.
buff_Entry [i_Period_Bar - 1] = d_Range_Low;
buff_Entry_Color [i_Period_Bar - 1] = 0;
enquanto (++ i_Period_Bar & lt; rates_total)
se (Tempo [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) quebrar;
se (d_Range_High & gt; = Low [i_Period_Bar])
se (buff_Entry [i_Period_Bar - 1] == 0.)
// iniciar e terminar em uma única barra, estender por 1 barra para o passado.
buff_Entry [i_Period_Bar - 1] = d_Range_High;
buff_Entry_Color [i_Period_Bar - 1] = 1;
// SL é igual ao baixo desde o início de um dia:
d_SL = Low [ArrayMinimum (Baixo, si_1st_Bar_of_Day, i_Period_Bar - si_1st_Bar_of_Day)];
se (Tempo [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) quebrar;
se (d_TP & lt; = High [i_Period_Bar] || d_SL & gt; = Low [i_Period_Bar])
se (buff_SL [i_Period_Bar - 1] == 0.)
// iniciar e terminar em uma única barra, estender por 1 barra para o passado.
buff_SL [i_Period_Bar - 1] = d_SL;
buff_TP [i_Period_Bar - 1] = d_TP;
// SL é igual ao Alto desde o início de um dia:
d_SL = Alto [ArrayMaximum (Alto, si_1st_Bar_of_Day, i_Period_Bar - si_1st_Bar_of_Day)];
se (Tempo [i_Period_Bar] & gt; t_Curr_D1_Bar + 86399) quebrar;
se (d_SL & lt; = Alto [i_Period_Bar] || d_TP & gt; = Baixo [i_Period_Bar])
se (buff_SL [i_Period_Bar - 1] == 0.)
// iniciar e terminar em uma única barra, estender por 1 barra para o passado.
buff_SL [i_Period_Bar - 1] = d_SL;
buff_TP [i_Period_Bar - 1] = d_TP;
Coloque o código de chamada da função de notificação de sinal f_Do_Alert fora do loop. Na verdade, tem oportunidades ligeiramente mais amplas em comparação com as envolvidas neste indicador - a função é capaz de trabalhar com arquivos de áudio, o que significa que esta opção pode ser adicionada às configurações personalizadas. O mesmo é verdade para a capacidade de selecionar arquivos separados para comprar e vender sinais. Lista de funções:
string s_Message, // mensagem de alerta.
bool b_Alert = true, // mostra uma janela pop-up?
bool b_Sound = false, // toca um arquivo de som?
bool b_Email = falso, // envia um e-mail?
bool b_Notification = false, // envia uma notificação push?
string s_Email_Subject = "", // assunto do eMail.
string s_Sound = "alert. wav" // arquivo de som.
string estático ss_Prev_Message = "houve silêncio"; // mensagem de alerta anterior.
data estático st_Prev_Time; // tempo de barra de alerta anterior.
datetime t_This_Bar_Time = TimeCurrent () - PeriodSeconds ()% PeriodSeconds (); // tempo de barra atual.
// outra e / ou 1ª barra nesta barra.
s_Message = StringFormat ("% s |% s |% s |% s",
TimeToString (TimeLocal (), TIME_SECONDS), // hora local.
StringSubstr (EnumToString (ENUM_TIMEFRAMES (_Period)), 7), // TF.
se (b_Alert) Alerta (s_Message);
se (b_Email) SendMail (s_Email_Subject + "" + _Symbol, s_Message);
se (b_Notificação) SendNotification (s_Message);
se (b_Sound) PlaySound (s_Sound);
O código para verificar a necessidade de chamar a função e formar o texto para ela localizada no corpo do programa antes da conclusão do manipulador de eventos OnCalculate:
i_Period_Bar = rates_total - 1; // barra atual.
se (buff_Signal [i_Period_Bar] == 0) return (rates_total); // nada para pegar ainda (ou já)
buff_Signal [i_Period_Bar] & gt; Alto [i_Period_Bar]
buff_Signal [i_Period_Bar] & lt; Baixa [i_Period_Bar]
) return (rates_total); // nenhuma linha de sinal tocando.
string s_Message = StringFormat ("TS 80-20: necessário% s% s, TP:% s, SL:% s",
buff_Signal_Color [i_Period_Bar] & gt; 0? "BuyStop": "SellStop",
DoubleToString (d_Entry_Level, _Digits),
DoubleToString (d_TP, _Digits),
DoubleToString (d_SL, _Digits)
f_Do_Alert (s_Message, Alert_Popup, false, Alert_Email, Alert_Push, Alert_Email_Subj);
Todo o código-fonte do indicador pode ser encontrado nos arquivos anexados (TS_80-20.mq5). O layout comercial de acordo com o sistema é melhor visto em gráficos de minutos.
Observe que o indicador usa os dados da barra em vez das seqüências de tiques dentro das barras. Isto significa que se o preço atravessou várias linhas de layout (por exemplo, linhas Take Profit e Stop Loss) em uma única barra, você nem sempre pode definir qual delas foi cruzada primeiro. Outra incerteza decorre do fato de que as linhas de início e final não podem coincidir. Caso contrário, as linhas do buffer dos tipos DRAW_LINE e DRAW_COLOR_LINE serão simplesmente invisíveis para um usuário. Esses recursos reduzem a precisão do layout, mas ainda permanecem bastante claros.
Assessor especialista para testar a estratégia de negociação '80 -20 '.
A EA básica para estratégias de teste do livro Street Smarts: Estratégias de Negociação de Curto Prazo de Probabilidade Alta foi descrita em detalhes no primeiro artigo. Vamos inserir duas mudanças significativas nela. Primeiro, o módulo de sinal deve ser usado no indicador, o que significa que seria razoável estabelecer o cálculo dos níveis de negociação nele. Já fizemos isso acima. Além do status do sinal, a função fe_Get_Entry_Signal retorna os níveis de colocação da ordem, Stop Loss e Take Profit. Portanto, vamos remover a parte apropriada do código da versão EA anterior, adicionando as variáveis para aceitar níveis da função e editar a própria função chamada. As listas dos blocos de código antigo e novo podem ser encontradas no arquivo anexado (strings 128-141).
Outra adição significativa ao código EA básico deve-se ao fato de que, ao contrário dos dois anteriores, este TS trata de uma tendência de curto prazo. Assume que o roll-back ocorre uma vez por dia e é improvável que seja repetido. Isso significa que o robô deve fazer apenas uma entrada ignorando o sinal existente o resto do tempo até o dia seguinte. A maneira mais fácil de implementar isso é usar uma bandeira especial - variável estática ou global do tipo bool na memória do programa. Mas se a operação de EA for interrompida por algum motivo (o terminal está fechado, a EA é removida do gráfico, etc.), o valor da bandeira também é perdido. Assim, devemos ter a capacidade de verificar se o sinal de hoje foi ativado anteriormente. Para fazer isso, podemos analisar a história das negociações para hoje ou armazenar a data da última entrada nas variáveis globais do terminal em vez do programa. Deixe-nos usar a segunda opção, uma vez que é muito mais fácil de implementar.
Fornecer aos usuários a capacidade de gerenciar a opção 'uma entrada por dia' e definir uma ID de cada versão lançada do robô - é necessário usar variáveis globais do nível do terminal:
input uint Magic_Number = 2016; // número mágico de EA.
Vamos adicionar as variáveis necessárias para implementar a opção 'uma entrada por dia' no bloco de definição de variáveis globais do programa. Inicialize-os na função OnInit:
gs_Prefix // identificador de (super) variáveis globais.
gs_Prefix = StringFormat ("SSB% s% u% s", _Symbol, Magic_Number, MQLInfoInteger (MQL_TESTER)? "t": "");
gb_Position_Today = int (GlobalVariableGet (gs_Prefix + "Last_Position_Date")) == TimeCurrent () - TimeCurrent ()% 86400;
gb_Pending_Today = int (GlobalVariableGet (gs_Prefix + "Last_Pending_Date")) == TimeCurrent () - TimeCurrent ()% 86400;
Aqui, o robô lê os valores das variáveis globais e compara o tempo escrito com a hora do início do dia, definindo assim se o sinal de hoje já foi processado. Time is written to the variables in two places — let's add the appropriate block to the pending order installation code (additions highlighted):
if (Log_Level > LOG_LEVEL_NONE) Print ( "Pending order placing error" );
// the distance from the current price is not enough :(
if (Log_Level > LOG_LEVEL_ERR)
PrintFormat ( "Pending order cannot be placed at the %s level. Bid: %s Ask: %s StopLevel: %s" ,
DoubleToString (d_Entry_Level, _Digits ),
DoubleToString (go_Tick. bid, _Digits ),
DoubleToString (go_Tick. ask, _Digits ),
DoubleToString (gd_Stop_Level, _Digits )
// to update the flag:
GlobalVariableSet ( // in the terminal global variables.
TimeCurrent () — TimeCurrent () % 86400.
gb_Pending_Today = true ; // in the program global variables.
The second block is placed after the code defining a newly opened position:
if ( PositionGetDouble ( POSITION_SL ) == 0 .)
// update the flag:
GlobalVariableSet ( // in the terminal global variables.
TimeCurrent () — TimeCurrent () % 86400.
gb_Position_Today = true ; // in the program global variables.
These are the only significant changes in the previous EA version code. The finalized source code of the new version is attached below.
Strategy backtesting.
In order to illustrate the trading system viability, its authors use patterns detected on the charts from the end of the last century. Therefore, we need to check its relevance in today's market conditions. For testing, I took the most popular Forex pair EURUSD, the most volatile pair USDJPY and one of the metals — XAUUSD. I increased the indents specified by Raschke and Connors 10 times, since four-digit quotes were used when the book was written, while I tested the EA on five-digit ones. Since there is no any guidance concerning the trailing parameters, I have selected the ones that seem to be most appropriate to daily timeframe and instrument volatility. The same applies to the Take Profit calculation algorithm added to the original rules — the ratio for its calculation was chosen arbitrarily, without deep optimization.
The balance chart when testing on the five-year EURUSD history with the original rules (no Take Profit):
The same settings and Take Profit:
The balance chart when testing the original rules on the five-year USDJPY history:
The same settings and Take Profit:
The balance chart when testing the original rules on the daily gold quotes for the last 4 years:
The full data on the robot settings used in each test can be found in the attached archive containing the complete reports.
Conclusão.
The rules programmed in the signal module match the 80-20 trading system description provided by Linda Raschke and Laurence Connors in their book "Street Smarts: High Probability Short-Term Trading Strategies". However, we have extended the original rules a bit. The tools (the robot and the indicator) are to help traders draw their own conclusions concerning the TS relevance in today's market. In my humble opinion, the TS needs a serious upgrade. In this article, I have tried to make some detailed comments on developing the code of the signal module, as well as the appropriate robot and indicator. I hope, this will help those who decide to do the upgrade. Apart from modifying the rules, it is also possible to find trading instruments that fit better to the system, as well as signal detection and tracking parameters.
Traduzido do russo pela MetaQuotes Software Corp.
DOUBLE MOVING AVERAGE.
While the single and double moving average systems are common, they are mostly mentioned as reversal systems that are in the market 100% of the time. We know that the market doesn't trend 100% of the time so the example double moving average crossover system below is set up to trigger an entry but is not always in the market. The reversal system version is mentioned and tested as the dual moving average in Way of the Turtle and Technical Traders Guide to Computer Analysis of the Futures Market. The dual moving average crossover system is a simplified version of the Donchian 5 and 20 System that is mentioned and tested in The Dow Jones-Irwin Guide To Trading Systems however we have seen other versions of the Donchian 5/20 System with additional rules of entry besides the simple MA crossover alone. LeBeau and Lucas say the Donchian 5/20 ". is not a simple reversal system but uses an elaborate set of filters."
The basic entry of the dual moving average system is when the faster timeframe moving average line crosses the slower timeframe moving average line. For the Donchian 5 day and 20 day example moving averages, a long position occurs when the 5 day moving average crosses above the 20 day moving average. A short position occurs when the 5 day moving average crosses below the 20 day moving average. You can choose to take the entry as soon as the lines cross or wait until the price closes on the side of the cross.
TAMANHO DE POSIÇÃO.
Position Sizing and the stop are the biggest changes from the reversal version. We'll use a stop and calculate the position Size using the Percent Volatility method which is a set risk if stopped out. For our example we have a 14 day ATR * 1.5 stop that risks 2% account equity per position. If a long entry at $10 has a stop at $8.5, $1.5 would be at risk for every share if it were a stock purchase. If the account size is $10,000 and the risk per position is 2%, your risk would be $200. The $200 ($10,000 * 2%) divided by $1.50 (of ATR value if the stop is hit) would be a position of 133 shares. Calculate the position size by taking your risk and dividing it by the value of the movement to the stop.
Together with calculating the position size, we'll use a multiple of the ATR as the stop. An example is using a 14 day ATR multiplied by 1.5 and we'll add numbers to it. If you have a stock that you entered at $10 and the 14 day ATR is $1, you would be stopped out of a long position at $8.50. A short position would be stopped out at $11.50.
The reversal versions wait until the moving average lines cross the other way but depending on your timeframes you may have significant lag that gives back much of the trend's profit. A tighter exit such as the price hitting a Parabolic SAR, a break of a price channel or using a break of another moving average line may be a better alternative for your system.
VARIAÇÕES.
To avoid some whipsaws when the market is trending sideways you can add additional filtering such as ADX, Stochastics or RSI. If you are using slower timeframes the moving averages will lag the price action so an additional filter to compensate can be a new price high before a long position or a new price low before a short position.
MAIS DETALHES.
An internet search will find many pages related to this system. You can also find it in the three books mentioned above with testing results and comparing it to other systems. Way of the Turtle uses it as a long term system with 100 day and 350 day lines. Technical Traders Guide to Computer Analysis of the Futures Market and The Dow Jones-Irwin Guide To Trading Systems use it with the 5 day and 20 day lines.
Buy the full code for this system at TFmt4 to automate and test this Dual Moving Average system using MetaTrader 4.
Buy the full code for this system at TFmt5 to automate and test this Dual Moving Average system using MetaTrader 5.
VOCE ASSUME TODOS OS RISCOS ASSOCIADOS COM DECISÕES DE INVESTIMENTO FEITAS NA BASE DE INFORMAÇÕES CONTIDAS NESTE SITE. A NEGOCIAÇÃO É ESPECIAL NA NATUREZA E NÃO É APROPRIADA PARA TODOS OS INVESTIDORES. Os INVESTIDORES NÃO DEVEM UTILIZAR O CAPITAL DE RISCOS QUE ESTÃO PREPARADOS PARA PERDER, COMO SEMPRE EXISTE O RISCO DE PERDA SUBSTANCIAL. Os INVESTIDORES DEVEM EXAMINAR TOTALMENTE A SITUAÇÃO FINANCEIRA PESSOAL ANTES DE TRADING. OS SISTEMAS NESTE SITE são exemplos de educação e não são recomendações para comprar ou vender. O DESEMPENHO PASSADO NÃO GARANTE OS RESULTADOS FUTUROS.
Donchian’s 5 and 20 day Moving Averages.
Richard Donchian é conhecido como o pai da tendência seguinte. His original trend following ideas form the basis for all trend following success that has followed. Below in an excerpt from an article written in 1995 about his 5 and 20 day moving average system:
Title: Donchian’s five - and 20-day moving averages.
Author: Richard Donchian.
Publication: Futures (Cedar Falls, Iowa) (Magazine/Journal)
Date: November 15, 1995.
Publisher: Oster Communications, Inc.
Volume: v24 Issue: n13 Page: p32: ISSN: 0746-2468.
On Wall Street there are two conflicting adages:
1. “You’ll never go broke taking a profit.”
2. “Cut your losses short and let your profits ride.”
Experience has shown that in commodities trading, the first of these “old saws” is dangerous and misleading, while the second may well be regarded as the one lesson the inexperienced commodity trader should learn if he wishes to have a better-than-even chance to come out ahead.
Every well-designed, trend-following, loss-limiting method for trading in futures (or stocks) rests on the basic principle that a trend in either direction, once established, has a strong tendency to persist, at least for a time. Among the many trend-following approaches now in use are the Dow Theory, point-and-figure chart techniques, swing methods (other than the Dow Theory), trendline methods, weekly-rule methods and moving average methods. We’ll focus on moving average methods and, in particular, the comparatively simple five - and 20-day moving average method.
The rules for the five - and 20-day moving average method break down into two categories: general and supplemental.
1. The extent of penetration of the moving average is broken into units, depending on price level. For commodities selling over 400 (wheat, soybeans, silver), for example, a penetration of 40 cents is required (Donchian had six price classes in the days before interest rates and stock index futures). 2. No closing penetration of the moving averages counts as a penetration at all unless it amounts to at least one full unit (39 cents in Rule 1 was not enough for penetration – it had to be 40 cents to count). Basic Rule A: Act on all closes that cross the 20-day moving average by an amount exceeding by one full unit the maximum penetration in the same direction on any one day on a preceding occasion (no matter how long ago) when the close was on the same side of the moving average. For example, if the last time the closing price of cotton was above the moving average it stayed above for one or more days, and the maximum amount above on any one of the days was 64 points, then when the closing price of cotton moves above the moving average, after having been lower in the interim, a buy signal is given only if it closes above the average by more than 64 points (the unit in cotton is 0.10). This principle – the requirement that a penetration of the moving average exceeds one or more previous penetrations – is a feature of the five - and 20-day method that distinguishes it from other moving average methods. Basic Rule B: Act on all closes that cross the 20-day moving average and close one full unit beyond (above or below, in the direction of the crossing) the previous 25 daily closes. Basic Rule C: Within the first 20 days after the first day of a crossing that leads to an action signal, reverse on any close that crosses the 20-day moving average and closes one full unit beyond (above or below) the previous 15 daily closes. Basic Rule D: Sensitive five-day moving average rules for closing out positions and for reinstating positions in the direction of the basic 20-day moving average trend are: 1. Close out positions when the commodity closes below the five-day moving average for long positions or above the five-day moving average for short positions by at least one full unit more than the greater of a) the previous penetration on the same side of the five-day moving average, or b) the maximum point of any previous penetration within the preceding 25 trading sessions. If the distance between the closing price and the 20-day moving average in the opposite direction to the Rule D close-out signal has been greater within the prior 15 days than the distance from the 20-day moving average in either direction within 60 previous sessions, do not act on Rule D close-out signals unless the penetration of the five-day average also exceeds by one unit the maximum distance both above and below the five-day average during the preceding 25 sessions. 2. After positions have been closed out by Rule D, reinstate positions in the direction of the basic trend a) when conditions in Rule D, point 1 above are fulfilled, b) if a new Rule A basic trend signal is given, or c) if new Rule B or Rule C signals in the direction of the basic trend are given by closing in new low or new high ground. 3. Penetrations of two units or less do not count as points to be exceeded by Rule D unless at least two consecutive closes were on the side of the penetration when the point to be exceeded was set up.
Supplementary General Rules.
1. Action on all signals is deferred for one day except on Thursday and Friday, For example, if a basic buy signal is given for wheat at the close on Tuesday, action is taken at the opening on Thursday morning. The same one-day delay applies to Rule D close-out and reinstate signals. 2. For signals given at the close on Friday, action is taken at the opening on Monday. 3. For signals given at the close on Thursday (or the next to last trading day of the week), action is taken at the Friday (or weekend) close. 4. When there is a holiday in the middle of the week or a long weekend, signals given at the close of sessions prior to the holiday are treated as follows: a) for sell signals, use weekend rules; and b) for buy signals, defer action for one day, as is done on regular consecutive trading sessions.
The five - and 20-day moving average method, and most other trend-following methods, for that matter, are not good to follow unless you are prepared to include in your program a sufficient number of futures to provide broad diversification. Risks are increased to an inordinate degree if you try to follow the method in one or just a few selected contracts.
The commodities that are in a pronounced trend and are not giving, new signals are frequently the ones in which the best results are attained. Therefore, in starting a new program it might be advisable not to wait for new signals but to take positions in the direction of prevailing trends in those not giving new activation advice. Because the markets are moving so wildly, however, it might be best to a) go in the direction of the trend only after one or more days of counter-trend movement, plus a day move in the direction of the basic trend, and b) to use an arbitrary stop on positions taken without waiting for new signals.
Remember, five and 20 days are not necessarily the best lengths for moving averages. And, most probably, the action rules themselves, as outlined above, could be refined and improved. Also, it may be that exponential moving averages, weighted moving averages, moving averages based on highs or lows or daily means, or some combination of all these, would produce superior results.
In this field of technical study it is probably safe to state that the beginning of wisdom comes when you stop chasing rainbows and admit that no method is perfect. When you find yourself willing to settle for any comparatively simple method that in tests over a long period of time makes money on balance, then stick to the method devotedly, at least until you are sure you have discovered a better method.
Richard Donchian worked at Shearson Lehman Bros. while developing his technical analysis and trend-following methods that today many traders use as the base of their systems. He also launched the first managed futures fund in 1948. Donchian died in 1993 at the age of 87.
For more on Richard Donchian, please visit the TurtleTrader Site site.
Oi Cris! Nice Article BTW. I think the second to the last paragraph is very true. I didn’t get anywhere trading until I stopped flipping methods.
I am interested in pursuing additional studies on his methods and application to futures spreads.
Donchian Breakout Trading System.
O sistema de comércio Donchian Breakout (regras e explicações abaixo) é um sistema de tendência clássico. Como tal, nós o incluímos no nosso Relatório de Tendência do Estado, que visa estabelecer uma referência para rastrear o desempenho genérico das tendências seguindo como estratégia de negociação.
The Wisdom State of Trend A seguir, informa-se o desempenho de um índice composto composto por sistemas de tendências clássicas (Donchian Breakout e outros) simulados em vários prazos e uma carteira de futuros, selecionados da gama de mais de 300 mercados de futuros em mais de 30 bolsas que O Wisdom Trading pode fornecer aos clientes acesso. O portfólio é global, diversificado e equilibrado nos principais setores.
Publicamos as atualizações do relatório todos os meses, incluindo a do sistema de comércio Donchian Breakout.
Explicado o sistema Donchian Breakout System.
O Donchian Breakout Trading System é baseado no sistema Turtle. Ele usa a lógica Turtle, exceto que é uma única unidade, não usa a última regra do Trade Are Winner, não usa correlações e usa um Gerenciador de Portfólio MACD para filtrar negócios.
O Sistema Donchian se dedica a descobertos similares a um sistema Donchian Dual Channel. Existem duas figuras de fuga, uma fuga mais longa para a entrada e uma fuga mais curta para a saída.
O sistema Donchian usa uma parada com base no alcance real médio (ATR). Observe que o conceito Turtle de N foi substituído pelo termo mais comum e equivalente Average True Range (ATR).
Um comércio é inserido quando o preço atinge o alto ou o mínimo dos X-dias anteriores. Por exemplo, Entry Breakout = 20 significa que uma posição longa é tomada se o preço atingir a alta de 20 dias; Uma posição curta é tomada se o preço atingir a baixa de 20 dias.
Se definido como zero, este parâmetro não tem efeito. Se o Deslocamento de Entrada em ATR estiver definido para 1.0, uma posição longa não será introduzida até que o preço atinja o preço de breakout normal, mais 1,0 ATR. Da mesma forma, uma posição curta ganhou & # 8217; t ser inserido até que o preço atinja o preço de breakout normal, menos 1,0 ATR. Pode ser especificado um valor positivo ou negativo para este parâmetro. Um valor positivo efetivamente atrasa a entrada até o ponto especificado após o limite de fuga escolhido; um valor negativo entraria antes do limite de fuga escolhido.
Este parâmetro define a distância do preço de entrada para a parada inicial, em termos de ATR. Este sistema, por padrão, usa o preço de entrada da ordem, não o preço de preenchimento, como base do preço de parada. Uma vez que a ATR é uma medida da volatilidade diária e as paradas do Sistema Turtle são baseadas em ATR, isso significa que o Sistema Donchian iguala o tamanho da posição em vários mercados com base na volatilidade.
De acordo com as regras originais da tartaruga, as posições longas foram interrompidas se o preço caiu 2 ATR do preço de entrada. Por outro lado, as posições curtas foram interrompidas se o preço aumentasse 2 ATR do preço de entrada.
Ao contrário da parada baseada em Exit Breakout, que se move para cima ou para baixo com o X-day high ou low, a parada definida por Stop in ATR é uma & # 8220; hard & # 8221; pare que seja corrigido acima ou abaixo do preço de entrada na entrada. Uma vez definido, não varia ao longo do comércio.
Observe que as negociações são liquidadas quando o preço atinge o Exit Breakout, Entry Breakout para a direção oposta ou o Stop in ATR, o que for mais próximo do preço no momento.
As negociações em progresso são encerradas quando o preço atinge o alto ou o mínimo dos X-dias anteriores. Esse conceito é idêntico ao Entry Breakout, mas a lógica é revertida: os negócios longos são encerrados quando o preço atinge o X-day low e os negócios curtos são encerrados quando o preço atinge o X-day low. O Exit Breakout move-se para cima (ou para baixo) com preço. Ele protege contra excursões de preços adversas, e também serve como uma parada final que atua para bloquear um lucro quando a tendência inverte.
Observe que as negociações são liquidadas quando o preço atinge o Exit Breakout, Entry Breakout para a direção oposta ou o Stop in ATR, o que for mais próximo do preço no momento.
Essas opções podem ser ativadas ou desabilitadas com os parâmetros Hold Initial Stops e Use Reversal Exit. Se a parada inicial for realizada, então o preço inicial da parada será usado para sair durante o comércio. Se estiver usando a saída de reversão, o comércio será encerrado se o preço atingir a saída da entrada na direção oposta.
Se definido como zero, este parâmetro não tem efeito. Se Exit Offset em ATR estiver configurado para 1.0, uma posição longa não será encerrada até que o preço atinja o preço de breakout normal, menos 1.0 ATR. Da mesma forma, uma posição curta ganhou-se sair até que o preço atinja o preço de breakout normal, mais 1,0 ATR. Pode ser especificado um valor positivo ou negativo para este parâmetro. Um valor positivo efetivamente atrasa a saída até o ponto especificado após o limite de fuga escolhido; um valor negativo saía antes do limite de fuga escolhido.
Definiu o número de dias para o cálculo do ATR. Esta é uma média móvel exponencial do True Range. 39 representa um Wilder ATR de 20 dias.
Este é o número de dias para a parcela média móvel longa do indicador MACD.
Este é o número de dias para a parcela média curta do indicador MACD.
O próprio MACD é a Média de Movimento Curta menos a Média de Movimento Longo. O sistema permitirá negociações Longas quando o MACD for maior que zero e permitir negociações curtas quando o MACD for menor que zero.
Este sistema usa o Gerenciador de dinheiro fracionado fixo.
Sua versão personalizada desse sistema.
Podemos fornecer uma versão personalizada deste sistema para atender aos seus objetivos de negociação. Seleção / diversificação de portfólio, prazo, capital inicial & # 8230; Podemos ajustar e testar qualquer parâmetro para suas necessidades.
Entre em contato conosco para discutir e / ou solicitar um relatório de simulação personalizado completo.
Sistemas alternativos.
Além dos sistemas de negociação pública, oferecemos aos nossos clientes vários sistemas de negociação proprietários, com estratégias que vão desde a tendência a longo prazo até a reversão média de curto prazo. Nós também fornecemos serviços de execução completa para uma solução de negociação de estratégia totalmente automatizada.
Por favor, clique na imagem abaixo para ver nosso desempenho nos sistemas de negociação.
Divulgação de risco exigida pela CFTC para resultados hipotéticos.
Os resultados de desempenho hipotéticos têm muitas limitações inerentes, algumas das quais estão descritas abaixo. Nenhuma representação está sendo feita que qualquer conta será ou provavelmente conseguirá lucros ou perdas semelhantes às exibidas. na verdade, há freqüentemente diferenças acentuadas entre resultados de desempenho hipotéticos e os resultados reais posteriormente alcançados por qualquer programa comercial específico.
Uma das limitações dos resultados de desempenho hipotéticos é que eles geralmente são preparados com o benefício de retrospectiva. Além disso, a negociação hipotética não envolve risco financeiro, e nenhum registro de negociação hipotético pode explicar completamente o impacto do risco financeiro na negociação real. Por exemplo, a capacidade de suportar perdas ou de aderir a um determinado programa de negociação, apesar das perdas comerciais, são pontos importantes que também podem prejudicar os resultados comerciais reais. Existem inúmeros outros fatores relacionados aos mercados em geral ou à implementação de qualquer programa de negociação específico que não possa ser totalmente contabilizado na elaboração de resultados de desempenho hipotéticos e todos os quais podem prejudicar os resultados comerciais reais.
O Wisdom Trading é um corretor de introdução registado no NFA.
Oferecemos serviços globais de corretagem de commodities, consultoria de futuros gerenciados, serviços de negociação de acesso direto e serviços de execução de sistemas comerciais para indivíduos, empresas e profissionais da indústria.
Como um corretor de introdução independente, mantemos relações de compensação com vários comerciantes principais da Comissão de Futuros em todo o mundo. Vários relacionamentos de compensação nos permitem oferecer aos nossos clientes uma ampla gama de serviços e excepcionalmente ampla gama de mercados.
Nossos relacionamentos de compensação oferecem aos clientes acesso 24 horas ao mercado de futuros, commodities e câmbio em todo o mundo.
O comércio de futuros envolve um risco substancial de perda e não é adequado para todos os investidores. O desempenho passado não é indicativo de resultados futuros.
5 20-trading system
Ajudando os comerciantes a prosperar.
Inscreva-se em um eCourse hoje!
December 9, 2011 by Steve.
Ed Seykota é uma lenda no mundo comercial. His ability to produce consistent returns for decades, and his masterful growth of his client’s accounts has earned him a place of distinction. But who inspired this Market Wizard’s trading methods?
Richard Donchian didn’t begin his successful trend following system until the age of 65. He was very successful and continued to trade into his 90s. Enquanto ele operava principalmente no campo das commodities, sua análise técnica é aplicável a qualquer mercado.
Donchian’s 4 week trading rule system has been at the heart of many successful trading systems, and is one of the simplest and most profitable ways to trade trending markets. As pessoas tendem a pensar complicado é melhor, mas a regra de 4 semanas é uma maneira direta de levá-lo no lado direito de uma tendência lucrativa. Note that this system was also Richard Dennis’ inspiration for his trading methods, and was taught to the legendary Turtle Traders.
Apart from the 4 week rule, Donchian did work with a five and twenty day moving average crossover signal system, and devised buy and sell rules using a weekly time period.
Durante a entrevista de Ed Seykota no livro Market Wizards de Jack Schwagger, Ed descreve as influências que Richard Donchian teve em seu sistema comercial. Enquanto Donchian usava um sistema cruzado médio de cinco e vinte dias, Ed usava médias móveis exponenciais (onde mais peso é dado aos dados mais recentes para calcular a média móvel). Isso ocorreu no início da década de 1970 - quando os computadores eram novos e muito lentos. Por exemplo, a Ed testou aproximadamente 100 variações de quatro sistemas de tendência simples em um computador era do tamanho de uma sala, e os testes levaram seis meses para completar.
Anyone who inspired one of the world’s top traders is someone who deserves our attention and study!
Donchian’s 20 Trading Guides (First publication: 1934) General Guides:
Tenha cuidado ao agir imediatamente em uma opinião pública generalizada. Mesmo que correto, geralmente atrasará o movimento. De um período de insensibilidade e inatividade, observe e se prepare para seguir um movimento na direção em que o volume aumenta. Limite perdas e lucros de passeio, independentemente de todas as outras regras. Os compromissos leves são recomendáveis quando a posição do mercado não é certa. Movimentos claramente definidos são sinalizados com freqüência o suficiente para tornar a vida interessante e a concentração desses movimentos evitará que o chicote não seja lucrativo. Raramente, tome uma posição na direção de um movimento de três dias imediatamente anterior. Aguarde uma reversão de um dia. O uso judicioso de ordens de parada é uma ajuda valiosa para negociação rentável. As paradas podem ser usadas para proteger os lucros, para limitar as perdas e de certas formações, como focos triangulares, para assumir posições. As ordens de parar são mais valiosas e menos traiçoveis se usadas em relação adequada à formação do gráfico. In a market in which upswings are likely to equal or exceed downswings, heavier position should be taken for the upswings for percentage reasons – a decline from 50 to 25 will net only 50% profit, whereas an advance from 25 to 50 will net 100% In taking a position, price orders are allowable. In closing a position, use market orders.” Buy strong-acting, strong-background commodities and sell weak ones, subject to all other rules. Os movimentos em que os trilhos (transporte) conduzem ou participam fortemente são mais valiosos a seguir do que os movimentos em que o trilho (transporte) desacelera. Um estudo sobre a capitalização de uma empresa, o grau de atividade de um problema e se um problema é um cavalo de caminhão letárgico ou um cavalo de corrida espirituoso é tão importante quanto um estudo de relatórios estatísticos.
A move followed by a sideways range often precedes another move of almost equal extent in the same direction as the original move. Geralmente, quando o segundo movimento da faixa lateral correu, é possível esperar um movimento de contador que se aproxima da faixa lateral. Reversal or resistance to a move is likely to be encountered 0n reaching levels at which in the past, the commodity has fluctuated for a considerable length of time within a narrow range on approaching highs or lows Watch for good buying or selling opportunities when trend lines are approached, especially on medium or dull volume. Certifique-se de que essa linha não tenha sido abraçada ou acertada com muita freqüência. Watch for “crawling along” or repeated bumping of minor or major trend lines and prepare to see such trend lines broken. A ruptura de linhas de tendência menores contrariando a tendência principal dá a maioria dos outros pontos importantes que tomam sinais. As posições podem ser tomadas ou invertidas na parada em tais locais. Os triângulos da inclinação do éter podem significar acumulação ou distribuição, dependendo de outras considerações, embora os triângulos sejam geralmente quebrados no lado plano. Observe o clímax do volume, especialmente após um longo movimento. Don’t count on gaps being closed unless you can distinguish between breakaway gaps, normal gaps and exhaustion gaps. Durante uma mudança, pegue ou aumente as posições na direção do movimento no mercado na manhã seguinte a uma reversão de um dia, por mais leve que seja a inversão, especialmente se o volume diminui na reversão.
Recursos de negociação.
Nossos parceiros.
Nossos eCourses.
New Trader U Shop.
Livro em destaque.
New Trader Rich Trader: 2ª edição.
Novos comerciantes são gananciosos e têm expectativas irrealistas; Os comerciantes ricos são realistas sobre os seus & # x02026;
$ 3.99 edição Kindle.
Psicologia comercial.
Correndo e negociando.
Steve Burns: depois de um fascínio ao longo da vida nos mercados financeiros, Steve Burns começou a investir em 1993 e negociou suas próprias contas em 1995. Foi & # x02026; Consulte Mais informação.
Nossos eCourses.
Médias móveis 101.
Anuncie conosco.
Se você está pensando em anunciar no Twitter, Steve é seu cara! Com mais de 70.000 seguidores dedicados, Steve tem alguns dos mais altos # x02026; Consulte Mais informação.
Donchian 5 20 System Applied To Stocks.
Richard Donchian created a system he called the Donchian 5 20 system in 1961. The system involves the use of the 5 day moving average and the 20 day moving average. Donchian believed that the 5 and 20 day moving averages have a special relationship because there are about 4, 5 day periods in a month or about 20 trading days excluding weekends.
Donchian’s idea was to use a break of the 20 day moving average as a buy, and a retracement exceeding the 5 day moving average as a sell. The price must not only cross above the 20-day moving average but also exceed any previous 1-day break by at least one volatility measure.
The Donchian 5 20 System was designed for commodity futures trading but in this lesson, I will adapt those rules to regular stock trading. This is a variation of the 5 20 system created for stocks and is therefore different from the original 5 20 system which was created for commodity futures trading.
When the 20 day moving average is broke, a buy signal is not given until one day confirms the break. The confirmation day must close above the high of the broken 20 day moving average day. No break above the 20 day moving average should be used as a buy signal unless it has at least one day confirmation where the price closes above the signal day.
If the confirmation day does not confirm and is instead a retracement day, the price will fall back below the 20 day moving average. This is ok and does not negate the 20 day moving average break buy signal. Continue to keep track of the original confirmation level (which is a close above the 20 day moving average break day). The next time the 20 day moving average is broke, it is a buy only if the 20 day moving average break exceeds the previous 20 day moving average break.
The signal only stays valid for at most 25 trading days. Act on all closes that cross the 20-day moving average, confirm with a one day close above (or below, in the direction of the crossing) for up to 25 daily closes after the original signal.
Within the first 20 days after the first day of a crossing that leads to an action signal, reverse on any close that crosses the 20-day moving average and confirms with a one day close (above or below) the previous 15 daily closes.
Close out positions when the price closes below the five-day moving average for long positions or above the five-day moving average for short positions with at least a one day confirmation close more than the greater of a) the previous penetration on the same side of the five-day moving average, or b) the maximum point of any previous penetration within the preceding 25 trading sessions.
I created this video on YouTube that explains the Donchian 5 20 system. The video has more than 14K views:
Autor: Lance Jepsen.
Para fins éticos, tento não manter qualquer posição em nenhum perfil de stock I no GuerillaStockTrading, a menos que seja especificamente indicado no artigo. Proprietário da GuerillaStockTrading. Empresário temperado, investidor e escritor. Eu amo Deus, família, país, negociação de ações, economia e ajudando as pessoas a aprender como negociar. View all posts by Lance Jepsen.
No Responses.
Deixe uma resposta.
Pós-navegação.
Market Sentiment Gauge.
Setores de Tendências.
Top Performing GuerillaStockTrading Picks For Week Ending January 26 2018.
Vencedores recentes.
Resultados passados não são indicativos de lucros futuros. Esta tabela é precisa, embora nem todos os negócios sejam representados.
Lições de Economia.
Lições de negociação de ações.
Categorias.
PREDICTION DO MERCADO DE STOCK MOSTRA MAIS DE 25.000 ASSINANTES!
Leitura recomendada.
Declaração de Divulgação.
Nós somos um site profissional que recebe compensação das empresas cujos produtos revisamos e recomendamos. Somos de propriedade independente e as opiniões que expressamos aqui são nossas. Nós temos altos padrões e uma reputação para defender. Nossas recomendações são pesquisadas cuidadosamente e se a empresa ou empresas que atualmente recomendamos não mantenham sua alta qualidade de serviço, tomaremos as medidas apropriadas, incluindo a atualização deste site para refletir as mudanças necessárias.
Comments
Post a Comment