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

 

Pessoal, por favor me ajudem no código para mudar a TF d1/semana para qualquer outra.

Eu sei como mudá-lo para H1 ou minutos.

Interessado em como mudar para m30, m15, m5?

//|                                               For__red_r2005.mq4 |
//|                                       Copyright © 2010, PapaYozh |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, PapaYozh"
#property link      "*"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Coral
#property indicator_color2 CornflowerBlue
#property indicator_width1 2
#property indicator_width2 2

// ---- buffers ----
double BuffD[];
double BuffM[];
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,BuffD);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,EMPTY);

   SetIndexBuffer(1,BuffM);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,EMPTY);
   
   return(0);
} // init()
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
} // deinit()
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
int start()
{
   int    shift;

   shift = Bars - 1 - IndicatorCounted();
   for ( ; shift>0 ; shift-- )
   {
      if ( TimeDayOfYear(Time[shift]) != TimeDayOfYear(Time[shift-1]) )
      {
         BuffD[shift]   = Close[shift];
         if ( TimeDayOfWeek(Time[shift-1]) == 1 )
            BuffM[shift]   = Close[shift];
         else
            BuffM[shift]   = EMPTY_VALUE;
      }
      else
      {
         BuffD[shift]   = EMPTY_VALUE;
         BuffM[shift]   = EMPTY_VALUE;
      }
   }
   return(0);
} // start()
//+------------------------------------------------------------------+
 
Necessidade de pausar o indicador por um tempo, mas a função Sleep(), como indicado na ajuda, não pode ser chamada a partir do indicador personalizado... Existe outra forma?
 
Yevhenii Levchenko:
Preciso parar o indicador por algum tempo, mas a função Sleep(), como mencionado na ajuda, não pode ser chamada a partir do indicador personalizado Existem outras maneiras?

saída por condição na OnCalculate() sem calcular valores indicadores - o mais fácil é o contador de carrapatos, um pouco mais complicado é usar um temporizador, ele funciona em indicadores

 
Igor Makanu:

saída por condição na OnCalculate() sem calcular valores indicadores - o mais fácil é o contador de carrapatos, um pouco mais complicado é usar um temporizador, ele funciona em indicadores

Obrigado!

Eu o fiz com temporizador. Esta opção me pareceu mais fácil...

 
Yevhenii Levchenko:

Obrigado!

Fê-lo com um temporizador. Esta opção me pareceu mais fácil...

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 TickCount = 0;
   TickCount--;
   if(TickCount>0) return(rates_total);
   TickCount=10;
 
Igor Makanu:

Tinha esquecido completamente as variáveis estáticas... Obrigado :)

E se você declarar uma variável ordinária como uma variável global, ela será de fato a mesma que uma variável estática em um certo sentido? No sentido, estará disponível para mudar de todos os lugares do programa?

 

Olá.

Você pode me dizer se é possível passar uma matriz dinâmica de tipo de estrutura por referência a uma função?

Por exemplo, para passar a matriz structure_name_array[] ao Func() para processá-la e preenchê-la lá:

struct StructName {int x;
                   int y;} struct_name_array[];

void Func (int &x[],
           int &y[])
        {
        }

Como a transferência é tratada exatamente, se possível? Como são formatados os parâmetros das funções? Parece que não posso usar os guias C++.

Obrigado.

 
Mikhail Sobolev:

Por exemplo, passe um array structure_name_array[] ao Func() para ser processado e preenchido lá:

//+------------------------------------------------------------------+
struct StructName
  {
   int               x;
   int               y;
  }
struct_name_array[];
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(struct_name_array,5);
   for(int i=0;i<5;i++)
     {
      struct_name_array[i].x = i;
      struct_name_array[i].y = i*100;
     }
   Func(struct_name_array);
   for(int i=0;i<5;i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,struct_name_array[i].x,i,struct_name_array[i].y);
     }
  }
//+------------------------------------------------------------------+
void Func(StructName &s[])
  {
   for(int i=0;i<ArraySize(s);i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,s[i].x,i,s[i].y);
      s[i].x*=33;
      s[i].y*=12;
     }
  }
//+------------------------------------------------------------------+
 

Olá!

Eu percebo que já aborreci muitas pessoas aqui com minhas perguntas estúpidas, portanto, por favor, seja indulgente com o seguinte e ainda explique o que está errado aqui:

        if((op1-lo1)>50 && (cl1-lo1)<10)
        {  Alert("VertLine");
        string obj_name="VertLine";
        datetime time=Time[0];
        color col = clrGreen; 
        ObjectCreate(0,obj_name,OBJ_VLINE,0,time,0,0,0);
        ObjectSetInteger(0,obj_name,OBJPROP_COLOR,col);
        }

O Alerta é exibido, mas não há linha vertical. Qual é a razão?

 
novichok2018:

Olá!

Percebo que já aborreci muitas pessoas aqui com minhas perguntas estúpidas, portanto, por favor, seja indulgente com o seguinte e ainda explique o que está errado aqui:

O alerta é emitido, mas não há linha vertical. Qual é a razão?

Eu já entendi a razão, mesmo a própria referência ao fórum. Acho que entendi que eu já havia traçado uma linha. A fim de traçar outras linhas, tenho que apagar esta.