Fora de alcance em Necessidade de ajuda - página 7

 
Valeriy Yastremskiy:

Os extremos diários, e o que você está encontrando são essencialmente extremos, os baixos (ou altos) têm distâncias bastante longas em relação ao preço atual. A diferença entre o mínimo e o máximo de 132 dias na UE é de mais de 12300 pips. Preço a partir do mínimo próximo de 2000, a partir do máximo de 800.

Eu também não entendo.

Desculpe, vou tentar explicar amanhã cansado hoje

 
MakarFX:

AUDUSD não é assim para mim

ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

O que ele copia e volta para onde?

 
Алексей Тарабанов:

O que está sendo copiado para onde e para quem?

Alexei Tarabanov:

Para onde ele copia e volta?

de chamar esta função:

intArrayCopyRates(
MqlRates&rate_array[],// array of MqlRates passed by reference
stringsymbol=NULL,// a ferramenta
intprazo=0// prazo
);

Copia os dados das barras do gráfico especificado em uma matriz bidimensional do formulário Double RateInfo[][6] e retorna o número de barras copiadas.

intArrayCopyRates(
void&dest_array[][],// array passed by reference
stringsymbol=NULL,// ferramenta
intprazo=0// prazo
);

Parâmetros

ArrayCopyRates

Ao utilizar a segunda forma de chamada, os dados são na verdade copiados em array dest_array[][], o array em si é automaticamente realocado para corresponder ao tamanho do período (mesmo que o array tenha sido declarado estático).

A primeira dimensão da matriz contém o número de barras. A segunda dimensão tem 6 elementos com os valores:

0 - tempo (tempo),
1 - preço aberto (aberto),
2 - preço mais baixo (baixo),
3 - preço mais alto (alto),
4 - preço fechado (fechado),

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
Dark Kchlyzov:
de chamar esta função:

intArrayCopyRates(
MqlRates&rate_array[],// array of MqlRates passed by reference
stringsymbol=NULL,// a ferramenta
intprazo=0// prazo
);

Copia os dados das barras do gráfico especificado em uma matriz bidimensional do formulário Double RateInfo[][6] e retorna o número de barras copiadas.

intArrayCopyRates(
void&dest_array[][],// array passed by reference
stringsymbol=NULL,// ferramenta
intprazo=0// prazo
);

Parâmetros

ArrayCopyRates

Ao utilizar a segunda forma de chamada, os dados são na verdade copiados em array dest_array[][], o array em si é automaticamente realocado para corresponder ao tamanho do período (mesmo que o array tenha sido declarado estático).

A primeira dimensão da matriz contém o número de barras. A segunda dimensão tem 6 elementos com os valores:

0 - tempo (tempo),
1 - preço aberto (aberto),
2 - preço mais baixo (baixo),
3 - preço mais alto (alto),
4 - preço fechado (fechado),

E onde o valor retornado do tipo int-type é salvo? Você passou todos os dados para a função, mas não conseguiu nada com isso.

 
Алексей Тарабанов:

Onde é salvo o valor de retorno do tipo int? Você passou todos os dados para a função, mas não tirou nada de lá.

Min_D_Level = iLow(_Symbol,PERIOD_D1,i); break;

Parece estar armazenado aqui

nível duplo Min_D_Level ; // nível D mínimo mínimo

ou eu não entendo algo?

E onde o valor retornado do tipo int é salvo?

???

Eu estou realmente fazendo um brainstorming.

É possível fazê-lo de uma maneira mais simples?

Como você (você) cometeu um erro aqui, a maneira correta de fazer isso seria este exemplo de código, etc.

 

Já faz um tempo que estou aqui sentado:

#property version   "1.00"
#property strict

//символ и таймфрейм текущего графика
string symbol;
ENUM_TIMEFRAMES frame;
datetime time;
   

struct BarData
   {
   struct Elem
      {
      int      number;     //порядковый номер периода (дня, месяца или года)
      double   high;       //максимум периода
      double   low;        //минимум периода
      datetime time_high;  //время максимума
      datetime time_low;   //время минимума
      } Arr[];             //массив периода
   int index;              //текущий индекс массива
   double   max;           //последнее максимальное значение периода
   double   min;           //последнее минимальное значение периода
   datetime time_max;      //время максимума
   datetime time_min;      //время минимума

   //при создании структуры указываем, что массив пустой
   BarData(){index=-1;}    
   
   //функция записывает текущие экстремумы
   void WriteBar(int eNumber, string eSymbol, ENUM_TIMEFRAMES eFrame, datetime eTime)
      {
      int eShift=iBarShift(eSymbol,eFrame,eTime);
      double eHigh=iHigh(eSymbol,eFrame,eShift);
      double eLow=iLow(eSymbol,eFrame,eShift);
      //если элементов ещё нет или период сменился
      if(index<0 || eNumber!=Arr[index].number)
         {
         ArrayResize(Arr,++index+1);
         Arr[index].number=eNumber;
         Arr[index].high=eHigh;
         Arr[index].low=eLow;
         Arr[index].time_high=eTime;
         Arr[index].time_low=eTime;
         }
      //если произошло обновление текущего максимума
      if(eHigh-Arr[index].high>0)
         {
         Arr[index].high=eHigh;
         Arr[index].time_high=eTime;
         }
      //если произошло обновление текущего минимума
      if(Arr[index].low-eLow>0)
         {
         Arr[index].low=eLow;
         Arr[index].time_low=eTime;
         }
      //если произошло обновление предыдущего максимума
      if(eHigh-max>0)
         {
         for(int i=index+1; i>=0; i--)
            {
            if(Arr[index].high-eHigh>0)
               {
               max=Arr[index].high;
               time_max=Arr[index].time_high;
               break;
               }
            }
         }
      //если произошло обновление предыдущего минимума
      if(min-eLow>0)
         {
         for(int i=index+1; i>=0; i--)
            {
            if(eLow-Arr[index].low>0)
               {
               min=Arr[index].low;
               time_min=Arr[index].time_low;
               break;
               }
            }
         }
      }
   } day, month, year;

int OnInit()
   {
   symbol=Symbol();
   frame=(ENUM_TIMEFRAMES)Period();
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   //текущее время закрытого бара
   time=iTime(symbol,frame,1);
   
   MqlDateTime date; 
   TimeToStruct(time,date);
   
   //делаем записи каждого периода
   day.WriteBar(date.day,symbol,frame,time);
   month.WriteBar(date.mon,symbol,frame,time);
   year.WriteBar(date.year,symbol,frame,time);
   
   //теперь имеем значения   
   Comment(TimeToString(day.time_max)+" : "+DoubleToString(day.max)+" : "+DoubleToString(day.Arr[day.index].high)+"\n"+TimeToString(day.time_min)+" : "+DoubleToString(day.Arr[day.index].low)+" : "+DoubleToString(day.min));
   }
Devemos tentar evitar ciclos desnecessários. Temos muitas citações chegando, e você tem que fazer as entradas certas na hora certa, para que não tenha que escavar a história e desperdiçar recursos do computador.
 
Dark Kchlyzov:

Mais ou menos assim

nível duplo Min_D_Level ; // nível D do Min D mais próximo

Ou está me faltando algo?

Sim, você não entendeu nada. Deve ser assim:

Количество_баров=ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

E então...

 
Алексей Тарабанов:

Sim, há algo que você não entende. É assim que tem que ser:

E então...

Muito obrigado!

 
Dark Kchlyzov:

Muito obrigado por isso também!!!

Seja muito bem-vindo.

 

3.47 Vou para a cama.

Eu vou digerir tudo amanhã e se eu tiver alguma pergunta, eu avisarei você!

Muito obrigado a todos!!!

Razão: