Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 969

 
Vladimir Baskakov:

Obrigado, funciona, apenas uma condição é cumprida:

E eu preciso

Não abre uma posição por algum motivo.

int barfrup_1 = GetLastFractals(1,MODE_UPPER);
int barfrup_2 = GetLastFractals(barfrup_1+1,MODE_UPPER);
int barfrdn_1 = GetLastFractals(1,MODE_LOWER);
int barfrdn_2 = GetLastFractals(barfrdn_1+1,MODE_LOWER);

if(High[barfrup_1] < High[barfrup_2] && Low[barfrdn_1] < Low[barfrdn_2] )
if(High[barfrup_1] < High[barfrup_2] && Low[barfrdn_1] > Low[barfrdn_2] )
 
Igor Makanu:

Funciona, mas abre posições, não por condição, onde quer que queira, tudo bem

 
Vladimir Baskakov:

Funciona, mas abre posições, não por condição, onde quiser, ok

não pode ser assim, meu código é simples, como ZigZag, fractal tem valores somente nas barras com setas no laço, procure por valores indicadores antes que a seta apareça e saia do laço, retorne o número da barra fractal

Acabei de fazer um Expert Advisor por fractal - o código é verificado e, durante o teste, descobri que o fractal na barra número 1 pode ter um desenho a mais - ligue o modo de visualização do testador e adicione um indicador para fractal

 
Igor Makanu:

não pode ser, meu código é simples, o fractal, como ZigZag, tem valores somente nas barras com setas, no laço, passar pelos valores indicadores até que a seta apareça e sair do laço, retornar o número de barras em que o fractal está

Acabei de fazer um Expert Advisor por fractal - o código é verificado e, durante o teste, descobri que o fractal na barra número 1 pode ter um desenho a mais - ligue o modo de visualização do testador e adicione um indicador para fractal

Talvez o resultado deva ser verificado em 0 ou valor vazio
 
Aleksei Beliakov:
Talvez o resultado deva ser verificado para valor 0 ou vazio

há 0 em valores vazios, bem, não é a melhor maneira de comparar com _Point

funciona, não quero provar, mas os valores dos indicadores fractais devem funcionar com esta parte do código

SZY: mais uma vez, por alguma razão, discuto meu código.... quanto mais o código funciona, não vejo o código dos outros participantes, não entendo quem precisa dele no final? ))))


PS:Verificado, porque sei que a pergunta não vai descansar, tudo funciona, o código é rápido:

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   SetIndexArrow(0,SYMBOL_ARROWUP);
   SetIndexArrow(1,SYMBOL_ARROWDOWN);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--
   static int limit=0;   
   if(limit>=10) return(rates_total);
   int b_up = 0, b_dn = 0;
   while(limit<=10)
     {
      b_up = GetLastFractals(b_up,MODE_UPPER);
      Label1Buffer[b_up] = high[b_up];
      b_up++;
      b_dn = GetLastFractals(b_dn,MODE_LOWER);
      Label2Buffer[b_dn] = low[b_dn];
      b_dn++;
      limit++;
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//_______________________________________________________________________
int GetLastFractals(int bar,int mode) // bar - с какого бара начинать поиск, mode = MODE_UPPER или MODE_LOWER , результат № бара где найден фрактал
  {
   int i=bar; 
   while(i<Bars && iFractals(NULL,0,mode,i)<_Point) i++;
   return(i);
  }
//_______________________________________________________________________

resultado


 
Artyom Trishkin:

ArraySetAsSeries(true) para amortecedores indicadores.

Fez. Eu fiz de acordo com o manual
 
Igor Makanu:

não pode ser, meu código é simples, o fractal, como ZigZag, tem valores somente nas barras com setas, no laço, passar pelos valores indicadores até que a seta apareça e sair do laço, retornar o número de barras em que o fractal está

Acabei de fazer um Expert Advisor por fractal - o código é verificado e, durante o teste, descobri que fractal na barra número 1 pode ter um desenho a mais - ligue o modo de visualização do testador e adicione um indicador para fractal,

Não, minha posição se abre. Como deveria, na terceira barra, um fractal. Mas, além disso, é pior. Pela minha condição (fr1_up<fr_2 && fr1_down>fr2_down) ele não encontra. A essência é a compressão dos preços, que encontramos por dois fractais
 

Eu acho que consegui!

999

Arquivos anexados:
IgorM.mq5  17 kb
 
Aleksandr Klapatyuk:

Eu acho que consegui!

O que é isso?
 
Vladimir Baskakov:
Qual deles?

nome do objeto se move sobre iFractals