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

 
Roma Ivanov:
a fórmula é a partir daqui - https://www.mql5.com/ru/articles/1492
no artigo no link -- a operação ^ é um aumento de potência
 
Roma Ivanov:
A fórmula é retirada daqui - https://www.mql5.com/ru/articles/1492

Ainda não o li. Mas a julgar pela fórmula e pelos gráficos do artigo (Excel), é um aumento de poder.

Posso estar enganado.

 

Boa altura! Ao pensar em como traduzir uma matriz 2D em formato *.csv, encontrou um exemplo adequado, mas é para mt4, necessário para 5.

//+------------------------------------------------------------------+
//|                                                  generateCsv.mq4 |
//|         Copyright © 2006, Antonio Banderass. All rights reserved |
//|                                               banderassa@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Antonio Banderass. All rights reserved"
#property link      "banderassa@ukr.net"
#property library
#define ARRAY_SIZE_X 16
#define ARRAY_SIZE_Y 16
//+------------------------------------------------------------------+
//| PrepareString                                                    |
//+------------------------------------------------------------------+
string PrepareString(string s)
  {
   bool exit = false;
   int index = 0;
   string str = s;
//----
   while(!exit)
     {
       index = StringFind(str, ".", index);
       if(index > -1)
           str = StringSetCharacter(str, index, ',');
       else
           exit = true;
     }
   return(str);
  }
//+------------------------------------------------------------------+
//| GenerateCsv                                                      |
//+------------------------------------------------------------------+
int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,
                double arrayIndexX[], double arrayIndexY[], double arrayZ[][]) // Ругается говорит - arrays are passed by reference only пробовал добавить &_array.. но запинается на двумерном

  {
   int handle = FileOpen(fileName, FILE_CSV|FILE_WRITE, ' '), x, y;
   string str;
   if(handle < 1)
     {
       Print("Error:", GetLastError());
       return(handle);
     }
   else
     {
       str = ";";
       for(x = 0; x < arraySizeX; x++)
         {
           str = str + arrayIndexX[x];
           str = str + ";";        
         }
       FileWrite(handle, PrepareString(str));
       for(y = 0; y < arraySizeY; y++)
         {
           str = "";  
           str = str + arrayIndexY[y] + ";";
           for(x = 0; x < arraySizeX; x++)
             {
               str = str + arrayZ[x,y];
               str = str + ";";        
             }
           FileWrite(handle, PrepareString(str));
         }
     }
   FileClose(handle);  
   return(handle);
  }
//+------------------------------------------------------------------+

https://www.mql5.com/ru/articles/1443

Трёхмерные графики - профессиональный инструмент анализа рынка
Трёхмерные графики - профессиональный инструмент анализа рынка
  • 2006.12.06
  • Antoniuk Oleg
  • www.mql5.com
В это статье мы напишем простую библиотеку для создания трехмерных графиков и последующего их проcмотра в Microsoft Excel. Мы воспользуемся стандартными возможностями языка MQL 4 для подготовки и экспорта данных в файл формата *.csv.
Arquivos anexados:
 
Top2n:

Boa altura! Ao pensar em como traduzir uma matriz 2D em formato *.csv, encontrou um exemplo adequado, mas é para mt4, necessário para 5.

https://www.mql5.com/ru/articles/1443

As arrays só podem ser transferidas por referência:

int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,
                double & arrayIndexX[], double & arrayIndexY[], double & arrayZ[][])
 
Artyom Trishkin:

As arrays só podem ser transferidas por referência:

int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,
                double & arrayIndexX[], double & arrayIndexY[], double & arrayZ[][])
E ainda assim jura a&arrayZ[][] diz -'[' - valor de índice inválido

 
Top2n:
E no entanto falha&arrayZ[][] diz -'[' - valor de índice inválido

E quantas dimensões é o arrayZ declarado?
 
Artyom Trishkin:
E quantas dimensões é o arrayZ declarado?

Eu declarei &arrayZ[][3000], se eu o igualar a 16, então a função de tratamento de eventos não foi de todo encontrada

#define ARRAY_SIZE_X 16
#define ARRAY_SIZE_Y 16

int start()
  {
   int x, y;
   double arrayIndexX[ARRAY_SIZE_X];
   double arrayIndexY[ARRAY_SIZE_Y];
   double arrayZ[ARRAY_SIZE_X,ARRAY_SIZE_Y];
//----
   for(x = 0; x < ARRAY_SIZE_X; x++)
       arrayIndexX[x] = x / 10.0;      
//----
   for(y = 0; y < ARRAY_SIZE_Y; y++)
       arrayIndexY[y] = y / 10.0;
//----
   for(x = 0; x < ARRAY_SIZE_X; x++)
       for(y = 0; y < ARRAY_SIZE_Y; y++)
           arrayZ[x,y] = MathSin(arrayIndexX[x] + arrayIndexY[y]);
   GenerateCsv("test.csv", ARRAY_SIZE_X, ARRAY_SIZE_Y, arrayIndexX, arrayIndexY, arrayZ); // 'arrayZ' - parameter conversion not allowed
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| PrepareString                                                    |
//+------------------------------------------------------------------+
string PrepareString(string s)
  {
   bool exit = false;
   int index = 0;
   string str = s;
//----
   while(!exit)
     {
       index = StringFind(str, ".", index);
       if(index > -1)
           str = StringSetCharacter(str, index, ',');
       else
           exit = true;
     }
   return(str);
  }
//+------------------------------------------------------------------+
//| GenerateCsv                                                      |
//+------------------------------------------------------------------+
int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,
                double &arrayIndexX[], double &arrayIndexY[], double &arrayZ[][3000])
  {
   int handle = FileOpen(fileName, FILE_CSV|FILE_WRITE, ' '), x, y;
   string str;
   if(handle < 1)
     {
       Print("Error:", GetLastError());
       return(handle);
     }
   else
     {
       str = ";";
       for(x = 0; x < arraySizeX; x++)
         {
           str = str + arrayIndexX[x];
           str = str + ";";        
         }
       FileWrite(handle, PrepareString(str));
       for(y = 0; y < arraySizeY; y++)
         {
           str = "";  
           str = str + arrayIndexY[y] + ";";
           for(x = 0; x < arraySizeX; x++)
             {
               str = str + arrayZ[x,y];
               str = str + ";";        
             }
           FileWrite(handle, PrepareString(str));
         }
     }
   FileClose(handle);  
   return(handle);
  }
//+------------------------------------------------------------------+

 
Top2n:

Declarado &arrayZ[][3000][3000][3000][3000][3000][3000

string PrepareString(string s);

int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,

                double &arrayIndexX[], double &arrayIndexY[], 

                double &arrayZ[][3000]); 

int start()
  {
   int x, y;
   double arrayIndexX[ARRAY_SIZE_X];
   double arrayIndexY[ARRAY_SIZE_Y];
   double arrayZ[ARRAY_SIZE_X,ARRAY_SIZE_Y];
//----
   for(x = 0; x < ARRAY_SIZE_X; x++)
       arrayIndexX[x] = x / 10.0;      
//----
   for(y = 0; y < ARRAY_SIZE_Y; y++)
       arrayIndexY[y] = y / 10.0;
//----
   for(x = 0; x < ARRAY_SIZE_X; x++)
       for(y = 0; y < ARRAY_SIZE_Y; y++)
           arrayZ[x,y] = MathSin(arrayIndexX[x] + arrayIndexY[y]);
   GenerateCsv("test.csv", ARRAY_SIZE_X, ARRAY_SIZE_Y, arrayIndexX, arrayIndexY, arrayZ); // 'arrayZ' - parameter conversion not allowed
//----
   return(0);
  }


Já tomou uma já pronta. Como é feito lá? Não consigo olhar para ela - estou a escrever a partir do meu telemóvel.
 

Como posso mudar a cor de um painel criado usando a classeCAppDialog?

   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
      return(false);
 
Artyom Trishkin:
Já deve tê-lo preparado. Como é feito lá? Não consigo procurar - estou a escrever a partir do meu telemóvel.

Peço desculpa pelo inconveniente.

//+------------------------------------------------------------------+
//| start                                                            |
//+------------------------------------------------------------------+
int start()
  {

а надо 

//+------------------------------------------------------------------+
//| start                                                            |
//+------------------------------------------------------------------+
int OnStart

  { 

Mas o ficheiro cria, não com os dados solicitados,

resultado - uma coluna preenchida com 17 filas de verdade booleana

Há um cordelStringSetChar - jurou no início,

mudou-o paraboolStringSetCharacter- essa deve ser a razão para o booleano

//+------------------------------------------------------------------+
//| PrepareString                                                    |
//+------------------------------------------------------------------+
string PrepareString(string s)
  {
   bool exit = false;
   int index = 0;
   string str = s;
//----
   while(!exit)
     {
       index = StringFind(str, ".", index);
       if(index > -1)
           str = StringSetChar(str, index, ',');
       else
           exit = true;
     }
   return(str);
  }
Arquivos anexados:
VCSV.mq5  3 kb