Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 874

 

Olá, poderia aconselhar, por favor, no código abaixo sem o bloco de laço (que vem depois do CopyByffer), o indicador funciona normalmente, mas se incluir um ciclo comparando o preço de uma vela com o preço de uma das barras, as próprias barras após o início não são exibidas, qual poderá ser o problema?

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  Olive
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_type3   DRAW_LINE
#property indicator_color3  Olive

input int peroid = 20;        // период полос 1
input int bands_shift= 0;           // смещение полос 1 
input double deviation = 2.3;   // отклонение полос 1

input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE; // тип цены 

double      Base[];     // массив для BASE_LINE индикатора iBands
double      Upper[];    // массив для UPPER_BAND индикатора iBands
double      Lower[];    // массив для LOWER_BAND индикатора iBands

int iBands1_handle; //Указатель на первый индикатор 
int iBands2_handle; //Указатель на первый индикатор 

int g_i_Window;


int OnInit()
  {
   g_i_Window=ChartWindowFind();
   SetIndexBuffer(0,Base,INDICATOR_DATA);
   SetIndexBuffer(1,Upper,INDICATOR_DATA);
   SetIndexBuffer(2,Lower,INDICATOR_DATA);
           
   iBands1_handle=iBands(NULL,PERIOD_CURRENT,peroid,bands_shift,deviation,applied_price);

   if(iBands1_handle==INVALID_HANDLE){
         Alert("Неудалось загрузить индикатор, повторите попытку");
         return(-1);
         }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[])         // Spread 
  {
   int i;
   int shift = 0;
   int shift1;
   int shift2;
   int shift3;
   string alert;
   
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;
      shift1 = shift;
      shift2 = shift + 1;
      shift3 = shift + 2;   
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];;
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
   
   i = (prev_calculated==0)?1: prev_calculated;
   i = (prev_calculated==rates_total)?rates_total-1: i;
   
   CopyBuffer(iBands1_handle,0,0,rates_total-1,Base);
   CopyBuffer(iBands1_handle,1,0,rates_total-1,Upper);
   CopyBuffer(iBands1_handle,2,0,rates_total-1,Lower);

   for (i = i; i < rates_total; i++)
   {
    if(H > L && O > Lower[i])
    {
     int time_waiting = (int)TimeLocal() + 1;
     while(TimeLocal() < time_waiting){}
     Comment("True");
     return(0);
    }
     else Comment("False"); 
   }
   
   
   if (prev_calculated==0) ChartRedraw();   
   return(rates_total);
  }

Resultado:


 
Aleksey Vyazmikin:

Não pode.

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

Alexey Viktorov, 2018.05.30 15:53

Bem, não de forma tão dinâmica, mas uma vez através da reinicialização pode. Eu fiz.


 
Alexey Viktorov:

Se puder elaborar, por favor descreva

 
Andrii Djola:

se puder ser mais específico

Quanto mais pormenorizado?

Numa situação precisava de fazer barras ou candelabros coloridos. Utilizam 4 amortecedores de valor e 1 amortecedor de cor. A outra, precisava de exibir uma linha colorida, onde 1 valor de tampão e 1 cor de tampão.

A chamada e a alteração das propriedades do indicador provoca a inicialização do indicador. Consequentemente, se as definições contiverem barras ou castiçais, então uma opção de inicialização. Se a linha, a outra opção de inicialização.

É impossível alterar o número de amortecedores no meio do indicador, que é o que Alexey Vyazmikin disse sem estar consciente das outras opções.

 
Alexey Viktorov:

Quantos mais detalhes?

Numa situação precisava de fazer barras ou candelabros coloridos. Utilizam 4 amortecedores de valor e 1 amortecedor de cor. Outra, precisava de mostrar uma linha colorida, onde 1 tampão de valor e 1 tampão de cor.

A chamada e a alteração das propriedades do indicador provoca a inicialização do indicador. Consequentemente, se as definições contiverem barras ou castiçais, então uma opção de inicialização. Se uma linha, então outra opção de inicialização.

É impossível alterar o número de tampões no meio do indicador, que é o que Alexey Vyazmikin disse, sem estar ciente de outras opções.

Se decidir escrever o meu apelido em russo, soa como Vyazmikin.

Quanto às minhas suspeitas - penso que a resposta está correcta para a pergunta colocada. Sem uma explicação das necessidades, não vale a pena dizer o contrário. A reinicialização é um reinício do programa, é claro que se pode alterar qualquer coisa nas definições.

 
Aleksey Vyazmikin:

Se optar por escrever o meu apelido em russo, soa como Vyazmikin.

Quanto às minhas suspeitas - creio que a resposta à pergunta colocada é correcta. Sem uma explicação das necessidades, não vale a pena dizer o contrário. A reinicialização é um reinício do programa, é claro que se pode alterar qualquer coisa nas definições.

Será que a falta de um sinal suave ofende tanto?

Se falei de incorrecção, na minha opinião enfatizei exactamente a correcção da resposta.

 
alph:
Pode dizer-me se esta é uma figura de teste realista? E é bom ou mau resultado durante um ano com um depósito de 3000$?
real.
 
Alexey Viktorov:

Será que a falta de um sinal suave ofende assim tanto?

Sou movido pelo esclarecimento, não pela ofensa. Porque ficaria ofendido, sabias soletrar e querias ofender-me? Eu nem sequer considerei essa opção, foi em vão?

 
Aleksey Vyazmikin:

Sou motivado pelo esclarecimento, não pelo ressentimento. Por que deveria ofender-me, sabiam como escrever correctamente e queriam ofender-me? Eu nem sequer considerei essa opção, foi em vão?

Paz, amizade, pastilha elástica.

 
Alexey Viktorov:

Paz, amizade, pastilha elástica.

E os meios-litros?