Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 352

 

Grazie, ma lei è

Vitaly Muzichenko:

iCustom per aiutare


iCustom è una buona soluzione per iCustom ma iCustom esegue sempre l'intero codice dell'indicatore, e se ho bisogno di molti parametri dell'indicatore in un EA (e lo è) allora invece di un calcolo dell'indicatore ne otterremo diversi, il che può rallentare notevolmente il processo fino a perdere il tick corrente, ho dimenticato le variabili predefinite.....

int rates_total=Bars;

variabile globale definita

int prev_calculated=0;

si blocca sul numero di elementi dell'array

 
ijonhson:

Mi dispiace, ma non capisco perché oncalculate dovrebbe passare i valori delle variabili predefinite se sono globali e anche disponibili

Date un'occhiata a un esempio

//+-------------------------------------------------------+
//|Параметры функции                             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;
}

I parametri di una funzione possono essere input - che le passiamo, e output - che ci restituisce

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

Queste variabili sono necessarie per calcolare l'intera linea dell'indicatore, ma avete bisogno di un singolo valore. Tutto è molto più semplice. Analizzare il programma dell'indicatore e determinare quale formula viene utilizzata per il calcolo. E usa questa formula nell'Expert Advisor

 

Ragazzi, ditemi come implementare questo algoritmo:

C'è una serie temporale con volume Volume

Voglio confrontare Volume[1] per essere più grande di ciascuna delle precedenti barre di Volume[1] e specificare una finestra (numero) di barre precedenti con una variabile esterna (extern int)


Scrivere un esempio di codice, se non è difficile

 
John Smith:

Ragazzi, ditemi come implementare questo algoritmo:

C'è una serie temporale con volume Volume

Voglio confrontare Volume[1] per essere più grande di ciascuna delle precedenti barre di Volume[1] e specificare una finestra (numero) di barre precedenti con una variabile esterna (extern int)


Scrivere un esempio di codice, se non è difficile

  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:

Ha funzionato? Come funzionava prima?


Ha funzionato senza errori, mi sembra di averlo rimosso io stesso, per auto-sostituzione tramite ctrl+h, e non me ne sono accorto >_<. Comunque, probabilmente sono stati gli Illuminati a farlo. Grazie ancora!

 
John Smith:

Ragazzi, ditemi come implementare questo algoritmo:

C'è una serie temporale con volume Volume

Voglio confrontare Volume[1] per essere più grande di ciascuna delle precedenti barre di Volume[1] e specificare una finestra (numero) di barre precedenti con una variabile esterna (extern int)


Scrivere un esempio di codice, se non è difficile

Non è difficile. L'ho scritto in ginocchio a memoria (potrei aver dimenticato qualcosa)...

//+------------------------------------------------------------------+
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;
  }
//+------------------------------------------------------------------+
 

Salve. Non posso condividere il file. Il compito - Ho bisogno che il file del periodo più vecchio (ad esempio M20) sia generato su М1 durante il test manuale nel tester МТ4 (MQL4). A questo scopo ho scritto un indicatore basato sullo script PeriodConverter. Dato che in modalità test è impossibile salvare il file (EURUSD20.csv) direttamente nella cartella History, il file viene salvato nella cartella condivisa da tutti i terminali - \MetaQuotes\Terminal\Common. Poi lo script in loop, lavorando su un grafico standard M1, copia i dati dal file EURUSD20.csv al file EURUSD20.hst, situato nella cartella History. Il file EURUSD20.csv non può essere aperto nello script, se allo stesso tempo viene aperto nell'indicatore nel tester (5004 ERR_FILE_CANNOT_OPEN File open error). Se si rimuove l'indicatore dal tester, il file nello script viene aperto e copiato senza problemi. Il file viene aperto nell'indicatore come segue: ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
Il file nello script viene aperto come segue: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ);
Per favore indicate il mio errore.

 
tvv:

Salve. Non posso condividere il file. Il compito - Ho bisogno che il file del periodo più vecchio (per esempio M20) sia generato su М1 durante il test manuale nel tester МТ4 (MQL4). A questo scopo ho scritto un indicatore basato sullo script PeriodConverter. Dato che in modalità test è impossibile salvare il file (EURUSD20.csv) direttamente nella cartella History, il file viene salvato nella cartella condivisa da tutti i terminali - \MetaQuotes\Terminal\Common. Poi lo script in loop, lavorando su un grafico standard M1, copia i dati dal file EURUSD20.csv al file EURUSD20.hst, situato nella cartella History. Il file EURUSD20.csv non può essere aperto nello script, se allo stesso tempo viene aperto nell'indicatore nel tester (5004 ERR_FILE_CANNOT_OPEN File open error). Se si rimuove l'indicatore dal tester, il file nello script viene aperto e copiato senza problemi. Il file è aperto nell'indicatore come segue: ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_COMMON);
Il file è aperto nello script come segue: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
Vi prego di segnalare il mio errore.

L'avete indicato?

 
Alexey Viktorov:

L'hai specificato?

Non capisco. Questa opzione indica la posizione del file - \MetaQuotes\Terminal\Common. Senza questa opzione non potrò prendere il file che è stato generato nel tester. Senza questa opzione il file verrà cercato in MQL4\Files - e non posso metterci il file del tester.