МГС  Московская Гигабитная Сеть
 www.umos.su info@umos.su  Выделенные линии Ве/б-Студия Хостинг Collocation
 Тарифы Вопросы и ответы Полезная информация Контакты

Софт >> MetaTrader

Страниц в ветке: 1
Roman Tatkin
Свой человек
***

Зарегистрирован: 12/02/2007
Сообщений: 83
Господа, как этот код для MT4 будет выглядеть на C++ ?
      #312748 - 21/09/2010 01:19

Никогда не работал с MetaTrader, хотя с омегой, wld, и amibroker доводилось ... впервые столкнулся с тем, что даже после установки MT4 и разбора кода с чтением справки так и не понял, как в MT4 устроен перебор баров и в какую сторону в каком случае ходят индексы. Как будет выглядеть код, приведённый ниже, в терминах C++ ? Скажем, есть входной массив, есть выходной, есть два параметра - что с этим всем будет делаться ?

Вот код (понятное дело, интересует функция int start()):

Code:

//+------------------------------------------------------------------+
//| iVAR.mq4 |
//| (C)opyright © 2008, Ilnur |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+

//The indicator displays a variation index of the price series,
//calculated on a previous interval which is 2^n long. The variation index
//shows what dominates in a time series - the trend or the flat component
//or the series acts randomly.

// M.M.Dubovikov, A.V.Kryanev, N.V.Starchenko
// Dimension of the Minimal Cover and Local Analysis of Fractal Time Series.

#property copyright "(C)opyright © 2008, Ilnur"
#property link "http://www.metaquotes.net"
//---- indicator options
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 0.5
//---- input parameters
extern int n = 5;
extern int nBars = 1000;
//---- indicator buffers
double ibuffer[];

#define LOG_2_0 0.69314718055994530941723212145818 //MathLog(2.0);

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexBuffer(0,ibuffer);
SetIndexStyle(0,DRAW_LINE);
SetIndexDrawBegin(0,Bars-nBars);
SetIndexLabel(0,"iVAR");
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("iVAR("+n+")");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, j, k, kCount, nTotal, nCountedBars = IndicatorCounted();
int ihigh, ilow, nInterval, nIntervalStart;
double Delta, Xc, Yc, Sx, Sy, Sxx, Sxy;
//---- last counted bar will be recounted
if(nCountedBars==0) nTotal = nBars;
if(nCountedBars>0) nTotal = Bars-nCountedBars-1;
//---- main loop
for(j=nTotal; j>=0; j--)
{
Sx = 0; Sy = 0; Sxx = 0; Sxy = 0;
for(i=0; i<=n; i++)
{
nInterval = 1 << (n-i); //MathPow(2,n-i);
kCount = 1 << i; //MathPow(2,i);
//---- summarise differences of the maximum and minimum prices on an interval
for(Delta=0, k=0; k<kCount; k++)
{
nIntervalStart = nInterval*k+j;
ihigh = iHighest(Symbol(),0,MODE_HIGH,nInterval,nIntervalStart);
ilow = iLowest(Symbol(),0,MODE_LOW,nInterval,nIntervalStart);
Delta += High[ihigh]-Low[ilow];
}
//---- compute coordinate of variation [Xc,Yc] in double logarithmic scale
Xc = (n-i)*LOG_2_0; //MathLog(2.0);
Yc = MathLog(Delta);
//---- accumulate data for finding of factors of line of regress by means of LMS (least mean squares)
Sx += Xc;
Sy += Yc;
Sxx += Xc*Xc;
Sxy += Xc*Yc;
}
//---- compute variation index (slope of the line of regress)
ibuffer[j] = -(Sx*Sy-(n+1)*Sxy)/(Sx*Sx-(n+1)*Sxx);
}
return(0);
}



Заранее очень признателен за любые разъяснения.


Опции: Распечатать пост   Напомнить мне!   Оповестить модератора  
Bigphone
Свой человек


Зарегистрирован: 03/06/2006
Сообщений: 53
Нахождение: Евразия
Re: Господа, как этот код для MT4 будет выглядеть на C++ ? [re: Roman Tatkin]
      #314624 - 17/10/2010 17:10

> не понял, как в MT4 устроен перебор баров и в какую сторону в каком случае ходят индексы

Цитата уже не помню откуда:

"Доступ к историческим данным можно получить, используя индексированные предопределенные массивы Time, Open, Low, High, Close, Volume. Исторически сложилось так, что индекс в этих массивах растет от конца к началу. Т.е., самые последние данные имеют индекс 0. Индекс 1 означает данные со смещением один период назад, индекс 2 - два периода назад, 3 - три периода назад и т.д..

// Пример:
// если Close на прошлом баре меньше, чем
// Close на позапрошлом баре - возращаем 0

if(Close[1] < Close[2])
return(0); "

Кроме того, можно поискать ответы во-первых, в учебнике по метатрейдеру (есть на mql4.com/ru), и на различных неофицальных учебниках, например:
http://forum.[censored].org/showthread.php?t=182&page=3
http://forum.profiforex.ru/showthread.php?t=5736
http://www.alpari.ru/ru/school/textbook/autotrading/articles_mql4/


Опции: Распечатать пост   Напомнить мне!   Оповестить модератора  
Страниц в ветке: 1



Дополнительная информация
1 зарегистрированных и 2 незарегистрированных пользователей просматривает форум.

Модератор:  michaelus, podval, Poul, 000, Adim, Akelo, C0Rpus, Der Aspirant, konkop, mda, mpfeltz, SGN, Рантье, TradingS, Uliss, x4x, Ex_dreamer, Apprentice, EVM, Stone, Socol, Ленивый, Kadavr, untoxa, VovaM, Asd, Igonter 

Распечатать тему

Доступ и ограничения:
      Вы не можете начать новую тему
      Вы не можете отвечать на тему
      HTML включён
      UBBCode включён

Рейтинг: **
Тема прочитана: 1543

Рейтинг темы

Перейти на

Send letter to Poul | Предупреждение Poul Trade Forum

Powered by UBB.threads™ 6.5.4

Generated in 0.016 seconds in which 0.004 seconds were spent on a total of 12 queries. Zlib compression enabled.