В это статье мы напишем простую библиотеку для создания трехмерных графиков и последующего их проcмотра в Microsoft Excel. Мы воспользуемся стандартными возможностями языка MQL 4 для подготовки и экспорта данных в файл формата *.csv.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
buradan alınan formül - https://www.mql5.com/en/articles/1492
buradan alınan formül - https://www.mql5.com/en/articles/1492
Okuma. Ancak makaledeki (Excel) formül ve grafiklere bakılırsa - üs.
yanılıyor olabilirim
İyi zaman! İki boyutlu bir diziyi *.csv formatına nasıl çevireceğimi merak ettim, uygun bir örnek buldum ama mt4 için bu 5. için gerekli.
//| 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/en/articles/1443
İyi zaman! İki boyutlu bir diziyi *.csv formatına nasıl çevireceğimi merak ettim, uygun bir örnek buldum ama mt4 için bu 5. için gerekli.
https://www.mql5.com/en/articles/1443
Diziler yalnızca referans yoluyla iletilebilir:
double & arrayIndexX[], double & arrayIndexY[], double & arrayZ[][])
Diziler yalnızca referans yoluyla iletilebilir:
double & arrayIndexX[], double & arrayIndexY[], double & arrayZ[][])
Ve yine de yemin ediyor & arrayZ[][] diyor ki - '[' - geçersiz dizin değeri
arrayZ'nin kaç boyutu var?
Bildirildi & arrayZ[][3000], 16'ya eşitlersem, genellikle olay işleme işlevi bulunamadı
#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);
}
//+------------------------------------------------------------------+
Bildirilen & 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 sınıfı kullanılarak oluşturulan bir panelin rengini nasıl değiştirebilirim?
return ( false );
Onu zaten aldın. Orada her şey nasıl yapılıyor? Göremiyorum cepten yazıyorum.
rahatsız ettiğim için özür dilerim
//+------------------------------------------------------------------+
//| start |
//+------------------------------------------------------------------+
int start()
{
а надо
//+------------------------------------------------------------------+//| start |
//+------------------------------------------------------------------+
int OnStart
{
Ancak dosya, istenen verilerle değil,
sonuç - bir sütun dolu 17 satır boolean true
StringSetChar dizesine sahip bir satır var - başlangıçta lanetli,
bool olarak değiştirildi StringSetCharacter - bu nedenle bir boole verir
//| 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);
}