Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 689

 
Roma Ivanov:
формула взята отсюда - https://www.mql5.com/ru/articles/1492
в статье по ссылке -- операция ^ -- это возведение в степень
 
Roma Ivanov:
формула взята отсюда - https://www.mql5.com/ru/articles/1492

Не читал. Но судя по формуле и графикам в статье (Excel) - возведение в степень.

Могу и ошибаться

 

Доброго времени! Задался вопросом как перевести двумерный массив в формат *.csv, нашел подходящий пример, но он для mt4, необходим для 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.
Файлы:
 
Top2n:

Доброго времени! Задался вопросом как перевести двумерный массив в формат *.csv, нашел подходящий пример, но он для mt4, необходим для 5-ого.

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

Массивы можно передавать только по ссылке:

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

Массивы можно передавать только по ссылке:

int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,
                double &arrayIndexX[], double &arrayIndexY[], double &arrayZ[][])
И все же он ругается на &arrayZ[][] говорит -'[' - invalid index value

 
Top2n:
И все же он ругается на &arrayZ[][] говорит -'[' - invalid index value

А у arrayZ сколько измерений объявлено?
 
Artyom Trishkin:
А у arrayZ сколько измерений объявлено?

Объявил  &arrayZ[][3000], если приравниваю к 16, то вообще event handling function not found

#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:

Объявил  &arrayZ[][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);
  }


Вы же взяли готовое уже. Как там всё сделано? Я не могу посмотреть - с мобилы пишу.
 

Как можно изменить цвет панели созданной при помощи класса  CAppDialog ?

 

   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
      return(false);


 

 
Artyom Trishkin:
Вы же взяли готовое уже. Как там всё сделано? Я не могу посмотреть - с мобилы пишу.

Прошу прощения за беспокойство 

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

а надо 

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

  { 

Но файл создает, не с запрашиваемыми данными,

результат - один столбец заполнены 17 строк булево true 

Там есть строка с string StringSetChar - ругался в начале,

переделал на bool StringSetCharacter  - походу из за этого булево выдает

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


 

Файлы:
VCSV.mq5  3 kb
Причина обращения: