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

 

Boa noite, caros programadores!

Ajudem-me a resolver um problema simples. Há um código da MQL4. Quero adaptá-lo ao 5. Ou seja, para funcionar de forma semelhante em MQL5.


//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=High[0];
   double Lowest=Low[0];
 
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   for(int i=0; i<=Window; i++) {
   if(Low[i]<Lowest) Lowest=Low[i];
   if(High[i]>Highest) Highest=High[i];  
}
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}



Minha variante obviamente não passa, por algum motivo há muitos erros):

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
 
void OnStart()
{

double   o = iOpen(NULL, PERIOD_CURRENT, 0);
double   h = iHigh(NULL, PERIOD_CURRENT, 0);
double   l = iLow(NULL, PERIOD_CURRENT, 0);
double   c = iClose(NULL, PERIOD_CURRENT, 0);

double Highest=h;
double Lowest=l;

   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
     
   for(int i=0; i<=Window; i++) 
{
   if  ( l[i] < Lowest ) 
   Lowest=[i];
  

   if  ( h[i] > Highest ) 
   Highest=[i];  
  
}
 
   //Выводим результат.
   Print("Самая высокая цена ",Highest,
         " - Самая низкая цена ",Lowest);
}
 
 
Alexey Belyakov #:

Boa noite, queridos programadores!

Ajudem-me a resolver um problema simples. Há um código da MQL4. Quero adaptá-lo ao 5. Ou seja, ele deve funcionar de forma semelhante na MQL5.


Procure na ajuda

iHigh

e funções semelhantes

Se não funcionar, é porque há um erro no loop.

e não é possível ver a qual variável você está adicionando dados

 
lynxntech #:

procure na ajuda

e funções semelhantes

se não funcionar, há um erro no loop

e não é possível ver a qual variável você está adicionando dados

O valor mais alto/mais baixo deve ser exibido.

Dei uma olhada nisso:

int val_index=iLowest(NULL,0,MODE_CLOSE,10,1);

Muito próximo, mas ainda não.

Bem, ele mostra o NÚMERO dos últimos 10 (a partir do primeiro "1") candlestick com a maior baixa. Mas eu preciso do valor do preço, não do número da vela.

 

Em geral, é necessário não olhar para trás, mas para frente.

Por exemplo: procure o "mínimo" desde o início do candle anterior (que é numerado como "1") durante os próximos 100 candles.

 
lynxntech #:

tudo pode ser feito, a pergunta era para aqueles que mediam o trabalho real e, melhor ainda, para os desenvolvedores, que sabem o que eles têm em seus planos

Não querofazer experimentos, há muitas outras tarefas.

Certo. Não é um negócio real em .........

 
Alexey Viktorov #:

É isso mesmo. Não é assunto do rei em .........

Talvez devêssemos fechar o tópico Perguntas de iniciantes? Alexei, se você não quiser ajudar, não participe, pois há muitas reclamações suas.

Eu estava interessado em uma resposta profissional para ter uma ideia de como a plataforma funciona.

 
Alexey Belyakov #:

Boa noite, queridos programadores!

Ajudem-me a resolver um problema simples. Há um código da MQL4. Quero adaptá-lo ao 5. Ou seja, ele deve funcionar de forma semelhante na MQL5.




Minha variante obviamente não funciona, por algum motivo há muitos erros):

Aparentemente, você não tem nenhuma familiaridade com programação. É por isso que, seja qual for o conselho que lhe for dado, você não terá sucesso até agora .

Mas, mesmo assim... tente entender a função

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   int              start_pos,        // откуда начнем 
   int              count,            // сколько копируем
   double           high_array[]      // массив для копирования максимальных цен
   );

e a função de trabalhar com matrizes

int  ArrayMaximum(
   const void&   array[],             // массив для поиска
   int           start=0,             // с какого индекса начинаем поиск
   int           count=WHOLE_ARRAY    // количество проверяемых
   );

Há outras variantes para resolver esse problema.

 
Alexey Belyakov #:

Boa noite, queridos programadores!

Ajudem-me a resolver um problema simples. Há um código da MQL4. Quero adaptá-lo ao 5. Ou seja, ele deve funcionar de forma semelhante na MQL5.




Minha variante obviamente não funciona, por algum motivo há muitos erros):

CopyRates() em vez de um monte de indicadores e as edições de código serão mínimas, o código permanecerá compacto e legível.

//Введем внешнюю переменную, чтобы иметь возможность изменить количество сканируемых свечей.
extern int Window=30;
 
void OnStart()
{
   //Вводим переменные.
   double Highest=DBL_MIN;// 
   double Lowest=DBL_MAX; // 
   MqlRates rates[];
   //Сканируем 30 свечей и обновляем значения самых высоких и самых низких цен.
   if (CopyRates(_Symbol,_Period,30,rates)!=30) {
      Alert("copyRates failed");
      return;
   }
   for(int i=0; i<=Window; i++) {
      if(rates[i].low<Lowest) Lowest=rates[i].low;
      if(rates[i].high>Highest) Highest=rates[i].high;  
   }
 
   //Выводим результат.
   Alert("Самая высокая цена ",Highest," - Самая низкая цена ",Lowest);
}

Na verdade, você também deve adicionar uma verificação para aspas curvas

 
Maxim Kuznetsov #:

CopyRates() em vez de um monte de indicadores, e as edições de código serão mínimas, o código permanecerá compacto e legível.

Na verdade, você também deve adicionar uma verificação para aspas curvas

Maxim, o CopyRates não é apresentado como tendo todos os recursos de um símbolo?

mais barato, há funções individuais

 
lynxntech #:

Maxim, o CopyRates não é apresentado como tendo todas as características do personagem?

mais baratas, há características individuais

1) de acordo com as palavras dos desenvolvedores, a cópia virtual, ou seja, se possível, os dados não são transferidos, as referências internas são transferidas 2) mesmo com a cópia completa, ele é mais rápido do que o CopyBuffer para iHigh, iLow separadamente (1 chamada em vez de 2, que ainda irão para as mesmas estruturas de terminal).

E, finalmente, o principal: ao fazer a portabilidade, é muito importante que o código seja o mais semelhante possível ao original, mesmo visualmente. Você deve ter certeza absoluta de que ele (o código) faz exatamente a mesma coisa que o original. E pequenas otimizações são feitas depois, e somente quando for realmente essencial.

Razão: