Discussão do artigo "Migrando do MQL4 para o MQL5" - página 3

[Excluído]  

Proponho a migração de double MarketInfo(string symbol, int type) como um conjunto de funções que retornam diferentes tipos de dados, de acordo com a especificação dos parâmetros de entrada


Por exemplo, essas funções:

int MarketInfoInt(string symbol, int type);

string MarketInfoStr(string symbol, int type)....

Certa vez, entrei em contato com os desenvolvedores sobre REFERÊNCIAS e resultados de funções, mas eles se recusaram a fazer isso (e é uma pena).


PS

Com base nisso, acho que a melhor solução para este momento será a biblioteca MarketInfo, que conterá todas as funções necessárias.

A propósito, isso é exatamente o que eu fiz em minha própria biblioteca :)

 
Interesting:

Na minha opinião, são necessários dois recursos para lidar com o TF em um ambiente de migração:

1. Converte o número de segundos em TF - por exemplo, ENUM_TIMEFRAMES SecondToPeriod (int Value);

2. Converte o período em segundos - digamos, int PeriodToSecond(ENUM_TIMEFRAMES Value).


O que fiz com sucesso em meu módulo de migração logo no início (há também uma opção de DLL).


PS

Para maximizar a conformidade com a MQL4, eu pessoalmente me livrei de todos os períodos não padrão para ela



a função é boa e útil, mas a execução....

Eu o faria da seguinte forma

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void FixTF(int &tf)
  {
   switch(tf)
     {
      case 0: tf = 0;break;
      case 1: tf = PERIOD_M1;break;
      case 5: tf = PERIOD_M5;break;
      case 15: tf = PERIOD_M15;break;
      case 30: tf = PERIOD_M30;break;
      case 60: tf = PERIOD_H1;break;
      case 240: tf= PERIOD_H4;break;
      case 1440: tf=PERIOD_D1;break;
      case 10080: tf = PERIOD_W1;break;
      case 43200: tf = PERIOD_MN1;break;
      default: tf=0;break;
     }
  }
//+------------------------------------------------------------------+



em todas as funções, você só precisa definir o tamanho das matrizes

assim como o az buki vedi.

 
CoreWinTT:

A função é boa e útil, mas a execução..... é uma heresia.

seu trabalho??

WHERE BREAK!!!!!! programadores de luto!!!!


Como o return é pior do que o break?
 
Peço desculpas.
 
CoreWinTT:

em todas as funções, basta definir o tamanho das matrizes
simplesmente como az'buki vedi.

Nem sempre, consulte a seção Acesso a séries temporais e indicadores:

Funções para trabalhar com séries temporais e indicadores. Uma série temporal difere de uma matriz regular porque a indexação dos elementos da série temporal é feita do final da matriz para o início (dos dados mais recentes para os mais antigos). Recomenda-se usar somente matrizes dinâmicas para copiar os valores de séries temporais e indicadores, pois as funções de cópia alocam o tamanho necessário das matrizes-receptoras de valores de forma independente.

Há uma exceção importante aessa regra : se a cópia de valores de séries temporais e indicadores tiver de ser feita com frequência, por exemplo, a cada chamada de OnTick() em Expert Advisors ou a cada chamada de OnCalculate() em indicadores, nesse caso, é melhor usar matrizes distribuídas estaticamente, pois as operações de alocação de memória para matrizes dinâmicas exigem tempo adicional e isso afetará o teste e a otimização dos Expert Advisors.

 
Rosh:

Nem sempre, consulte Acesso a séries temporais e indicadores:


Como minha prática mostra, é melhor fazer isso do que não fazer.

Caso contrário, aparece um erro de acesso aos dados

especialmente com matrizes globais.


Em primeiro lugar, porque em uma matriz com um tamanho designado, a indexação é estática e não há esses momentos perigosos de matrizes de inversões.

Em segundo lugar, o espaço para matrizes é alocado com mais parcimônia

e, em terceiro lugar, a probabilidade de um erro de acesso à matriz é reduzida muitas vezes.

É por isso que acho que essas funções simplesmente precisam de uma função para determinar o tamanho da matriz.

 
CoreWinTT:

a função é boa e útil, mas aqui está a execução....

Eu faria desta forma

O artigo foi modificado:

  • restaurou a função TFMigrate() à sua forma original
  • funções alteradas na seção 18
 
Adição da função iMAOnArray(...) ao Manual de Referência
 
Correção da função iMAOnArray. No modo MODE_SMA, o tempo de cálculo é significativamente reduzido.
[Excluído]  

Comecei a duvidar muito da funcionalidade desse design. Por mais que eu tentasse entender a lógica do bloco, não conseguia (e me esforcei muito)....

int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
      return(ArraySize(Arr)-1);
   else return(-1);
  }