Gráfico Líquido
Introdução
Uma vez, eu reparei que os gráficos com o tempo igual ou superior a H4 parecia ser diferente em cada corretora. A razão por trás disso era que as corretores estão localizadas em diferentes fusos horários. Em alguns casos, certas partes dos mesmos gráficos eram significativamente diferentes, apesar da pequena diferença entre os fusos horários. Enquanto em um gráfico havia um padrão de reversão distinto na mesma parte do outra não havia qualquer padrão preciso.
Assim, passou em minha cabeça escrever um indicador que redesenhe o gráfico H1, de modo que haja sempre uma barra de fechamento completa à direita. O período M1 foi escolhido como a fonte dos preços. Como resultado, um gráfico horário era redesenhado a cada minuto e em uma hora eu tinha 60 variedades do mesmo gráfico horário. Sua forma foi mudando de uma forma suave e fluida revelando padrões escondidos que o padrão inicial não tinha sequer um sinal sobre isso.
Eu chamei este indicador de "gráfico líquido" devido a sua aparência específica. Dependendo do modo da plotagem, o "fluxo" do gráfico é redesenhado quando uma nova barra do período base aparece ou quando o valor do deslocamento estático fica alterado. Neste artigo vamos considerar os princípios de plotagem do "gráfico líquido", em seguida, escreverei um indicador e compararei a eficiência da utilização desta tecnologia através da negociação do Expert por indicadores e por padrões.
1. Princípios da Plotagem
Antes de começar, vamos definir os termos.
Shift ou Deslocamento é a diferença entre os preços de abertura das barras do gráfico resultante e os preços de abertura das barras do gráfico fonte.
Período gráfico atual é o tempo do gráfico de origem.
Período gráfico de base é um período de tempo com os preços que vamos usar para a formação das barras do gráfico resultante.
O período base não pode exceder ao atual. O período atual deve ser dividido pelo período de base, sem sobra. Quanto maior a relação entre o período atual para o de base, mais variações diferentes do gráfico resultante é possível obter. No entanto, se a relação for muito grande, então os dados históricos sobre o período de tempo de base podem não ser suficientes para desenhar o número necessário de barras do gráfico resultante.
Existem três tipos de plotar um gráfico.
- Gráfico com um deslocamento estático (Static Shift ou SS).
- Gráfico com um deslocamento dinâmico do modo de abertura (>Dynamic Shift, just Open ou DSO).
- Gráfico com um deslocamento dinâmico do modo de fechamento (Dynamic Shift, expected Close ou DSC).
No modo de deslocamento estático, os tempos de abertura das barras são deslocadas pelo tempo definido. O deslocamento dinâmico no modo de abertura faz com que ele aparente ser uma barra que acabou de abrir e no modo de fechamento, como se a barra será fechada em breve.
Vamos dar uma olhada mais de perto.
1.1. Gráfico com Deslocamento estático
Neste modo, o tempo de cada barra de abertura é deslocada pelo número de minutos equivalente ao número do conjunto de períodos gráficos de base. Vamos chamá-lo de shift ou deslocamento. Desta forma, se o deslocamento do conjunto for igual a 0, então, o gráfico será exatamente o mesmo que a fonte. Deslocamento 1, desde que o período de tempo de base de 15 minutos seja igual a 15 minutos. O deslocamento 2 é igual a 30 minutos e assim por diante.
O deslocamento não pode ser superior a (k-1), onde k é uma razão entre o período de tempo atual e o de base. Isso significa que, com o período do gráfico atual em H1 e a opção básica em M1, o deslocamento máximo permitida é de 60/1 - 1 = 59 períodos de base, que é de 59 minutos. Se o período de base for M5, então, o deslocamento máximo permitido é de 60/5 - 1 = 11 períodos de base, que é de 55 minutos.
O tempo de abertura das barras para o período atual H1 e o deslocamento de 15 minutos, é 00:15, 01:15, 02:15 e assim por diante. Para o período atual M15 e o deslocamento de 1 minuto, o tempo das barras de abertura é de 00:16, 00:31, 00:46, 01:01 e assim por diante.
Quando os deslocamentos são próximos aos valores-limite, tal gráfico raramente se diferencia da fonte. Diferenças significativas aparecem quando o valor do deslocamento esta perto do meio do intervalo permitido.
Fig. 1. Exemplo de formação das barras horárias no período de base de M15 com o valor de deslocamento igual a 1
1.2. Gráfico com Deslocamento dinâmico no Modo de Abertura
Neste modo, o deslocamento é recalculado a cada vez que uma nova barra do período de base aparece. Ao mesmo tempo, o deslocamento é calculado de modo que o tempo de existência da barra no final do gráfico (os últimos preços) não exceda o valor do período de base. Se o período atual é H1 e o de base é M5, ele irá aparentar como se a barra da extrema-direita fosse aberta não mais cedo do que há cinco minutos atrás.
Fig. 2. Exemplo de formação das barras horárias no gráfico de base M15 com deslocamento dinâmico no modo de abertura
1.3. Gráfico com um deslocamento dinâmico no modo de fechamento
Neste modo, o deslocamento é recalculado a cada vez que uma nova barra do gráfico de base aparecer, como no modo de abertura. A única diferença é que o deslocamento é calculado de maneira que o tempo de existência da barra no final do gráfico (os últimos preços) for maior ou igual à diferença entre os períodos de tempo atuais e de base. Se o período atual é H1 e o de base é M5, ele irá aparentar como se a barra da extrema-direita fosse fechar não mais tarde do que cinco minutos.
Fig. 3. Exemplo de formação das barras horárias no gráfico de base M15 com deslocamento dinâmico no modo de fechamento
2. Conversão dos Dados
A função GetRatesLC() foi escrita para converter os dados históricos, levando em conta o deslocamento definido. Ele escreve os dados históricos modificados para o array de estruturas do tipo MqlRates, semelhante a função CopyRates().
int GetRatesLC( int start_pos // source for copying int len, // amount to copy MqlRates& rates[], // target array ENUM_TIMEFRAMES base_period, // basic timeframe int& shift // shift );
Parâmetros
start_pos
[in] O índice do primeiro elemento no período atual. É o ponto de partida para a conversão dos dados e copiar para o buffer.
len
[in] Número de elementos copiados.
rates[]
[out] Array do tipo MqlRates.
base_period
[in] Período base
shift
[in] [out] Deslocamento. Ele pode aceitar os seguintes valores:
Valor | Descrição |
---|---|
-2 | Calcula o deslocamento no modo de abertura (início da formação da barra) |
-1 | Calcula o deslocamento no modo de fechamento (fim da formação da barra) |
0 ... N | Aplicar o deslocamento definido. Ele pode aceitar os valores de 0 a N. N = Tcur/Tbase - 1. Onde Tcur é o período atual, TBase é o a base. |
Tabela 1. Os valores permitidos do parâmetro shift
Se a função é implementada com sucesso, shift receberá o valor calculado do deslocamento se os valores -1 ou -2 forem passados.
Valor retornado
Número de elementos copiados ou o código de erro:
Código | Descrição |
---|---|
-1 | Período base especificado incorretamente |
-2 | Deslocamento especificado incorretamente |
Tabela 2. Códigos de erro retornados
Abaixo está o código da função GetRatesLC() do arquivo liquidchart.mqh.
int GetRatesLC(int start_pos,int len,MqlRates &rates[],ENUM_TIMEFRAMES base_period,int& shift) { //--- number of basic timeframes contained in the current one int k=PeriodSeconds()/PeriodSeconds(base_period); if(k==0) return(-1);//basic timeframe specified incorrectly //--- MqlRates r0[]; ArrayResize(rates,len); if(CopyRates(_Symbol,_Period,start_pos,1,r0)<1) return(0);// no data //--- int sh; if(shift>=0) { //--- fixed shift if(shift<k) sh=shift; else return(-2);//--- shift specified incorrectly } else if(shift==-1) { //--- shift to be calculated (dynamic, beginning of the bar formation) sh=int((TimeCurrent()-r0[0].time)/PeriodSeconds(base_period)); } else if(shift==-2) { //--- shift to be calculated (dynamic, end of the bar formation) sh=1+int((TimeCurrent()-r0[0].time)/PeriodSeconds(base_period)); if(sh>=k) sh = 0; } else return(-2);//shift specified incorrectly //--- opening time of the basic period bar, which is the beginning of the current period bar formation //--- synchronization of the time of opening bars takes place relative to the tO time datetime tO; //--- closing time of the bar under formation, i.e. opening time of the last bar of basic timeframe in the series datetime tC; tO=r0[0].time+sh*PeriodSeconds(base_period); if(tO>TimeCurrent()) tO-=PeriodSeconds(); tC=tO+PeriodSeconds()-PeriodSeconds(base_period); if(tC>TimeCurrent()) tC=TimeCurrent(); int cnt=0; while(cnt<len) { ArrayFree(r0); int l=CopyRates(_Symbol,base_period,tC,k,r0); if(l<1) break; //--- time of the bar with the (l-1) index does not have to be equal to tC //--- if there is no bar with the tC time, it can be the nearest bar //--- in any case its time is assigned to the tC time tC=r0[l-1].time; //--- check if tO has the correct value and modify if needed. while(tO>tC) tO-=PeriodSeconds(); //--- the time values of tO and tC have actual meaning for the bar under formation int index=len-1-cnt; rates[index].close=0; rates[index].open=0; rates[index].high=0; rates[index].low=0; rates[index].time=tO; for(int i=0; i<l; i++) if(r0[i].time>=tO && r0[i].time<=tC) { if(rates[index].open==0) { rates[index].open= r0[i].open; rates[index].low = r0[i].low; rates[index].high= r0[i].high; }else{ if(rates[index].low > r0[i].low) rates[index].low=r0[i].low; if(rates[index].high < r0[i].high) rates[index].high=r0[i].high; } rates[index].close=r0[i].close; } //--- specifying closing time of the next bar in the loop tC=tO-PeriodSeconds(base_period); // cnt++; } if(cnt<len) { //-- less data than required, move to the beginning of the buffer int d=len-cnt; for(int j=0; j<cnt; j++) rates[j]=rates[j+d]; for(int j=cnt;j<len;j++) { //--- fill unused array elements with zeros rates[j].close=0; rates[j].open=0; rates[j].high=0; rates[j].low=0; rates[j].time=0; } } shift = sh; return(cnt); }
Alguns pontos importantes devem ser destacados.
- A função não retorna volumes de tick. A razão para isto é que, no modo DSC a função nunca retorna o volume igual a um, como acontece na abertura da barra. Isto é bastante lógico. Se o Expert Advisor usa o volume tick igual a um como sinal de uma nova barra em formação, ele nunca vai receber esse sinal. Este método é utilizado na Média Móvel do Expert Advisor. Você pode adicionar uma contagem do volume de ticks para a função, mas ela não trabalhará corretamente. Para evitar confusão eu não vou medir o volume dos ticks.
- A função retorna o número de barras solicitadas, mas isso não significa que o tempo entre a primeira e a última barra será compatível com o intervalo de tempo correspondente no gráfico de origem. No entanto, em um segmento contínuo de dados históricos haverá correspondência. Se o segmento especificado contém fins de semana, "barras fantasmas" podem aparecer na fronteira.
A figura abaixo representa um exemplo de um "barra fantasma". Esta barra foi formada para o primeiro minuto de outubro, no dia 27, que foi incluída na barra, juntamente com o tempo de abertura das 23:01 no dia 26 de outubro. Deve-se notar que depois de tais barras, o gráfico do indicador vai ser deslocado para a esquerda em relação ao gráfico fonte. As barras com o tempo correspondente ao tempo inicial (por exemplo, 21:00 -> 21:01), terão diferentes índices.
Fig. 4. Barra fantasma as 23:01 do dia 26/10/2014
3. Implementação do Indicador
Vamos escrever um indicador que exibe o "gráfico líquido" em uma janela separada. O indicador deve funcionar em todos os três modos: o modo de deslocamento estático, deslocamento dinâmico no modo de abertura da barra e o deslocamento dinâmico no modo de fechamento da barra. O indicador também tem que ter elementos de controle para alterar os modos e o valor da deslocação sem a necessidade de chamar o diálogo de parâmetros dos indicadores.
Para começar vamos usar a função GetRatesLC() do arquivo liquidchart.mqh. Vamos chamá-lo a partir da função RefreshBuffers(), na qual, por sua vez, é chamado a partir da função OnCalculate. Ele também pode ser chamado de OnChartEvent, desde que algumas alterações no modo ou no deslocamento e recálculo dos buffers dos indicadores sejam obrigatórios. A função OnChartEvent será tratada pressionando os botões e alterando os valores do deslocamento e do modo.
Parâmetros de entrada do indicador:
input ENUM_TIMEFRAMES BaseTF=PERIOD_M1; // LC Base Period input int Depth=100; // Depth, bars input ENUM_LC_MODE inp_LC_mode=LC_MODE_SS; // LC mode input int inp_LC_shift=0; // LC shift
onde a profundidade é o número de barras do gráfico resultante e ENUM_LC_MODE é o tipo que descreve os modos de plotagem do indicador:
enum ENUM_LC_MODE {//plotting mode LC_MODE_SS=0, // Static Shift LC_MODE_DSO=1, // Dynamic Shift, just Open LC_MODE_DSC=2 // Dynamic Shift, expected Close };Os parâmetros inp_LC_mode e inp_LC_shift são duplicadose de acordo com LC_mode e LC_shift. Este projeto permite mudar seus valores, pressionando o botão. Desenhando os botões e o tratamento em pressionar os botões não serão considerados já que eles não são relevantes para o tema deste artigo. Vamos considerar a função RefreshBuffers() em detalhe.
bool RefreshBuffers(int total, double &buff1[], double &buff2[], double &buff3[], double &buff4[], double &col_buffer[]) { MqlRates rates[]; ArrayResize(rates,Depth); //--- int copied=0; int shift=0; if(LC_mode==LC_MODE_SS) shift = LC_shift; //static shift else if(LC_mode==LC_MODE_DSO) shift = -1; //calculate shift (beginning of the bar formation) else if(LC_mode==LC_MODE_DSC) shift = -2; //calculate shift (end of the bar formation) else return(false); //--- copied=GetRatesLC(0,Depth,rates,BaseTF,shift); //--- if(copied<=0) { Print("No data"); return(false); } LC_shift = shift; refr_keys(); //--- initialize buffers with empty values ArrayInitialize(buff1,0.0); ArrayInitialize(buff2,0.0); ArrayInitialize(buff3,0.0); ArrayInitialize(buff4,0.0); //--- int buffer_index=total-copied; for(int i=0;i<copied;i++) { buff1[buffer_index]=rates[i].open; buff2[buffer_index]=rates[i].high; buff3[buffer_index]=rates[i].low; buff4[buffer_index]=rates[i].close; //--- if(rates[i].open<=rates[i].close) col_buffer[buffer_index]=1;//bullish or doji else col_buffer[buffer_index]=0;//bearish // buffer_index++; } // return(true); }
A primeira vista, um valor relevante da variável shift deve ser passada para a função GetRatesLC() que depende do modo. No modo estático, ela será uma cópia do parâmetro LC_shift e nos modos de abertura ou encerramento da barra será -1 ou -2 correspondentemente. Após a execução bem-sucedida da função GetRatesLC(), ela retorna o valor atual do deslocamento para a variável shift . Ela é recalculada ou deixada como está. Em todo caso, vamos atribuir o seu valor para a variável LC_shift e, em seguida, chamar o redesenho dos elementos gráficos, pela função refr_keys().
Depois disso, renovamos os valores OHLC e as cores da barra nos buffers de indicadores.
O código completo do indicador pode ser encontrado no arquivo liquid_chart.mq5. Após o lançamento, o indicador tem a seguinte forma:
Fig. 5. O indicador Gráfico Líquido
Algumas palavras sobre os elementos de controle.
- O botão SS, muda o indicador para o modo de deslocamento estático. Botões com setas estão ativos neste modo e eles podem ser usados para definir o valor necessário do deslocamento.
- O botão DSO muda o indicador para o modo de deslocamento dinâmico, a partir da formação da barra. Neste modo, o valor do desvio é calculado e ele não pode ser modificado manualmente.
- O botão DSC muda o indicador para o modo de deslocamento dinâmico, a partir do fechamento da barra. Neste modo, a modificação manual do deslocamento não está disponível também.
No modo SS, quando o valor do desvio é 0, o indicador duplica os valores do gráfico inicial. Se você alterar o deslocamento, você verá o gráfico ser redesenhado. Uma diferença notável já aparece no valor de 28. Em vez de uma "linha" mesquinha há um distinto "martelo". Está na hora de comprar?
Fig. 6. O indicador Gráfico Líquido, deslocamento estático 28
Alterne o indicador para o modo DSO, e um barra recém formada estará sempre a direita. No modo DSC, há uma barra que irá fechar antes do que o valor do período base.
4. Criando um Expert
Vamos criar dois Experts. O primeiro deles será negociado pela média móvel e o segundo pelo padrão de barra "pin bar".
Vamos pegar o Expert Média Móvel dos exemplos padrão (na pasta Experts\Examples\Moving Average) como modelo. Desta forma, seremos capazes de comparar os resultados da otimização de duas estratégias essencialmente diferentes para entender quando o uso do deslocamento estático ou dinâmico é relevante e de alguma importância.
4.1. Expert que Negocia pela Média Móvel
A princípio, os parâmetros de entrada devem ser definidos. Há quatro delas:
input double MaximumRisk = 0.1; // Maximum Risk in percentage input double DecreaseFactor = 3; // Decrease factor input int MovingPeriod = 12; // Moving Average period input int MovingShift = 6; // Moving Average shift
Mais três parâmetros serão adicionados depois da modernização:
input ENUM_TIMEFRAMES BaseTF=PERIOD_M1; // LC Base Period input bool LC_on = true; // LC mode ON input int LC_shift = 0; // LC shift
O parâmetro LC_on será útil para verificar se a função GetRatesLC() funciona corretamente. A combinação (LC_on == true && LC_shift == 0) deve ter o mesmo resultado que (LC_on == false).
Para melhorarmos o Expert pronto Média Móvel com o deslocamento, o arquivo liquidchart.mqh tem de ser incluído e as funções CopyRates() têm de ser substituídas com as funções GetRatesLC() para aqueles casos em que o recurso de deslocamento está habilitado (parâmetro de entrada LC_on é true):
int copied; if(LC_on==true) { int shift = LC_shift; copied=GetRatesLC(0,2,rt,BaseTF,shift); } else copied = CopyRates(_Symbol,_Period,0,2,rt); if(copied!=2) { Print("CopyRates of ",_Symbol," failed, no history"); return; }
É necessário ser feito para ambas as funções CheckForOpen() e CheckForClose(). Temos de recusar o uso do manipulador do indicador e calcular as médias móveis manualmente. Para isso, acrescentamos a função CopyMABuffer():
int CopyMABuffer(int len,double &ma[]) { if(len<=0) return(0); MqlRates rates[]; int l=len-1+MovingPeriod; int copied; if(LC_on==true) { int shift = LC_shift; ArrayResize(rates,l); copied=GetRatesLC(MovingShift,l,rates,BaseTF,shift); } else copied=CopyRates(_Symbol,_Period,MovingShift,l,rates); // if(copied<l) return(0); // for(int i=0;i<len;i++) { double sum=0; for(int j=0;j<MovingPeriod;j++) { if(LC_on==true) sum+=rates[j+i].close; else sum+=rates[copied-1-j-i].close; } ma[i]=sum/MovingPeriod; } return(len); }
Ele retorna o número necessário de valores ou 0 no buffer ma[], se por algum motivo houver falha na obtenção.
O controle de abertura das barras é outro ponto importante a considerar. Na versão original o Expert Advisor Média Móvel foi implementado através da utilização dos valores de ticks:
if(rt[1].tick_volume>1) return;
No nosso caso, não há volume de ticks e, portanto, nós estaremos escrevendo a função NewBar() para controlar abertura barra:
bool newbar(datetime t) { static datetime t_prev=0; if(t!=t_prev) { t_prev=t; return(true); } return(false); }
O princípio de funcionamento encontra-se na comparação entre o tempo da barra com o valor anterior de abertura. Vamos substituir a verificação do volume de tick para a chamada da função NewBar() nas funções CheckForOpen() e CheckForClose():
if(newbar(rt[1].time)==false) return;
O código completo do Expert pronto pode ser encontrado no arquivo moving_average_lc.mq5.
4.2. Expert Advisor que Negocia pelo Padrão "Pin Bar"
Pin Bar ou Pinocchio bar é um padrão que consiste em três barras. A barra do meio tem que ter uma longa sombra ou "nariz", indicando uma provável reversão do movimento dos preços. As barras na parte lateral são chamadas de "olhos". Seus pontos extremos não devem sair da sombra da barra vizinha. Este padrão é popular com os traders que negociam através de modelos de candlestick (velas).
Nosso pin bar tem que cumprir as seguintes condições para reverter a baixa de preços:
- A barra r[0] deve ser alta.
- A barra r[2] deve ser de baixa.
- O maior valor dos preços de A e C não devem exceder B, Onde A e C são os valores de Máxima das barras r[0] e r[2], respectivamente. B é o preço de Máxima da barra r[1].
- O corpo da barra do meio, que é o módulo da diferença entra a Abertura e o Fechamento (OC na figura) da barra de r[1], não deve exceder o número de pontos fixados pelo parâmetro externo.
- A sombra da barra do meio, ou a diferença do preço Máximo e o maior de valor de Abertura e Fechamento da barra r[1], não deve ser menor do que o número de pontos definidos pelo parâmetro externo.
- A razão entre a barra de sombra do meio para seu corpo não deve ser menor do que o valor definido pelo parâmetro externo.
O tesde de verificação padrão vai ser realizado no momento da abertura da barra r[3].
Fig. 7. O padrão "Pin Bar"
O Código que define a presença da barra pin bar para a reversão para baixo deve ficar assim:
if(r[0].open<r[0].close && r[2].open>r[2].close && r[1].high>MathMax(r[0].high,r[2].high)) { //--- eyes of the upper pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(r[1].high-MathMax(r[1].open,r[1].close))/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(1); }
O mesmo para a reversão para cima. Assim, a função de verificação da presença da barra pin bar ficará da seguinte forma:
int IsPinbar(MqlRates &r[]) { //--- there must be 4 values in the r[] array if(ArraySize(r)<4) return(0); if(r[0].open<r[0].close && r[2].open>r[2].close && r[1].high>MathMax(r[0].high,r[2].high)) { //--- eyes of the upper pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(r[1].high-MathMax(r[1].open,r[1].close))/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(1); } else if(r[0].open>r[0].close && r[2].open<r[2].close && r[1].low<MathMin(r[0].low,r[2].low)) { //--- eyes of the lower pin bar double oc=MathAbs(r[1].open-r[1].close)/_Point; if(oc>inp_pb_max_OC) return(0); double shdw=(MathMin(r[1].open,r[1].close)-r[1].low)/_Point; if(shdw<inp_pb_min_shdw) return(0); if(oc!=0) { if((shdw/oc)<inp_pb_min_ratio) return(0); } return(-1); } return(0); }
O array passado de dados históricos não deve ter menos do que quatro elementos. No caso da barra pin bar superior ser detectada (que é a barra pin bar indicando a reversão para baixo), a função irá retornar o valor de 1. No caso de haver um pin bar menor (suposta inversão para cima), a função retornará o valor de -1. A função retornará 0 se não há pin bar. A função também utiliza os seguintes parâmetros de entrada:
input uint inp_pb_min_shdw = 40; // Pin bar min shadow, point input uint inp_pb_max_OC = 20; // Pin bar max OC, point input double inp_pb_min_ratio = 2.0; // Pin bar shadow to OC min ratio
Estamos negociando pela estratégia de negociação mais simples da pin bar. Vamos vender se uma inversão para baixo é esperada e comprar, se a reversão for para cima. Normalmente, as confirmações de indicadores são necessários, mas desta vez não vamos usá-los para manter a integridade experimental. Nós vamos utilizar apenas a pin bar.
O Expert Advisor que negocia pelo padrão "Pin Bar" será baseado no Expert que negocia pela média móvel. A função CopyMABuffer() tem de ser eliminada por último, bem como chamar esta função a partir das funções CheckForOpen() e CheckForClose(). O número de solicitações de dados históricos é para ser aumentado de dois para quatro. O tempo da barra r[3] será utilizada na verificação para a nova abertura da barra.
int copied; if(LC_on==true) { int shift = LC_shift; copied=GetRatesLC(0,4,rt,BaseTF,shift); } else copied = CopyRates(_Symbol,_Period,0,4,rt); if(copied!=4) { Print("CopyRates of ",_Symbol," failed, no history"); return; } if(newbar(rt[3].time)==false) return;
A verificação de um sinal para uma abertura de posição será algo como:
int pb=IsPinbar(rt); if(pb==1) // upper pin bar signal=ORDER_TYPE_SELL; // sell conditions else if(pb==-1) // lower pin bar signal=ORDER_TYPE_BUY; // buy conditions
Para fechar a posição pelo pin bar oposto:
if(type==(long)POSITION_TYPE_BUY && pb==1) signal=true; if(type==(long)POSITION_TYPE_SELL && pb==-1) signal=true;
Por favor, note que, em condições rigorosas nos parâmetros de entrada, a pin bar raramente ocorre. Portanto, quando fechar uma posição apenas por pin bar oposta, existe o risco de perder o lucro ou fechar no prejuízo
Neste contexto, nós adicionamos os níveis de Take Profit e Stop Loss. Eles vão ser definidos pelos parâmetros externos inp_tp_pp e inp_sl_pp respectivamente:
double sl=0,tp=0,p=0; double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK); double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); if(signal==ORDER_TYPE_SELL) { p=bid; if(inp_sl_pp!=0) sl=NormalizeDouble(ask+inp_sl_pp*_Point,_Digits); if(inp_tp_pp!=0) tp=NormalizeDouble(ask-inp_sl_pp*_Point,_Digits); } else { p=ask; if(inp_sl_pp!=0) sl=NormalizeDouble(bid-inp_sl_pp*_Point,_Digits); if(inp_tp_pp!=0) tp=NormalizeDouble(bid+inp_sl_pp*_Point,_Digits); } CTrade trade; trade.PositionOpen(_Symbol,signal,TradeSizeOptimized(),p,sl,tp);
Se o valor de inp_tp_pp ou inp_sl_pp é zero, então o nível correspondente de Take Profit ou Stop Loss não será definido.
A modificação está completa. O Expert está pronto. O código completo pode ser encontrado no arquivo pinbar_lc.mq5.
5. Otimização do Expert
Para avaliar a eficácia dos gráficos com o deslocamento nas diferentes estratégias, vamos utilizar a otimização do Expert com uma comparação posterior dos melhores resultados. Os parâmetros mais importantes aqui são lucro, rebaixamento e o número de negócios. O Expert Advisor que negocia por Média Móvel servirá como exemplo de uma estratégia com indicador e o Expert que negocia pelo padrão "Pin Bar" irá representar um caso de estratégia que não utiliza indicadores.
A otimização será realizada com cotações da última metade de um ano a partir dos servidores da MetaQuotes-Demo. O experimento será conduzido para EURUSD, GBPUSD e USDJPY. O depósito inicial é de $3000 com alavancagem de 1:100. O modo de teste é para "Cada Tick". Modo de otimização - rápido (algoritmo genético), Balance Max.
5.1. Análise dos resultados da otimização do Expert que negocia através da Média Móvel
Vamos comparar os resultados da otimização de um Expert quando ele está a trabalhar em diferentes modos: com zero de deslocamento, com o deslocamento estático e com o deslocamento dinâmico (DSO e DSC).
O teste será realizado para EURUSD, GBPUSD e USDJPY no período de 01/04/2014 - 25/10/2014 (últimos seis meses). Período H1.
Parâmetros de entrada do Expert:
Parâmetro | Valor |
---|---|
Risco máximo em percentagem | 0.1 |
Fator de diminuição | 3.0 |
Período da Média Móvel | 12 |
Deslocamento da Média Móvel | 6 |
BaseTF | 1 Minute |
LC_on | true |
LC_shift | 0 |
Tabela 3. Parâmetros de entrada do Expert Média Móvel LC
5.1.1. Otimização do Expert com o Modo de Deslocamento desativado
Parâmetros otimizados:
Parâmetro | Início | Passo | Parada |
---|---|---|---|
Período da Média Móvel | 12 | 1 | 90 |
Deslocamento da Média Móvel | 6 | 1 | 30 |
Tabela 4. Parâmetros otimizados do Expert Média Móvel LC no modo de deslocamento zero
Gráfico que descreve a otimização do Expert no modo de deslocamento desativado, EURUSD:
Fig. 8. Otimização do Expert Média Móvel LC no modo de deslocamento zero, EURUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift |
---|---|---|---|---|---|
3796,43 | 796,43 | 16,18 | 111 | 24 | 12 |
3776,98 | 776,98 | 17,70 | 77 | 55 | 22 |
3767,45 | 767,45 | 16,10 | 74 | 59 | 23 |
3740,38 | 740,38 | 15,87 | 78 | 55 | 17 |
3641,16 | 641,16 | 15,97 | 105 | 12 | 17 |
Tabela 5. Melhores resultados do Expert Média Móvel LC para o EURUSD no modo de deslocamento zero
Gráfico que representa a otimização do Expert no modo de deslocamento zero, GBPUSD:
Fig. 9. Otimização do Expert Média Móvel LC no modo de deslocamento zero, GBPUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift |
---|---|---|---|---|---|
4025,75 | 1025,75 | 8,08 | 80 | 18 | 22 |
3857,90 | 857,90 | 15,04 | 74 | 55 | 13 |
3851,40 | 851,40 | 18,16 | 80 | 13 | 24 |
3849,48 | 849,48 | 13,05 | 69 | 34 | 29 |
3804,70 | 804,70 | 16,57 | 137 | 25 | 8 |
Tabela 6. Melhores resultados da otimização do Expert Média Móvel LC para GBPUSD no modo de deslocamento zero
Gráfico que representa a otimização do Expert com o modo de deslocamento desativado, USDJPY:
Fig. 10. Otimização do Expert Média Móvel LC no modo de deslocamento zero, USDJPY
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift |
---|---|---|---|---|---|
5801,63 | 2801,63 | 11,54 | 48 | 65 | 23 |
5789,17 | 2789,17 | 14,03 | 50 | 44 | 27 |
5539,06 | 2539,06 | 17,14 | 46 | 67 | 27 |
5331,34 | 2331,34 | 15,05 | 61 | 70 | 9 |
5045,19 | 2045,19 | 12,61 | 48 | 83 | 15 |
Tabela 7. Melhores resultados do Expert Média Móvel LC para USDJPY no modo de deslocamento zero
5.1.2. Otimização do Expert no modo de deslocamento estático
Parâmetros otimizados:
Parâmetro | Início | Passo | Parada |
---|---|---|---|
Período da Média Móvel | 12 | 1 | 90 |
Deslocamento da Média Móvel | 6 | 1 | 30 |
LC_shift | 1 | 1 | 59 |
Tabela 8. Parâmetros otimizados do Expert Média Móvel LC no modo de deslocamento estático
Gráfico que representa a otimização do Expert no modo de deslocamento estático, EURUSD:
Fig. 11. Otimização do Expert Média Móvel LC no modo de deslocamento estático, EURUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
4385,06 | 1385,06 | 12,87 | 100 | 32 | 11 | 8 |
4149,63 | 1149,63 | 14,22 | 66 | 77 | 25 | 23 |
3984,92 | 984,92 | 21,52 | 122 | 12 | 11 | 26 |
3969,35 | 969,35 | 16,08 | 111 | 32 | 11 | 24 |
3922,95 | 922,95 | 12,29 | 57 | 77 | 25 | 10 |
Tabela 9. Os melhores resultados da otimização do Expert Média Móvel LC para EURUSD no modo de deslocamento estático
Gráfico que representa a otimização do Expert no modo de deslocamento estático, GBPUSD:
Fig. 12. Otimização do Expert Média Móvel LC no modo de deslocamento estático, GBPUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
4571,07 | 1571,07 | 14,90 | 79 | 12 | 25 | 42 |
4488,90 | 1488,90 | 15,46 | 73 | 12 | 25 | 47 |
4320,31 | 1320,31 | 9,59 | 107 | 12 | 16 | 27 |
4113,47 | 1113,47 | 10,96 | 75 | 12 | 25 | 15 |
4069,21 | 1069,21 | 15,27 | 74 | 12 | 25 | 50 |
Tabela 10. Os melhores resultados da otimização do Expert Média Móvel LC para GBPUSD no modo de deslocamento estático
Gráfico que representa a otimização do Expert no modo de deslocamento estático, USDJPY:
Fig. 13. Otimização do Expert Média Móvel LC no modo de deslocamento estático, USDJPY
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
6051,39 | 3051,39 | 15,94 | 53 | 76 | 12 | 31 |
5448,98 | 2448,98 | 10,71 | 54 | 44 | 30 | 2 |
5328,15 | 2328,15 | 11,90 | 50 | 82 | 13 | 52 |
5162,82 | 2162,82 | 10,46 | 71 | 22 | 26 | 24 |
5154,71 | 2154,71 | 14,34 | 54 | 75 | 14 | 58 |
Tabela 11. Os melhores resultados da otimização do Expert Média Móvel LC para USDJPY no modo de deslocamento estático
5.1.3. Otimização do Expert no modo de deslocamento dinâmico
Parâmetros otimizados:
Parâmetro | Início | Passo | Parada |
---|---|---|---|
Período da Média Móvel | 12 | 1 | 90 |
Deslocamento da Média Móvel | 6 | 1 | 30 |
LC_shift | -2 | 1 | -1 |
Tabela 12. Parâmetros otimizados do Expert Média Móvel LC no modo de deslocamento dinâmico
Gráfico que representa a otimização do Expert no modo de deslocamento dinâmico, EURUSD:
Fig. 14. Otimização do Expert Média Móvel LC no modo de deslocamento dinâmico, EURUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
3392,64 | 392,64 | 27,95 | 594 | 15 | 13 | -2 |
3140,26 | 140,26 | 23,35 | 514 | 12 | 17 | -2 |
2847,12 | -152,88 | 17,04 | 390 | 79 | 23 | -1 |
2847,12 | -152,88 | 17,04 | 390 | 79 | 12 | -1 |
2826,25 | -173,75 | 20,12 | 350 | 85 | 22 | -1 |
Tabela 13. Os melhores resultados da otimização do Expert Média Móvel LC para EURUSD no modo de deslocamento dinâmico
Gráfico que representa a otimização do Expert no modo de deslocamento dinâmico, GBPUSD:
Fig. 15. Otimização do Expert Média Móvel LC no modo de deslocamento dinâmico, GBPUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
5377,58 | 2377,58 | 19,73 | 391 | 12 | 26 | -2 |
3865,50 | 865,50 | 18,18 | 380 | 23 | 23 | -2 |
3465,63 | 465,63 | 21,22 | 329 | 48 | 21 | -2 |
3428,99 | 428,99 | 24,55 | 574 | 51 | 16 | -1 |
3428,99 | 428,99 | 24,55 | 574 | 51 | 15 | -1 |
Tabela 14. Os melhores resultados da otimização do Expert Média Móvel LC para GBPUSD no modo de deslocamento dinâmico
Gráfico que representa a otimização do Expert no modo de deslocamento dinâmico, USDJPY:
Fig. 16. Otimização do Expert Média Móvel LC no modo de troca dinâmico, USDJPY
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | MovingPeriod | MovingShift | LC_shift |
---|---|---|---|---|---|---|
6500,19 | 3500,19 | 17,45 | 244 | 42 | 28 | -2 |
6374,18 | 3374,18 | 19,91 | 243 | 54 | 24 | -2 |
6293,29 | 3293,29 | 19,30 | 235 | 48 | 27 | -2 |
5427,69 | 2427,69 | 17,65 | 245 | 90 | 8 | -2 |
5421,83 | 2421,83 | 16,30 | 301 | 59 | 12 | -2 |
Tabela 15. Os melhores resultados de otimização do Expert Média Móvel LC para USDJPY no modo de deslocamento dinâmico
5.2. Análise de Otimização de Resultados do Expert que Negocia pelo Padrão "Pin Bar"
Vamos comparar os resultados da otimização de um Expert quando ele está a trabalhar em diferentes modos: com zero de deslocamento, com o deslocamento estático e com o deslocamento dinâmico (DSO e DSC). O teste será realizado para EURUSD, GBPUSD e USDJPY, sobre o período de 01/04/2014 - 25/10/2014. Período H1.
Parâmetros de entrada do Expert:
Parâmetro | Valor |
---|---|
Risco máximo em percentagem | 0.1 |
Fator de diminuição | 3.0 |
Sombra min de Pin bar, pontos | 40 |
OC max de Pin bar, pontos | 110 |
sombra de Pin bar para a razão min de OC | 1.4 |
SL, pontos (0 para OFF) | 150 |
TP, pontos (0 para OFF) | 300 |
Período base LC | 1 Minute |
LC mode ON | true |
Deslocamento LC | 0 |
Tabela 16. Parâmetros de entrada do Expert Pin Bar LC
Nós vamos otimizar os parâmetros que definem a forma do pin bar: comprimento do "nariz", razão entre o comprimento do "nariz" para o corpo da barra do meio e o tamanho máximo do corpo. Os níveis de Take Profit e Stop Loss também serão otimizados.
5.2.1. Otimização do Expert com o Modo de Deslocamento desativado
Parâmetros otimizados:
Parâmetro | Início | Passo | Parada |
---|---|---|---|
Sombra min de Pin bar, pontos | 100 | 20 | 400 |
OC max de Pin bar, pontos | 20 | 20 | 100 |
sombra de Pin bar para a razão min de OC | 1 | 0.2 | 3 |
SL, pontos (0 para OFF) | 150 | 50 | 500 |
TP, pontos (0 para OFF) | 150 | 50 | 500 |
Tabela 17. Parâmetros otimizados do Expert Pin Bar LC com o modo de deslocamento desabilitado
Gráfico que descreve a otimização do Expert no modo de deslocamento desativado, EURUSD:
Fig. 17. Otimização do Expert Pin Bar LC no modo de deslocamento zero, EURUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin bar | OC max de Pin bar | sombra de Pin bar para a razão min de OC | SL | TP |
---|---|---|---|---|---|---|---|---|
3504,59 | 504,59 | 9,82 | 33 | 100 | 60 | 1.8 | 450 | 500 |
3428,89 | 428,89 | 8,72 | 21 | 120 | 60 | 2.8 | 450 | 350 |
3392,37 | 392,37 | 9,94 | 30 | 100 | 60 | 2,6 | 450 | 250 |
3388,54 | 388,54 | 9,93 | 31 | 100 | 80 | 2,2 | 450 | 300 |
3311,84 | 311,84 | 6,84 | 13 | 140 | 60 | 2,2 | 300 | 450 |
Tabela 18. Os melhores resultados da otimização do Expert Pin Bar LC para EURUSD no modo de deslocamento zero
Gráfico que representa a otimização do Expert no modo de deslocamento zero, GBPUSD:
Fig. 18. Otimização do Expert Pin Bar LC no modo de deslocamento zero, GBPUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin Bar | OC max de Pin Bar | Sombra de Pin Bar para a razão min de OC | SL | TP |
---|---|---|---|---|---|---|---|---|
3187,13 | 187,13 | 11,10 | 13 | 160 | 60 | 2,6 | 500 | 350 |
3148,73 | 148,73 | 3,23 | 4 | 220 | 40 | 2,8 | 400 | 400 |
3142,67 | 142,67 | 11,27 | 17 | 160 | 100 | 1,8 | 500 | 350 |
3140,80 | 140,80 | 11,79 | 13 | 180 | 100 | 2 | 500 | 500 |
3094,20 | 94,20 | 1,62 | 1 | 260 | 60 | 1,6 | 500 | 400 |
Tabela 19. Os melhores resultados da otimização do Expert Pin Bar LC para GBPUSD no modo de deslocamento zero
Gráfico que representa a otimização do Expert com o modo de deslocamento desativado, USDJPY:
Fig. 19. Otimização do Expert Pin Bar LC no modo de deslocamento zero, USDJPY
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin bar | OC max de Pin bar | sombra de Pin bar para a razão min de OC | SL | TP |
---|---|---|---|---|---|---|---|---|
3531,99 | 531,99 | 9,00 | 6 | 160 | 60 | 2.2 | 450 | 500 |
3355,91 | 355,91 | 18,25 | 16 | 120 | 60 | 1,6 | 450 | 400 |
3241,93 | 241,93 | 9,11 | 4 | 160 | 40 | 2,8 | 450 | 500 |
3180,43 | 180,43 | 6,05 | 33 | 100 | 80 | 1,8 | 150 | 450 |
3152,97 | 152,97 | 3,14 | 6 | 160 | 80 | 2,8 | 150 | 500 |
Tabela 20. Os melhores resultados da otimização do Expert Pin Bar LC para USDJPY no modo de deslocamento zero
5.2.2. Otimização do Expert no modo de deslocamento estático
Parâmetros otimizados:
Parâmetro | Início | Passo | Parada |
---|---|---|---|
Sombra min de Pin bar, pontos | 100 | 20 | 400 |
OC max de Pin bar, pontos | 20 | 20 | 100 |
sombra de Pin bar para a razão min de OC | 1 | 0.2 | 3 |
SL, pontos (0 para OFF) | 150 | 50 | 500 |
TP, pontos (0 para OFF) | 150 | 50 | 500 |
Deslocamento LC | 1 | 1 | 59 |
Tabela 21. Parâmetros otimizados do Expert Pin Bar LC no modo de deslocamento estático
Gráfico que representa a otimização do Expert no modo de deslocamento estático, EURUSD:
Fig. 20. Otimização do Expert Pin Bar LC no modo de deslocamento estático, EURUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin bar | OC max de Pin bar | sombra de Pin bar para a razão min de OC | SL | TP | Deslocamento LC |
---|---|---|---|---|---|---|---|---|---|
4843,54 | 1843,54 | 10,14 | 19 | 120 | 80 | 1,6 | 500 | 500 | 23 |
4714,81 | 1714,81 | 10,99 | 28 | 100 | 100 | 1,6 | 500 | 500 | 23 |
4672,12 | 1672,12 | 10,16 | 18 | 120 | 80 | 1,8 | 500 | 500 | 23 |
4610,13 | 1610,13 | 9,43 | 19 | 120 | 80 | 1,6 | 450 | 450 | 23 |
4562,21 | 1562,21 | 13,94 | 27 | 100 | 100 | 1,6 | 500 | 400 | 25 |
Tabela 22. Os melhores resultados da otimização do Expert Pin Bar LC para EURUSD no modo de deslocamento estático
Gráfico que representa a otimização do Expert no modo de deslocamento estático, GBPUSD:
Fig. 21. Otimização do Expert Pin Bar LC no modo de deslocamento estático, GBPUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin bar | OC max de Pin bar | sombra de Pin bar para a razão min de OC | SL | TP | Deslocamento LC |
---|---|---|---|---|---|---|---|---|---|
4838,10 | 1838,10 | 5,60 | 34 | 100 | 40 | 2,4 | 450 | 500 | 24 |
4797,09 | 1797,09 | 5,43 | 35 | 100 | 40 | 2,6 | 400 | 500 | 24 |
4755,57 | 1755,57 | 7,36 | 42 | 100 | 100 | 2 | 400 | 500 | 24 |
4725,41 | 1725,41 | 8,35 | 45 | 100 | 80 | 1 | 400 | 500 | 24 |
4705,61 | 1705,61 | 8,32 | 41 | 100 | 100 | 2 | 450 | 500 | 24 |
Tabela 23. Os melhores resultados da otimização do Expert Pin Bar LC para GBPUSD no modo de deslocamento estático
Gráfico que representa a otimização do Expert no modo de deslocamento estático, USDJPY:
Fig. 22. Otimização do Expert Pin Bar LC no modo de deslocamento estático, USDJPY
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin Bar | OC max de Pin bar | sombra de Pin bar para a razão min de OC | SL | TP | Deslocamento LC |
---|---|---|---|---|---|---|---|---|---|
4108,83 | 1108,83 | 6,45 | 9 | 140 | 40 | 1,4 | 500 | 450 | 55 |
3966,74 | 966,74 | 7,88 | 12 | 140 | 60 | 2,8 | 450 | 500 | 45 |
3955,32 | 955,32 | 9,91 | 21 | 120 | 80 | 2 | 500 | 500 | 45 |
3953,80 | 953,80 | 6,13 | 10 | 140 | 60 | 2,8 | 450 | 450 | 47 |
3944,33 | 944,33 | 6,42 | 6 | 160 | 100 | 2,6 | 500 | 400 | 44 |
Tabela 24. Os melhores resultados da otimização do Expert Pin Bar LC para USDJPY no modo de deslocamento estático
5.2.3. Otimização do Expert no modo de deslocamento dinâmico
Parâmetros otimizados:
Parâmetro | Início | Passo | Parada |
---|---|---|---|
Sombra min de Pin bar, pontos | 100 | 20 | 400 |
OC max de Pin bar, pontos | 20 | 20 | 100 |
sombra de Pin bar para a razão min de OC | 1 | 0.2 | 3 |
SL, pontos (0 para OFF) | 150 | 50 | 500 |
TP, pontos (0 para OFF) | 150 | 50 | 500 |
Deslocamento LC | -2 | 1 | -1 |
Tabela 25. Parâmetros otimizados do Expert Pin Bar LC no modo de deslocamento dinâmico
Gráfico que representa a otimização do Expert no modo de deslocamento dinâmico, EURUSD:
Fig. 23. Otimização do Expert Pin Bar LC no modo de deslocamento dinâmico, EURUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin bar | OC max de Pin bar | sombra de Pin bar para a razão min de OC | SL | TP | Deslocamento LC |
---|---|---|---|---|---|---|---|---|---|
4185,65 | 1185,65 | 13,22 | 49 | 200 | 100 | 1,8 | 450 | 500 | -2 |
4011,80 | 1011,80 | 13,75 | 49 | 200 | 100 | 2 | 400 | 500 | -2 |
3989,28 | 989,28 | 12,01 | 76 | 140 | 20 | 1,2 | 350 | 200 | -1 |
3979,50 | 979,50 | 16,45 | 157 | 100 | 20 | 1 | 450 | 500 | -1 |
3957,25 | 957,25 | 16,68 | 162 | 100 | 20 | 1 | 400 | 500 | -1 |
Tabela 26. Os melhores resultados da otimização do Expert Pin Bar LC para EURUSD no modo de deslocamento estático
Gráfico que representa a otimização do Expert no modo de deslocamento dinâmico para GBPUSD:
Fig. 24. Otimização do Expert Pin Bar LC no modo de deslocamento dinâmico, GBPUSD
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin bar | OC max de Pin bar | sombra de Pin bar para a razão min de OC | SL | TP | Deslocamento LC |
---|---|---|---|---|---|---|---|---|---|
4906,84 | 1906,84 | 10,10 | 179 | 120 | 40 | 1,8 | 500 | 500 | -2 |
4316,46 | 1316,46 | 10,71 | 151 | 120 | 20 | 2,4 | 450 | 500 | -1 |
4250,96 | 1250,96 | 12,40 | 174 | 120 | 40 | 1,8 | 500 | 500 | -1 |
4040,82 | 1040,82 | 12,40 | 194 | 120 | 60 | 2 | 500 | 200 | -2 |
4032,85 | 1032,85 | 11,70 | 139 | 140 | 40 | 2 | 400 | 200 | -1 |
Tabela 27. Os melhores resultados da otimização do Expert Pin Bar LC para GBPUSD no modo de deslocamento dinâmico
Gráfico que representa a otimização do Expert no modo de deslocamento dinâmico, USDJPY:
Fig. 25. Otimização do Expert Pin Bar LC no modo de deslocamento dinâmico, USDJPY
Os melhores resultados:
Resultado | Lucro | Rebaixamento % | Número de negócios | Sombra min de Pin bar | OC max de Pin bar | sombra de Pin bar para a razão min de OC | SL | TP | Deslocamento LC |
---|---|---|---|---|---|---|---|---|---|
5472,67 | 2472,67 | 13,01 | 138 | 100 | 20 | 2,4 | 500 | 500 | -1 |
4319,84 | 1319,84 | 15,87 | 146 | 100 | 20 | 2,2 | 400 | 500 | -1 |
4259,54 | 1259,54 | 19,71 | 137 | 100 | 20 | 2,4 | 500 | 500 | -2 |
4197,57 | 1197,57 | 15,98 | 152 | 100 | 20 | 1 | 350 | 500 | -1 |
3908,19 | 908,19 | 16,79 | 110 | 120 | 40 | 3 | 400 | 400 | -1 |
Tabela 28. Os melhores resultados da otimização do Expert Pin Bar LC para USDJPY no modo de deslocamento dinâmico
6. Comparação dos resultados da otimização
Para fazer uma tabela de comparação, vamos selecionar os valores máximos de lucro, rebaixamento e o número de negócios de cada tabela dos melhores resultados. EM seguida, devemos escrever a mudança (em percentagem) ou este valor em relação ao mesmo valor no modo de deslocamento zero ao valor recebido nos modos de deslocamento estáticos ou dinâmicos.
6.1. Expert que Negocia pela Média Móvel
Lucro:
Sem deslocamento | Estático deslocamento | Dinâmico deslocamento | |
---|---|---|---|
EURUSD | 796,43 | 1385,06 (+74%) | 392,64 (-51%) |
GBPUSD | 1025,75 | 1571,07 (+53%) | 2377,58 (+132%) |
USDJPY | 2801,63 | 3051,39 (+9%) | 3500,19 (+25%) |
Tabela 29. A comparação entre os valores máximos de lucro a partir da tabela dos melhores resultados de otimização do Expert Média Móvel LC
Rebaixamento:
Sem deslocamento | Estático deslocamento | Dinâmico deslocamento | |
---|---|---|---|
EURUSD | 17,7 | 21,52 (+22%) | 27,95 (+58%) |
GBPUSD | 18,16 | 15,46 (-15%) | 24,55 (+35%) |
USDJPY | 17,14 | 15,94 (-7%) | 19,91 (+16%) |
Tabela 30. A comparação entre os valores máximos de rebaixamento da tabela de melhores resultados de otimização do Expert Média Móvel LC
Número de negócios:
Sem deslocamento | Estático deslocamento | Dinâmico deslocamento | |
---|---|---|---|
EURUSD | 111 | 122 (+10%) | 594 (+435%) |
GBPUSD | 137 | 107 (-22%) | 574 (+319%) |
USDJPY | 61 | 71 (+16%) | 301 (+393%) |
Tabela 31. A comparação dos valores máximos do número de negócios a partir da tabela de melhores resultados de otimização do Expert Média Móvel LC
A primeira coisa que chama a atenção de imediato é um aumento significativo dos pontos de entrada no modo de deslocamento dinâmico. Ao mesmo tempo, no entanto, o rebaixamento aumentou de forma significativa e o lucro diminuiu de duas vezes para EURUSD.
O modo de deslocamento estático é mais rentável para este Expert Advisor. Aqui podemos ver a diminuição do rebaixamento para GBPUSD e USDJPY e um aumento significativo no lucro para EURUSD e GBPUSD.
6.2. Expert que Negocia pelo Padrão "Pin Bar"
Lucro:
Sem deslocamento | Estático deslocamento | Dinâmico deslocamento | |
---|---|---|---|
EURUSD | 504,59 | 1843,54 (+265%) | 1185,65 (+135%) |
GBPUSD | 187,13 | 1838,10 (+882%) | 1906,84 (+919%) |
USDJPY | 531,99 | 1108,83 (+108%) | 2472,67 (+365%) |
Tabela 32. A comparação dos valores máximos de lucro das tabelas dos melhores resultados de otimização do Expert Pin Bar LC
Rebaixamento:
Sem deslocamento | Estático deslocamento | Dinâmico deslocamento | |
---|---|---|---|
EURUSD | 9,94 | 13,94 (+40%) | 16,68 (+68%) |
GBPUSD | 11,79 | 8,35 (-29%) | 12,4 (+5%) |
USDJPY | 18,25 | 9,91 (-46%) | 19,71 (+8%) |
Tabela 33. A comparação entre os valores máximos de rebaixamento da tabela de melhores resultados de otimização do Expert Pin Bar LC
Número de negócios:
Sem deslocamento | Estático deslocamento | Dinâmico deslocamento | |
---|---|---|---|
EURUSD | 33 | 28 (-15%) | 162 (+391%) |
GBPUSD | 17 | 45 (+165%) | 194 (+1041%) |
USDJPY | 33 | 21 (-36%) | 152 (+361%) |
Tabela 34. A comparação dos valores máximos do número de negócios a partir da tabela de melhores resultados de otimização do Expert Pin Bar LC
Aqui também vemos um aumento substancial do número de negócios no modo de deslocamento dinâmico. Neste caso, porém, um aumento significativo do rebaixamento, como no caso semelhante com o Expert Média Móvel LC, foi apenas para EURUSD. Para outros pares o rebaixamento teve um aumento insignificante, por cerca de 5-8 por cento.
No modo de deslocamento estático, a otimização mostrou um lucro limitado para GBPUSD e EURUSD. No entanto, podemos ver uma diminuição significativa do rebaixamento para os mesmos pares e seu aumento para EURUSD. O modo de deslocamento estático parece menos rentável para este Expert Advisor.
Conclusão
Neste artigo, nós consideramos a plotagem dos princípios do "Gráfico líquido" e comparamos a influência de seus modos de operação no resultado da otimização do Expert com base em estratégias com e sem indicadores.
Daí as seguintes conclusões:
- Para os especialistas, utilizando estratégias com indicadores (por exemplo, através da negociação da Média Móvel), o modo de deslocamento estático é mais adequado. Ele garante uma entrada mais precisa ao mercado, o que resulta em uma diminuição de rebaixamento e aumento do lucro.
- O modo de deslocamento dinâmico é melhor para o Expert que negocia através de padrões. Este modo aumenta o número de pontos de entrada, embora o rebaixamento aumenta ao mesmo tempo.
- O modo de deslocamento dinâmico, juntamente com a gestão do dinheiro bem organizada pode gerar resultados impressionantes.
- Embora pareça muito promissor para as estratégias com indicadores, o modo de deslocamento estático tem uma desvantagem significativa. O valor do desvio proporcionando o melhor resultado é outra variável na lista de parâmetros de entrada que tem de ser acertado.
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1208
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso