Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 730

 
Artyom Trishkin:
barre[]
Se puoi, per favore mostrami il codice.
 
Vitaly Muzichenko:

ChiamatoBars, il compilatore lo sta rimproverando al cielo. Avete testato questo design, o avete solo supposto che dovrebbe funzionare, o sto facendo qualcosa di sbagliato?

Sì, errore mio. Dare un nome. In generale, l'idea è di dare nomi espressivi alle variabili, poi non sarà necessario creare variabili aggiuntive, la cui esistenza non è sempre giustificata.
 
Vasiliy Sokolov:
Sì, errore mio. Dare un nome. In generale, l'idea è di dare nomi espressivi alle variabili, poi non sarà necessario creare variabili aggiuntive, la cui esistenza non è sempre giustificata.

La ragione non è per esprimere qualcosa, ma per abbreviare il codice quando si lavora con loro:

if(open1<close1 && close2>close3 && close1>close2 &&

E il resto allo stesso modo, altrimenti la lunghezza delle linee aumenta

Grazie a tutti per i chiarimenti!

 
Vitaly Muzichenko:

Non l'ho chiamato per esprimere qualcosa, ma per ridurre il codice quando si lavora con loro:

if(open1<close1 && close2>close3 && close1>close2 &&

E il resto allo stesso modo, altrimenti la lunghezza delle linee aumenta

Grazie a tutti per i chiarimenti!

Se volete ridurre il codice al minimo, fate riferimento direttamente all'array di dati

//+------------------------------------------------------------------+
//|                                                       test09.mq5 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"

MqlRates bars[]; // массив для хранения данных цен OHLC
int start_bar=0; // с какого бара копируем
int count_bar=4; // сколько баров копируем
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArraySetAsSeries(bars, true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CopyRates(Symbol(),PERIOD_CURRENT, start_bar, count_bar, bars)<count_bar) return;
  
   if(bars[1].open<bars[1].close && bars[2].close>bars[3].close && bars[1].close>bars[2].close)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

Buon pomeriggio!

Dove e come cancellare correttamente gli ordini piazzati e le posizioni aperte quando si scarica (cancella) un Expert Advisor? Se non è difficile, per favore condividi un esempio.

Grazie.

 

Uno degli EAs sta avendo qualche strano nonsenso. Testa l'EA normalmente, cliccando su "Run single test" ne esegue solo uno, la prima volta. Poi, quando cliccate sul singolo test o cliccate su qualsiasi linea nell'Ottimizzazione, questo viene mostrato nel Journal:

2017.02.08 13:31:05.165 Tester non può ottenere input per il passaggio 4234087422336

2017.02.08 13:31:34.829 Tester non può ottenere input per il passaggio 4076312468706

2017.02.08 13:31:47.973 Tester non può ottenere input per il passaggio 1004506640527

Gli altri EA si comportano normalmente. Cosa potrebbe essere?

 

Signori, registrando un'enorme matrice 10000*10000

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

Come pensi che questo algoritmo sia efficiente in termini di velocità?

Perché quando la matrice è 1000*1000 la velocità è di pochi secondi, quando aumenta a 10000*10000 il sistema si alza

 
Top2n:

Signori, registrando un'enorme matrice 10000*10000

      if(count==0)
        {
         //--- запишем файл
         ResetLastError();
         int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
         //---
         if(handle!=INVALID_HANDLE)
           {
            for(int z=ARRAY_SIZE_Y; z>0; z--) // Перебор по барам, колонка Y
              {
               for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
                 {
                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);
              }
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError()," handle ",handle);
        //---
         count=1;
        }

Come pensi che questo algoritmo sia efficiente in termini di velocità?

Perché quando la matrice è 1000*1000 la velocità è di pochi secondi, quando aumenta a 10000*10000 il sistema si alza

Come si può ottenere una tale matrice se non sono ammessi più di quattro matrici dimensionali?
C'è confusione?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Come è possibile ottenere una tale matrice se non sono ammessi più di quattro matrici dimensionali?
Non c'è confusione?

10000 x 10000 non è una matrice bidimensionale?

double arr[10000][10000];

e tutto il resto...

 
Alexey Viktorov:
Come è possibile ottenere una tale matrice se non sono ammessi più di quattro matrici dimensionali?
C'è confusione?
Sì, è bidimensionale, quindi non sto dicendo bene, sto dicendo che non è una matrice, ma un array. Una matrice implica la multidimensionalità?
Motivazione: