Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1173

 

MQL5 iBarShift

Secondo la documentazione di mql5, la funzione iBarShift restituisce un valore di tipo int.

int#

Il tipo int ha una dimensione di 4 byte (32 bit). Il valore minimo è -2 147 483 648, il valore massimo è 2 147 483 647.


Il mioiBarShift non vuole dare un valore maggiore di 99999

Disegno una linea di tendenza sul grafico, il seguente script ottiene il tempo di inizio della linea e produce il numero di barra di quel tempo.

Quando la linea viene spostata indietro nella storia ad un certo punto il valore di uscita si ferma a 99999, e se

boolexact=false// modo

cambiarlo in true, stampa -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);
     }
  }

Cosa c'è che non va?

Ho provato diversi grafici di diversi broker, il tempo dalla linea si legge correttamente, se cambio PERIOD_M1 a M5, per esempio, allora ho bisogno di spostarmi più avanti nella storia per raggiungere 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...
File:
sc1.mq5  3 kb
 
Sunriser:

MQL5 iBarShift

Secondo la documentazione di mql5, la funzione iBarShift restituisce un valore di tipo int.

int#

Il tipo int ha una dimensione di 4 byte (32 bit). Il valore minimo è -2 147 483 648, il valore massimo è 2 147 483 647.


Il mioiBarShift non vuole dare un valore maggiore di 99999

Disegno una linea di tendenza sul grafico, il seguente script ottiene il tempo di inizio della linea e produce il numero di barra di quel tempo.

Quando la linea viene spostata indietro nella storia ad un certo punto il valore di uscita si ferma a 99999, e se

boolexact=false// modo

cambiarlo in true, stampa -1, e GetLastError = 0

Cosa c'è che non va?

Ho provato diversi grafici di diversi broker, il tempo dalla linea si legge correttamente, se cambio PERIOD_M1 a M5, per esempio, ho bisogno di spostarmi ulteriormente nella storia per raggiungere 99999.

Prima di tutto controlla il numero massimo di barre nelle impostazioni del terminale.

 
Uladzimir Izerski:

Prima controlla il numero massimo di barre nelle impostazioni del terminale.

Grazie!

Era 10000, l'ho cambiato in illimitato e ha funzionato.

Non è una cosa ovvia però...

 

Aiuto nella creazione di maniglie

Ecco come stanno le cose

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

Domanda: Da quali parametri viene assegnato il numero (cifre) di una maniglia?
Può essere diverso dopo aver riavviato il terminale?
Può essere diverso dopo una reinizializzazione del grafico?
In quali casi può cambiare?

 
Vitaly Muzichenko:

Aiuto nella creazione di maniglie

Ecco come stanno le cose

Domanda: Da quali parametri viene assegnato il numero (cifre) di una maniglia?
Può essere diverso dopo aver riavviato il terminale?
Può essere diverso dopo una reinizializzazione del grafico?
In quali casi può cambiare?

Se c'è solo un indicatore, ha sempre un manico di 10. Ogni successiva è uguale alla precedente+1 e tutto dipende dall'ordine in cui le maniglie sono state create. Può cambiare solo se uno dei precedenti ottiene un errore.

 
Alexey Viktorov:

Se avete un solo indicatore, ha sempre una maniglia di 10. Ogni successivo è uguale al precedente+1 e tutto dipende dall'ordine in cui le maniglie sono state create. Può cambiare solo se uno dei precedenti ottiene un errore.

Capisco, è più o meno compreso. Grazie!

 
Vitaly Muzichenko:

Aiuto nella creazione di maniglie

C'è una cosa come questa

Domanda: Da quali parametri viene assegnato il numero (cifre) di una maniglia?
Può essere diverso dopo aver riavviato il terminale?
Può essere diverso dopo una reinizializzazione del grafico?
In quali casi può cambiare?

Risposte trovate

Сравниваем скорость самокэширующихся индикаторов
Сравниваем скорость самокэширующихся индикаторов
  • www.mql5.com
Предположим, что нам вдруг наскучил классический MQL5-доступ к индикаторам и захотелось сравнить скорость доступа в сравнении с альтернативными вариантами. Например, сравним его с доступом к индикаторам в стиле MQL4 без кэширования и с кэшированием. Идеи с доступом в MQL4-стиле были взяты из статьи LifeHack для трейдера: готовим фастфуд из...
 
Dove è possibile inserire un file in modo che sia visibile, tramite ereditarietà, a tutti i file della libreria standard?
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 

Per favore consigliate come passare correttamente un array multidimensionale in una funzione.

Se specifico semplicemente MyFun( &Mas[][] ) nell'intestazione, il compilatore genera un errore all'accesso a un elemento dell'array Mas[j][k] nel corpo della funzione... Ma come?

Non sembra esserci alcun problema con quelli monodimensionali.

 
User_mt5:

Per favore consigliate come passare correttamente un array multidimensionale in una funzione.

Se specifico semplicemente MyFun( &Mas[][] ) nell'intestazione, il compilatore genera un errore all'accesso a un elemento dell'array Mas[j][k] nel corpo della funzione... Ma come?

Non sembra esserci alcun problema con gli array monodimensionali.

Le dimensioni del secondo e del prossimo array non possono essere dinamiche. Di conseguenza, deve essere MyFun(int &Mas[][7]) dichiarato come un array, per esempio, int Mas[][7]; quindi dovrebbe essere ricevuto.

Motivazione: