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

 

Obrigado, mas ela é

Vitaly Muzichenko:

iCustom para ajudar


iCustom é uma boa solução para iCustom, mas iCustom sempre executa todo o código do indicador, e se eu precisar de muitos parâmetros de indicador em uma EA (e é) então, em vez de um cálculo de indicador, teremos vários, o que pode retardar significativamente o processo até que o tick atual seja perdido, eu esqueci das variáveis predefinidas.....

int rates_total=Bars;

variável global definida

int prev_calculated=0;

colisões sobre o número de elementos da matriz

 
ijonhson:

Sinto muito, mas não entendo por que o oncalculate deve passar valores de variáveis pré-definidas se elas são globais e também disponíveis

Dê uma olhada em um exemplo

//+-------------------------------------------------------+
//|Параметры функции                             PROBA.mq4|
//+-------------------------------------------------------+
#property   strict

void OnStart()
{
 Alert(Сумма(2,5));
 
 int Сум=0;
 Сумма(2,5,Сум);  // Передаем в функцию 2 числа и получаем сумму
 Alert(Сум);
}

int Сумма(int a, int b)
{
  return a+b;
}

void Сумма(int a, int b, int & s)
{
  s= a+b;
}

Os parâmetros de uma função podem ser entrada - que nós passamos para ela, e saída - que ela retorna para nós

 
ijonhson: int rates_total=Bars; int prev_calculated=0;

Estas variáveis são necessárias para calcular toda a linha indicadora, mas você precisa de um único valor. Tudo é muito mais simples. Analisar o programa indicador e determinar qual fórmula é usada para o cálculo. E use esta fórmula no Expert Advisor

 

Rapazes, digam-me como implementar este algoritmo:

Há uma série cronológica com volume

Quero comparar o Volume[1] para ser maior do que cada uma das barras anteriores do Volume[1] e especificar uma janela (número) de barras anteriores com variável externa (int externa)


Escreva uma amostra de código, se não for difícil

 
John Smith:

Rapazes, digam-me como implementar este algoritmo:

Há uma série cronológica com volume

Quero comparar o Volume[1] para ser maior do que cada uma das barras anteriores do Volume[1] e especificar uma janela (número) de barras anteriores com variável externa (int externa)


Escreva uma amostra de código, se não for difícil

  for(int i=1; i<NumBar; i++) {
    ArrayResize(Buf, i);
    Buf[i-1] = Volume[i];
  }

 double min= Buf[ArrayMinimum(Buf)];
 double max= Buf[ArrayMaximum(Buf)];

 if(max < Volume[0]) { ... }
 
STARIJ:

Funcionou? Como funcionava antes?


Funcionou sem erros, parece que eu mesmo o removi, por auto-substituição via ctrl+h, e não notei >_<. De qualquer forma, provavelmente foram os Illuminati que o fizeram. Mais uma vez obrigado !

 
John Smith:

Rapazes, digam-me como implementar este algoritmo:

Há uma série cronológica com volume

Quero comparar o Volume[1] para ser maior do que cada uma das barras anteriores do Volume[1] e especificar uma janela (número) de barras anteriores com variável externa (int externa)


Escreva uma amostra de código, se não for difícil

Não é difícil. Escrevi-o de joelhos de memória (posso ter perdido algo).

//+------------------------------------------------------------------+
bool IsLastVolumeTheLargest(const string symbol_name, const ENUM_TIMEFRAMES timeframe,const int start_pos,const int count)
  {
   long array[];  // Массив для хранения объёмов
   //--- если скопировалось меньше, чем нужно, вернём false
   if(CopyTickVolume(symbol_name,timeframe,start_pos,count,array)<count) return false;
   //--- вернём флаг того, что максимальный объём находится в последней ячейке массива (соответствует индексу start_pos)
   return ArrayMaximum(array)==count-1;
  }
//+------------------------------------------------------------------+
 

Olá. Eu não posso compartilhar o arquivo. A tarefa - Preciso que o arquivo do período mais antigo (por exemplo, M20) seja gerado em М1 durante o teste manual em МТ4 (MQL4) tester. Para este fim escrevi um indicador baseado no roteiro do PeriodConverter. Como no modo de teste é impossível salvar o arquivo (EURUSD20.csv) diretamente no histórico da pasta, o arquivo é salvo na pasta compartilhada por todos os terminais -MetaQuotesTerminalCommon. Então o script em loop, trabalhando em um gráfico padrão M1, copia os dados do arquivo EURUSD20.csv para o arquivo EURUSD20.hst, localizado na pasta History. O arquivo EURUSD20.csv não pode ser aberto no script, se ao mesmo tempo for aberto no indicador no testador (5004 ERR_FILE_CANNOT_OPEN File open error). Se você remover o indicador do testador, o arquivo no script é aberto e copiado sem problemas. O arquivo é aberto no indicador da seguinte forma: ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
O arquivo no script é aberto da seguinte forma: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ);
Favor indicar meu erro.

 
tvv:

Olá. Eu não posso compartilhar o arquivo. A tarefa - Preciso que o arquivo do período mais antigo (por exemplo, M20) seja gerado em М1 durante o teste manual em МТ4 (MQL4) tester. Para este fim escrevi um indicador baseado no roteiro do PeriodConverter. Como no modo de teste é impossível salvar o arquivo (EURUSD20.csv) diretamente no histórico da pasta, o arquivo é salvo na pasta compartilhada por todos os terminais -MetaQuotesTerminalCommon. Então o script em loop, trabalhando em um gráfico padrão M1, copia os dados do arquivo EURUSD20.csv para o arquivo EURUSD20.hst, localizado na pasta History. O arquivo EURUSD20.csv não pode ser aberto no script, se ao mesmo tempo for aberto no indicador no testador (5004 ERR_FILE_CANNOT_OPEN File open error). Se você remover o indicador do testador, o arquivo no script é aberto e copiado sem problemas. O arquivo é aberto no indicador da seguinte forma: ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
O arquivo é aberto no script da seguinte forma: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
Favor apontar meu erro.

Você já apontou isso?

 
Alexey Viktorov:

Você o especificou?

Eu não entendo. Esta opção indica a localização do arquivo -MetaQuotesTerminalCommon. Sem esta opção não poderei agarrar o arquivo que foi gerado no testador. Sem esta opção o arquivo será pesquisado em MQL4\Files - e eu não posso colocar o arquivo do testador lá.

Razão: