Perguntas de um "boneco" - página 44

 

Alex, como posso comparar m_rates[1].low com m_rates[0].close?

m_rates[1].low=m_rates[0].close será correcto e em geral m_rates[0].close é o último preço do bar que ainda não está fechado?

e em geral, qual é a forma correcta de lidar com a última barra sem utilizar indicadores?(CopyRates, CopyHigh)

 
Makser:

Alex, como posso comparar m_rates[1].low com m_rates[0].close?

m_rates[1].low=m_rates[0].close será correcto e em geral, m_rates[0].close é o último preço do bar que ainda não está fechado?

e em geral, qual é a forma correcta de lidar com a última barra sem utilizar indicadores? (CopyRates, CopyHigh)

escreveu correctamente que deve utilizar CopyRates ou CopyHigh/Low/Close, etc. para trabalhar com dados de preços fora dos indicadores.

Pode encontrar exemplos na ajuda ou na base de códigos.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - Документация по MQL5
 

Ao compilar o código, aparece uma mensagem: possível perda de dados devido à conversão do tipo na linha

datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

e quando utiliza a função no Expert Advisor, deixa de funcionar no testador, por favor diga-me a razão, o código é retirado do artigo https://www.mql5.com/ru/articles/22

//+------------------------------------------------------------------+
//|                                                 CheckLastBar.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(isNewBar())
     {
      PrintFormat("Новый бар: %s",TimeToString(TimeCurrent(),TIME_SECONDS));
     }
  }
//+------------------------------------------------------------------+
//| Возвращает true, если появился новый бар для пары символ/период  |
//+------------------------------------------------------------------+
bool isNewBar()
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time=0;
//--- текущее время
   datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

//--- если это первый вызов функции
   if(last_time==0)
     {
      //--- установим время и выйдем 
      last_time=lastbar_time;
      return(false);
     }

//--- если время отличается
   if(last_time!=lastbar_time)
     {
      //--- запомним время и вернем true
      last_time=lastbar_time;
      return(true);
     }
//--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }
//+------------------------------------------------------------------+
Ограничения и проверки в экспертах
Ограничения и проверки в экспертах
  • 2010.08.02
  • MetaQuotes Software Corp.
  • www.mql5.com
Можно ли торговать этим инструментом в понедельник? Хватит ли денег на открытие позиции? Какой размер убытка мы получим, если сработает Stop Loss? Как ограничить количество отложенных ордеров? Была ли выполнена торговая операция на этом баре или это было на предыдущем? Если торговый робот не может сделать подобные проверки, то любая прибыльная торговая система может превратиться в проигрышную. В этой статье показаны примеры проверок, которые пригодятся в любом эксперте.
 
Europa:

Ao compilar o código, aparece uma mensagem: possível perda de dados devido à conversão do tipo na linha

e quando utiliza a função no Expert Advisor, deixa de funcionar no testador, por favor diga-me a razão, o código é retirado do artigohttps://www.mql5.com/ru/articles/22

Não tenho a certeza sobre o testador. Sobre "... conversão do tipo":
   datetime lastbar_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
 

Interessante, mas eu também tenho um semelhante.Preenchendo uma matriz dupla com dados duplos. Dá o mesmo aviso nesta linha.

CopyBuffer(ma_handle,0,0,13,ma);
 
Karlson:

Interessante, mas também tenho um semelhante. Preenchendo uma matriz dupla com dados duplos, dá o mesmo aviso nesta linha.

Talvez seja a interpretação ambígua das constantes (0,0,13). O CopyBuffer tem três variantes de chamada. Tentar substituir variáveis de tipo necessário como parâmetros ou utilizar conversão explícita de tipo para constantes.
 
Obrigado, vou tentar. Já tentei a conversão, a conversão explícita passa, se eu traduzir um cabo de máscara com (int), mas isso não me convém, claro :-)
 
Karlson:
Obrigado, vou tentar. Já tentei a conversão, a conversão explícita passa, se eu traduzir um cabo de máscara via (int), mas isso não me convém, claro :-)
Espere um segundo. Qual é o seu tipo de cabo?
 

Percebi mal. Preciso de uma int.

int  iMA(
   string               symbol,            // имя символа
   ENUM_TIMEFRAMES      period,            // период
   int                  ma_period,         // период усреднения
   int                  ma_shift,          // смещение индикатора по горизонтали
   ENUM_MA_METHOD       ma_method,         // тип сглаживания
   ENUM_APPLIED_PRICE   applied_price      // тип цены или handle
   );

Obrigado.

 
Tenho também algumas perguntas. Onde estão os módulos de sinal cruzado de média móvel? Onde estão os sinais alligatora? Só mais uma coisa. Cada indicador tem vários tipos de sinais. Como fazer com que o MACD aceite apenas sinais de cruzamento zero?