Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Миллионы трейдеров качают коды из библиотеки MQL5. Поделись своей программой!
Олег
356
Олег 2015.10.02 00:55 

Здравствуйте. Вопрос такой. Как передать массив таким образом?

библиотека

#property copyright "Copyright c 2010, MQL для тебя."
#property link      "http://mql4you.ru"
#property library

//+------------------------------------------------------------------+
double GetLot(double &A[121])
{

 for (int k=1; k<=121; k++)
 {
 A[k]=Close[k];
 }
return(A[121]);
}

 потом включаемый файл

#property copyright "Copyright c 2010, MQL для тебя."
#property link      "http://mql4you.ru"
//+------------------------------------------------------------------+
#import "MyLib.ex4"
//+------------------------------------------------------------------+
double GetLot(double &A[121]);

потом индикатор

#property  indicator_chart_window 
#property indicator_buffers 1
#include <MyLib.mqh>
double A[121],B[121];
//+------------------------------------------------------------------+
int start()
{
for(int k=1;k<=121;k++)
{
 B[k]=GetLot(A);
 
 
 Alert(B[1]);
 }
return(0);
}

Как в индикаторе получить массив?

Ihor Herasko
8463
Ihor Herasko 2015.10.02 06:45  
elisseev2000:

Здравствуйте. Вопрос такой. Как передать массив таким образом?

Слишком много принципиальных ошибок.

библиотека

Здесь должно быть так (массивы нумеруются с нуля, а не с 1):

void GetCloseArray(double &A[])
{
 int total = (int)MathMin(ArraySize(A), _Bars);
 for (int k = 0; k < total; k++)
     A[k] = Close[k];
}

Хотя, если копируете именно таймсерии, то удобнее использовать  функции CopyClose, CopyOpen и т. п.

потом включаемый файл

здесь так:

#import "MyLib.ex4"
//+------------------------------------------------------------------+
void GetCloseArray(double &A[]);

потом индикатор

#property  indicator_chart_window 
#property indicator_buffers 1
#include <MyLib.mqh>
double A[121];
//+------------------------------------------------------------------+
int start()
{
   GetCloseArray(A);
   Alert(A[0]);
   return(0);
}
Олег
356
Олег 2015.10.02 07:37  
Спасибо огромное. и последний вопрос. как внутри библиотеки передавать массивы из одной функции в другую . например так не получается
void GetCloseArray(double &A[])
{
 int total = (int)MathMin(ArraySize(A), _Bars);
 for (int k = 0; k < total; k++)
     A[k] = Close[k];
}

void GetCloseArrayB(double &A[],double &B[])
{
 int total = (int)MathMin(ArraySize(A), _Bars);
 for (int k = 0; k < total; k++)
     B[k] = A[k];
}
Олег
356
Олег 2015.10.02 07:42  
разобрался. спасибо большое еще раз
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий