Нашел в include библиотеку ClassCorelation.mqh
пытаюсь сделать такой скрипт
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
double buf1[],buf2[];
ArrayInitialize(buf1,0);
ArrayInitialize(buf2,0);
int copied1=CopyClose("EURJPY",NULL,1,100,buf1);
int copied2=CopyClose("USDJPY",NULL,1,100,buf2);
double cor=Correlation::Spirman(buf1,buf2);
Print(cor);
}
а компилятор выдает такую ошибку
'Spirman' - access to non-static member or function 21 27
что я делаю не так?
то,что я объявляю и инициализирую double массив,а класс требует const double?
У меня такого ClassCorelation.mqh нет, но из описания ошибки четко видно, что надо создать объект класса Correlation.
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
Correlation m_corelation;
void OnStart()
{
//---
double buf1[],buf2[];
ArrayInitialize(buf1,0);
ArrayInitialize(buf2,0);
int copied1=CopyClose("EURJPY",NULL,1,100,buf1);
int copied2=CopyClose("USDJPY",NULL,1,100,buf2);
double cor=m_corelation.Spirman(buf1,buf2);
Print(cor);
}
Если не работает, приаттачьте ClassCorelation.mqh
В ClassCorelation.mqh перед double Spirman(...) пропишите static.
По какой-то причине многие не прописывают static там, где это логично. По итогу вынуждая создавать объекты там, где это вовсе не нужно. В частности, СБ этим страдает.
У меня такого ClassCorelation.mqh нет, но из описания ошибки четко видно, что надо создать объект класса Correlation.
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
Correlation m_corelation;
void OnStart()
{
//---
double buf1[],buf2[];
ArrayInitialize(buf1,0);
ArrayInitialize(buf2,0);
int copied1=CopyClose("EURJPY",NULL,1,100,buf1);
int copied2=CopyClose("USDJPY",NULL,1,100,buf2);
double cor=m_corelation.Spirman(buf1,buf2);
Print(cor);
}
Если не работает, приаттачьте ClassCorelation.mqh
спасибо,я просто не умею пользоваться классами. сейчас попробую.
у меня в штатной поставке,я так понимаю, в мт5 в Include\MyClass 2 файла ClassCorelation.mqh и ClassLinearRegression.mqh
проверил их наличие сейчас на разных терминалах,в обоих они присутствуют
Рассчитать коэффициенты корреляции также можно при помощи функций библиотеки Math.mqh
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
double buf1[],buf2[];
ArrayInitialize(buf1,0);
ArrayInitialize(buf2,0);
int copied1=CopyClose("EURJPY",NULL,1,100,buf1);
int copied2=CopyClose("USDJPY",NULL,1,100,buf2);
if(copied1!=copied2)
return;
double pearson,spearman,kendall;
if(MathCorrelationPearson(buf1,buf2,pearson))
PrintFormat("Pearson =%5.8f",pearson);
if(MathCorrelationSpearman(buf1,buf2,spearman))
PrintFormat("Spearman =%5.8f",spearman);
if(MathCorrelationKendall(buf1,buf2,kendall))
PrintFormat("Kendall =%5.8f",kendall);
}
2016.12.01 14:38:48.309 CorrTest (EURUSD,H1) Spearman =0.91392036
2016.12.01 14:38:48.310 CorrTest (EURUSD,H1) Kendall =0.74696847
Рассчитать коэффициенты корреляции также можно при помощи функций библиотеки Math.mqh
спасибо,я просто не умею пользоваться классами. сейчас попробую.
у меня в штатной поставке,я так понимаю, в мт5 в Include\MyClass 2 файла ClassCorelation.mqh и ClassLinearRegression.mqh
проверил их наличие сейчас на разных терминалах,в обоих они присутствуют
Папки MyClass в поставке нет, это чье-то творчество. Посмотрел, я правильно написал совет, все методы нестатические, надо создавать экземпляр.
И вот это смешно, это не конструктор )))
void Corrlation() ;// конструктор класса
void Correlation::Corrlation(void)
{
clProba=0 ;
}
Выложите и второй класс ClassLinearRegression.mqh пожалуйста, интересно посмотреть.
спасибо,всем ответившим.
способ Алексея дал результат.
сравнил 2 варианта Пирсон и Спирман, разница между корреляцией велика. по Пирсону 0.96, по Спирману всего лишь 0.81,используя упомянутую мной библиотеку
проверил на терминале,который тянул с метаквот. действительно, в штатной поставке нет такого. я смотрел на терминале,который ставил с адмиралмаркет. возможно,их добавка
Если нужно КК расчитать на каждом сдвиге окна, то каждый раз вызывать MathCorrelationPearson?
В таких случаях лучше свою функцию написать, которая хранит суммы и пересчитывает их с учетом ушедшего и добавленного элементов.
Файл Math.mqh нужно положить в папку terminal_data_folder\MQL5\Include\Math\Stat\.
спасибо.
нет,нет,я говорил про самую первую библиотеку. Math.mqh в штатной поставке есть.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нашел в include библиотеку ClassCorelation.mqh
пытаюсь сделать такой скрипт
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
double buf1[],buf2[];
ArrayInitialize(buf1,0);
ArrayInitialize(buf2,0);
int copied1=CopyClose("EURJPY",NULL,1,100,buf1);
int copied2=CopyClose("USDJPY",NULL,1,100,buf2);
double cor=Correlation::Spirman(buf1,buf2);
Print(cor);
}
а компилятор выдает такую ошибку
'Spirman' - access to non-static member or function 21 27
что я делаю не так?
то,что я объявляю и инициализирую double массив,а класс требует const double?