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

 

MQL5 iBarShift

De acordo com a documentação mql5, a função iBarShift retorna um valor do tipo int.

int#

O tipo int tem um tamanho de 4 bytes (32 bits). O valor mínimo é de -2 147 483 648, o valor máximo é de 2 147 483 647.


O meuiBarShift não quer dar um valor superior a 99999

Desenho uma linha de tendência no gráfico, o seguinte guião obtém a hora de início da linha e produz o número de barras dessa hora.

Quando a linha é deslocada para trás na história em algum momento, o valor de saída pára em 99999, e se

boolexact=falso// modo

alterá-lo para verdadeiro, imprime -1, e GetLastError = 0

void OnStart()
  {
int total = ObjectsTotal(0, 0, -1);  // Общее кол-во объектов на: /текущий график/главное окно/все типы объектов
datetime time0 = 0; // Время соответствующее началу трендовой линии
string objname = ""; // Имя объекта (трендовой линии)
int shift = 0; // Номер бара, соответствующего времени начала трендовой линии time0

for(int i = total - 1; i >= 0; i--)
     {
     objname = (string)ObjectName(0, i, 0, OBJ_TREND);
     time0 = ObjectGetInteger(0, objname, OBJPROP_TIME, 0);
     shift = iBarShift(NULL, PERIOD_M1, time0, false);
     Comment("shift: ", shift, " Error: ", GetLastError());
     Sleep(2000);
     }
  }

O que é que está errado?

Tentei diferentes gráficos de diferentes corretores, o tempo da linha está a ler correctamente, se eu mudar PERIOD_M1 para M5, por exemplo, então preciso de ir mais longe na história para chegar a 99999

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
Arquivos anexados:
sc1.mq5  3 kb
 
Sunriser:

MQL5 iBarShift

De acordo com a documentação mql5, a função iBarShift retorna um valor do tipo int.

int#

O tipo int tem um tamanho de 4 bytes (32 bits). O valor mínimo é de -2 147 483 648, o valor máximo é de 2 147 483 647.


O meuiBarShift não quer dar um valor superior a 99999

Desenho uma linha de tendência no gráfico, o seguinte guião obtém a hora de início da linha e produz o número de barras dessa hora.

Quando a linha é deslocada para trás na história em algum momento, o valor de saída pára em 99999, e se

boolexact=falso// modo

alterá-lo para verdadeiro, imprime -1, e GetLastError = 0

O que é que está errado?

Tentei diferentes gráficos de diferentes corretores, o tempo da linha está a ler correctamente, se eu mudar PERÍODO_M1 para M5, por exemplo, preciso de ir mais longe na história para chegar a 99999.

Antes de mais, verificar o número máximo de barras nas definições do terminal.

 
Uladzimir Izerski:

Verifique primeiro o número máximo de barras nas definições do terminal.

Obrigado!

Era 10000, mudou-o para ilimitado e funcionou.

Mas não é uma coisa óbvia...

 

Ajuda na criação de pegas

Eis o que se passa

int OnInit()
  {
//-создадим хэндл индикатора
      handle=iAO(name,period);
//-если не удалось создать хэндл
   if(handle==INVALID_HANDLE)
     {
      ...
      return(INIT_FAILED);
     }

Pergunta: A partir de que parâmetros é atribuído o número (dígitos) de uma pega?
Pode ser diferente depois de reiniciar o terminal?
Pode ser diferente após uma reinicialização do gráfico?
Em que casos pode mudar?

 
Vitaly Muzichenko:

Ajuda na criação de pegas

Eis o que se passa

Pergunta: A partir de que parâmetros é atribuído o número (dígitos) de uma pega?
Pode ser diferente depois de reiniciar o terminal?
Pode ser diferente após uma reinicialização do gráfico?
Em que casos pode mudar?

Se houver apenas um indicador, ele tem sempre uma pega de 10. Cada sucessivo é igual ao anterior+1 e tudo depende da ordem em que as pegas foram criadas. Só pode mudar se um dos anteriores receber um erro.

 
Alexey Viktorov:

Se tiver um indicador, ele tem sempre uma pega de 10. Cada um dos seguintes é igual ao anterior+1 e tudo depende da ordem em que as pegas foram criadas. Só pode mudar se um dos anteriores receber um erro.

Estou a ver, é mais ou menos compreendido. Obrigado!

 
Vitaly Muzichenko:

Ajuda na criação de pegas

Há uma coisa como isto

Pergunta: A partir de que parâmetros é atribuído o número (dígitos) de uma pega?
Pode ser diferente depois de reiniciar o terminal?
Poderá ser diferente após uma reinicialização do gráfico?
Em que casos pode mudar?

Respostas encontradas

Сравниваем скорость самокэширующихся индикаторов
Сравниваем скорость самокэширующихся индикаторов
  • www.mql5.com
Предположим, что нам вдруг наскучил классический MQL5-доступ к индикаторам и захотелось сравнить скорость доступа в сравнении с альтернативными вариантами. Например, сравним его с доступом к индикаторам в стиле MQL4 без кэширования и с кэшированием. Идеи с доступом в MQL4-стиле были взяты из статьи LifeHack для трейдера: готовим фастфуд из...
 
Onde é possível inserir um ficheiro para que seja visível, via herança, a todos os ficheiros da biblioteca padrão?
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 

Por favor, aconselhar como passar correctamente uma matriz multidimensional para uma função.

Se eu simplesmente especificar MyFun( &Mas[][] ) no cabeçalho, o compilador gera um erro ao aceder a um elemento de matriz Mas[j][k] no corpo da função... Mas como?

Parece não haver qualquer problema com as unidimensionais.

 
User_mt5:

Por favor, aconselhar como passar correctamente uma matriz multidimensional para uma função.

Se eu simplesmente especificar MyFun( &Mas[][] ) no cabeçalho, o compilador gera um erro ao aceder a um elemento de matriz Mas[j][k] no corpo da função... Mas como?

Parece não haver qualquer problema com as matrizes unidimensionais.

As dimensões da segunda e da próxima matriz não podem ser dinâmicas. Consequentemente, deve ser MyFun(int & Mas[][7]) declarado como um array, por exemplo, int Mas[][7]; portanto, deve ser recebido.