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

 
Artyom Trishkin:
bares[]
Se puder, por favor mostre-me o código.
 
Vitaly Muzichenko:

ChamadoBars, o compilador está a repreendê-lo para os céus. Já testou este desenho, ou apenas assumiu que deveria funcionar, ou estou a fazer algo errado?

Sim, erro meu. Dê-lhe um nome. Em geral, a ideia é dar nomes expressivos às variáveis, então não será necessário criar variáveis adicionais, cuja existência nem sempre é justificada.
 
Vasiliy Sokolov:
Sim, erro meu. Dê-lhe um nome. Em geral, a ideia é dar nomes expressivos às variáveis, então não será necessário criar variáveis adicionais, cuja existência nem sempre é justificada.

Não os chamei para expressar algo, mas para reduzir o código ao trabalhar com eles:

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

E o resto da mesma forma, caso contrário, o comprimento das linhas aumenta

Obrigado a todos pelos esclarecimentos!

 
Vitaly Muzichenko:

A razão não é para expressar algo, mas para encurtar o código quando se trabalha com eles:

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

E o resto da mesma forma, caso contrário, o comprimento das linhas aumenta

Obrigado a todos pelos esclarecimentos!

Se quiser reduzir o código ao mínimo, faça referência directa à matriz de dados

//+------------------------------------------------------------------+
//|                                                       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)
   {
  
   }
  }
//+------------------------------------------------------------------+

...
 

Boa tarde!

Onde e como eliminar correctamente as encomendas feitas e as posições abertas ao descarregar (eliminar) um Expert Advisor? Se não for difícil, por favor partilhe um exemplo.

Obrigado.

 

Um dos EAs está a ter alguns disparates estranhos. Testa a EA normalmente, clicando em "Run single test" apenas uma vez, pela primeira vez. Depois, quando se clica no teste único ou em qualquer linha da Optimização, este aparece no Jornal:

2017.02.08 13:31:05.165 O testador não pode obter entradas para o passe 4234087422336

2017.02.08 13:31:34.829 O testador não pode obter entradas para o passe 4076312468706

2017.02.08 13:31:47.973 O testador não pode obter entradas para o passe 1004506640527

Os outros EAs comportam-se normalmente. O que poderia ser?

 

Senhores, registando uma enorme matriz de 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;
        }

Como pensa que este algoritmo é eficiente em termos de velocidade?

Porque quando a matriz é 1000*1000 a velocidade é de alguns segundos, quando aumenta para 10000*10000 o sistema levanta-se

 
Top2n:

Senhores, registando uma enorme matriz de 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;
        }

Como pensa que este algoritmo é eficiente em termos de velocidade?

Porque quando a matriz é 1000*1000 a velocidade é de alguns segundos, quando aumenta para 10000*10000 o sistema levanta-se

Como se pode obter uma tal matriz se não são permitidas mais do que matrizes tetradimensionais?
Existe alguma confusão?
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Como é possível obter uma tal matriz se não são permitidas mais do que matrizes tetradimensionais?
Não há confusão?

10000 x 10000 não é uma matriz bidimensional?

double arr[10000][10000];

e tudo isso...

 
Alexey Viktorov:
Como é possível obter uma tal matriz se não são permitidas mais do que matrizes tetradimensionais?
Existe alguma confusão?
Sim, é bidimensional, por isso não estou a dizer bem, estou a dizer que é uma matriz, não uma matriz. Será que uma matriz implica multidimensionalidade?
Razão: