PDA

Просмотр полной версии : Помощь в программировании.



Шёпот
29.03.2012, 21:02
Тема создана для обсуждения практических вопросов, связанных с программированием, обмена опытом в оптимизации, построении алгоритмов и решении технических задач.

Шёпот
29.03.2012, 21:19
У меня возникла тупиковая ситуация: код уже знаю наизусть, перелопатил весь, а ошибку найти не могу. Идея такая: был взят индикатор Скользящая Средняя, из него выкинул все режимы кроме взвешенного (LWMA). На этом этапе всё работает. Дальше ввожу обращение к ClusterDelta_Volume и вместо взвешивания цены временем, взвешиваю её объёмом по формуле: (Сумма Объёмов за период/Количество Баров за период)/(Цена*Объём). И тут я видимо запутался в циклах - индикатор не отрисовывается. Кому не лень, посмотрите пожалуйста, в чём там ошибка, там кода совсем немного (ошибка в функции, обозначенной "Вычислительный модуль", там меньше 20 строк кода).804

Mr.Bags
30.03.2012, 13:08
ошибка тут volume=iCustom(NULL,0,"ClusterDelta_Volume",0,pos); //Объём текущего бара
при вызове iCustom нужно перечислять все параетры сверху вниз вызываемого индикатора
нужно volume=iCustom(Symbol(),0,"ClusterDelta_Volume","__",Instrument,Update_in_sec,MetaTrader_GTM,alert,usl ,0,pos); //Объём текущего бара
например так
volume=iCustom(Symbol(),0,"ClusterDelta_Volume","__","AUTO",14,"AUTO",false,"vt>=500",0,pos);

Шёпот
30.03.2012, 16:07
Спасибо! А что вот это за параметр (выделен жирным) volume=iCustom(Symbol(),0,"ClusterDelta_Volume","_ _",Instrument,Update_in_sec,MetaTrader_GTM,alert,u sl,0,pos);
P.S. Сергей, с днём рождения!!!:congratulate:

Mr.Bags
03.04.2012, 06:30
Условие на Alert означает если текущий объем больше 500 лот то будет уведомление.

Шёпот
03.04.2012, 12:59
А к ClusterDelta_Delta такое же обращение, с
...."_ _","AUTO",14,"AUTO",false,"vt>=500",0,pos или там алерта нет?

cashflow
06.11.2012, 07:06
Доброго времени суток..

Подскажите плиз как из индикатора в советнике выдернуть макс объем.. Пробовал уже по всякому .. нерастет :(

double Max_Vol= iCustom(NULL, 0, "ClusterDelta_VolumeProfile","--- Futures Ticker or AUTO ","AUTO","AUTO",true,300,"","",2,"2012.01.01 00:00","2012.01.01 00:00",1,0,0,"",0,60,0,LightGray,LightGray,LightGray,1,0,0);

где ошибка?

Заранее спасибо..

Mr.Bags
07.11.2012, 07:19
Дак индикатор ClusterDelta_VolumeProfile он ничего не возвращает- он рисует свои значения на тредовыми линиями(гистограмма объема). вам нужно делать перебор объектов(трендовых линий) по маске VPLine_ и из их свойство доставать нужны значения

cashflow
07.11.2012, 09:34
Дак индикатор ClusterDelta_VolumeProfile он ничего не возвращает- он рисует свои значения на тредовыми линиями(гистограмма объема). вам нужно делать перебор объектов(трендовых линий) по маске VPLine_ и из их свойство доставать нужны значения

спасибо..

member_d
27.11.2012, 19:15
Голову сломал. Помогите пожалуйста с кодом. Никак не получается получить индекс произвольного бара. Хотел через индекс обратиться к ценам бара. Может специалисты укажут другой путь. Заранее спасибо.
Код:

string myday="D"+"'"+Year()+"."+Month()+"."+(Day()-1)+" "+"21"+":"+"00"+"'";
int mybar=iBarShift(NULL, 0, myday);
Comment (mybar);
return(0);

Когда третьим параметром, непосредственно, подставляю D'2012.11.01 15:00' например, индекс бара выводится на экран. Если подставляю строку mayday выдает пятизначное число, не имеющее ничего общего с индексом бара.

Mr.Bags
28.11.2012, 02:06
Голову сломал. Помогите пожалуйста с кодом. Никак не получается получить индекс произвольного бара. Хотел через индекс обратиться к ценам бара. Может специалисты укажут другой путь. Заранее спасибо.
Код:

string myday="D"+"'"+Year()+"."+Month()+"."+(Day()-1)+" "+"21"+":"+"00"+"'";
int mybar=iBarShift(NULL, 0, myday);
Comment (mybar);
return(0);

Когда третьим параметром, непосредственно, подставляю D'2012.11.01 15:00' например, индекс бара выводится на экран. Если подставляю строку mayday выдает пятизначное число, не имеющее ничего общего с индексом бара.
непойму зачем ты первую букву D пишешь в ней ошибка. и еще можешь сделать преобразование чисел в троку с помощью функции Doubletostr

string myday=Year()+"."+Month()+"."+(Day()-1)+" "+"21"+":"+"00"+"'";
int mybar=iBarShift(NULL, 0, myday);
Comment (mybar);
return(0);

member_d
28.11.2012, 15:30
Пробовал я и так. Может руки кривые или мозги, сейчас вообще на работе и ничего не соображаю. Дело в том, что если функцию iBarShift задать так: iBarShift(NULL, 0, D'2012.11.27 15:00') то она вернет индекс 15-ти часового бара за 27-е число. Если же поставить просто дату, то возвращается пятизначное число, неизвестно что означающее. А может я чего-то не понимаю.

deniss
28.11.2012, 21:21
Пробовал я и так. Может руки кривые или мозги, сейчас вообще на работе и ничего не соображаю. Дело в том, что если функцию iBarShift задать так: iBarShift(NULL, 0, D'2012.11.27 15:00') то она вернет индекс 15-ти часового бара за 27-е число. Если же поставить просто дату, то возвращается пятизначное число, неизвестно что означающее. А может я чего-то не понимаю.

а не пробовал через ArrayBSearch ?

DateTime my_variable=D'2012.11.27 15:00';
int s = ArrayBsearch(Time,my_variable);

member_d
29.11.2012, 06:39
Спасибо, попробуем. Только я не могу задавать явно дату и время. Это была попытка получить дату и время через переменную относительно текущей даты. Почему-то не сработало. Видимо придется через открытие текущего дня определять индекс бара с open дня и потом уже дальше вглубь. Будем дальше пытать остатки мозгов. Я не силен в MQL4 и если кто-то сделает что-то подобное быстрее меня, буду рад. Для чего это? Собственно для того, что бы создать массив определенной размеренности, начиная с какого-то бара и получить из него цены для анализа.

VadimVG
20.01.2013, 20:40
Кто поможет чайнику!
Хочу создать простенький индикатор на mql4. Прямой отрезок между двумя заданными точками на графике. Сам не смог разобраться как это сделать, по этому пишу сюда.

deniss
20.01.2013, 20:47
ну вроде так:

ObjectCreate(rec_name,OBJ_TREND,0,время1,цена1,вре мя2,цена2);
ObjectSet(rec_name,OBJPROP_RAY, false);
ObjectSet(rec_name,OBJPROP_COLOR,цвет);

VadimVG
20.01.2013, 20:52
Огромное спасибо. Еще вопрос, это в каком месте написать нужно, после int init() {, после int deinit() {, или после int start() { -?

prokoppolo
24.02.2013, 11:27
повторно
ищу человека который согласиться значительно улучшить индикатор

combo_bars_daily

есть исходники


для мт4 есть индикаторы

combo_bars_daily_1.7.ex4

combo_bars_daily_1.7.zip

но над ними можно еще поработать
улучшить
очень сильно

у нас вообще в инете столько полезных полусырых индюков валяется
а если такие для нинзи сделать
должно выйти еще лучше


напишу подробное ТЗ


кто будет браться пишите в личку

Fox.RM
01.07.2013, 22:42
Возможно у кого-нибудь есть индикатор дивергенций CumDelta для МТ4?
Если нет может, кто подскажет как оптимизировать ЭТОТ:

//+------------------------------------------------------------------+
//| ClusterDelta_CumDelta_Div.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""
//----
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Green
#property indicator_color3 Red
#property indicator_width1 1
#property indicator_width2 2
#property indicator_width3 2

//---- input parameters
extern string separator3 = "*** Indicator Settings ***";
extern bool drawDivergenceLines = true;
extern bool displayAlert = false;
//---- buffers
double Momentum[];
double bullishDivergence[];
double bearishDivergence[];
double MomDiv[];
//----
static datetime lastAlertTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 0);
SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 0);
SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 0);
SetIndexStyle(3, DRAW_NONE);
//----
SetIndexBuffer(0, Momentum);
SetIndexBuffer(1, bullishDivergence);
SetIndexBuffer(2, bearishDivergence);
SetIndexBuffer(3, MomDiv);
//----
SetIndexArrow(1, 233);
SetIndexArrow(2, 234);
//----
IndicatorDigits(Digits + 2);
IndicatorShortName("ClusterDelta_Div");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
for(int i = ObjectsTotal() - 1; i >= 0; i--)
{
string label = ObjectName(i);
if(StringSubstr(label, 0, 14) != "DivergenceLine")
continue;
ObjectDelete(label);
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int countedBars = IndicatorCounted();
if(countedBars < 0)
countedBars = 0;
CalculateIndicator(countedBars);
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CalculateIndicator(int countedBars)
{
for(int i = 300; i >= 0; i--)
{
CalculateMomDiv(i);
CatchBullishDivergence(i + 2);
CatchBearishDivergence(i + 2);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CalculateMomDiv(int i)
{
Momentum[i] = iCustom(NULL, 0, "ClusterDelta_CumDelta", 0, i);
MomDiv[i] = Momentum[i];
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CatchBullishDivergence(int shift)
{
if(IsIndicatorTrough(shift) == false)
return;
int currentTrough = shift;
int lastTrough = GetIndicatorLastTrough(shift);
if(MomDiv[currentTrough] > MomDiv[lastTrough] && Low[currentTrough] < Low[lastTrough])
{
bullishDivergence[currentTrough] = MomDiv[currentTrough];
if(drawDivergenceLines == true)
{
DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], Low[currentTrough],
Low[lastTrough], Green, STYLE_SOLID);
DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough], MomDiv[currentTrough],
MomDiv[lastTrough], Green, STYLE_SOLID);
}
if(displayAlert == true)
DisplayAlert("Classical bullish divergence on: ", currentTrough);
}
if(MomDiv[currentTrough] < MomDiv[lastTrough] && Low[currentTrough] > Low[lastTrough])
{
bullishDivergence[currentTrough] = MomDiv[currentTrough];
if(drawDivergenceLines == true)
{
DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], Low[currentTrough],
Low[lastTrough], Green, STYLE_DOT);
DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough], MomDiv[currentTrough],
MomDiv[lastTrough], Green, STYLE_DOT);
}
if(displayAlert == true)
DisplayAlert("Reverse bullish divergence on: ", currentTrough);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CatchBearishDivergence(int shift)
{
if(IsIndicatorPeak(shift) == false)
return;
int currentPeak = shift;
int lastPeak = GetIndicatorLastPeak(shift);

if(MomDiv[currentPeak] < MomDiv[lastPeak] && High[currentPeak] > High[lastPeak])
{
bearishDivergence[currentPeak] = MomDiv[currentPeak];
if(drawDivergenceLines == true)
{
DrawPriceTrendLine(Time[currentPeak], Time[lastPeak], High[currentPeak],
High[lastPeak], Red, STYLE_SOLID);
DrawIndicatorTrendLine(Time[currentPeak], Time[lastPeak], MomDiv[currentPeak],
MomDiv[lastPeak], Red, STYLE_SOLID);
}
if(displayAlert == true)
DisplayAlert("Classical bearish divergence on: ", currentPeak);
}
if(MomDiv[currentPeak] > MomDiv[lastPeak] && High[currentPeak] < High[lastPeak])
{
bearishDivergence[currentPeak] = MomDiv[currentPeak];
if(drawDivergenceLines == true)
{
DrawPriceTrendLine(Time[currentPeak], Time[lastPeak], High[currentPeak],
High[lastPeak], Red, STYLE_DOT);
DrawIndicatorTrendLine(Time[currentPeak], Time[lastPeak], MomDiv[currentPeak],
MomDiv[lastPeak], Red, STYLE_DOT);
}
if(displayAlert == true)
DisplayAlert("Reverse bearish divergence on: ", currentPeak);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool IsIndicatorPeak(int shift)
{
if(MomDiv[shift] >= MomDiv[shift+1] && MomDiv[shift] > MomDiv[shift+2] &&
MomDiv[shift] > MomDiv[shift-1])
return(true);
else
return(false);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool IsIndicatorTrough(int shift)
{
if(MomDiv[shift] <= MomDiv[shift+1] && MomDiv[shift] < MomDiv[shift+2] &&
MomDiv[shift] < MomDiv[shift-1])
return(true);
else
return(false);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int GetIndicatorLastPeak(int shift)
{
for(int i = shift + 5; i < Bars; i++)
{
if(Momentum[i] >= Momentum[i+1] && Momentum[i] >= Momentum[i+2] &&
Momentum[i] >= Momentum[i-1] && Momentum[i] >= Momentum[i-2])
{
for(int j = i; j < Bars; j++)
{
if(MomDiv[j] >= MomDiv[j+1] && MomDiv[j] > MomDiv[j+2] &&
MomDiv[j] >= MomDiv[j-1] && MomDiv[j] > Momentum[j-2])
return(j);
}
}
}
return(-1); }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int GetIndicatorLastTrough(int shift)
{
for(int i = shift + 5; i < Bars; i++)
{
if(Momentum[i] <= Momentum[i+1] && Momentum[i] <= Momentum[i+2] &&
Momentum[i] <= Momentum[i-1] && Momentum[i] <= Momentum[i-2])
{
for (int j = i; j < Bars; j++)
{
if(MomDiv[j] <= MomDiv[j+1] && MomDiv[j] < MomDiv[j+2] &&
MomDiv[j] <= MomDiv[j-1] && MomDiv[j] < MomDiv[j-2])
return(j);
}
}
}
return(-1); }
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void DisplayAlert(string message, int shift)
{
if(shift <= 2 && Time[shift] != lastAlertTime)
{
lastAlertTime = Time[shift];
Alert(message, Symbol(), " , ", Period(), " minutes chart");
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void DrawPriceTrendLine(datetime x1, datetime x2, double y1,
double y2, color lineColor, double style)
{
string label = "DivergenceLine2.1# " + DoubleToStr(x1, 0);
ObjectDelete(label);
ObjectCreate(label, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(label, OBJPROP_RAY, 0);
ObjectSet(label, OBJPROP_COLOR, lineColor);
ObjectSet(label, OBJPROP_STYLE, style);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void DrawIndicatorTrendLine(datetime x1, datetime x2, double y1,
double y2, color lineColor, double style)
{
int indicatorWindow = WindowFind("ClusterDelta_Div");
if(indicatorWindow < 0)
return;
string label = "DivergenceLine2.1$# " + DoubleToStr(x1, 0);
ObjectDelete(label);
ObjectCreate(label, OBJ_TREND, indicatorWindow, x1, y1, x2, y2, 0, 0);
ObjectSet(label, OBJPROP_RAY, 0);
ObjectSet(label, OBJPROP_COLOR, lineColor);
ObjectSet(label, OBJPROP_STYLE, style);
}
//+------------------------------------------------------------------+

Жутко вешает терминал. Индикатор на базе дивергенции Momentuma.
Заранее спасибо.

Fox.RM
02.07.2013, 20:19
ни у кого нет предложений?

deniss
02.07.2013, 21:49
ни у кого нет предложений?

на iCustom'е тормозит?

Fox.RM
03.07.2013, 07:21
на iCustom'е тормозит?
Да на нем. С другими индикаторами порядок. Этот даже не запускается. Думаю с циклами перебор для и без того тяжеловатого для МТ iCustom(ClusterDelta).
Но других вариантов пока нет.

deniss
03.07.2013, 09:50
Да на нем. С другими индикаторами порядок. Этот даже не запускается. Думаю с циклами перебор для и без того тяжеловатого для МТ iCustom(ClusterDelta).
Но других вариантов пока нет.

ну я толком не знаю iCustom, но думаю, что раз цикл идет в 300 итераций то идет 300 вызовов iCustom с полной подгрузкой данных. В таком случае проще совокупить этот исходник с общим массивом данных по дельте, которые нужно один раз получить с сервера.

короче в скайп стучите, доведем до ума

Fox.RM
03.07.2013, 22:55
Вопрос снят, все работает. Спасибо!

prokoppolo
27.07.2013, 21:18
может кто знает как в мт4 индикаторе зафиксировать максимальное значение индикатора
что бы например в индикаторе волюм всегда было максимум 15 000
а не так, что индикатор подстраивается под максимальное видимое значение

a_m
27.07.2013, 21:28
Вроде, в настройках индикатора вкладка "цвета" Закрепить минимум / максимум.

deniss
27.07.2013, 21:29
может кто знает как в мт4 индикаторе зафиксировать максимальное значение индикатора
что бы например в индикаторе волюм всегда было максимум 15 000
а не так, что индикатор подстраивается под максимальное видимое значение

банально в свойствах индикатора в закладке общие "Закрепить минимум" и "максимум" :)

prokoppolo
27.07.2013, 21:39
банально в свойствах индикатора в закладке общие "Закрепить минимум" и "максимум" :)

:)))) точно

prokoppolo
27.07.2013, 21:44
еще вопрос
может кто встречал индикатор или скрипт для мт4
что бы отображался график только например с 9:00 до 22:00
а азия не отображалась
типа установить в индикаторе начало и окончание сессии
а остальное не видеть


п.с. а то в сети смотрю
только квадратиками умеют раскрашивать торговые сессии :)

Alexey-fx
12.09.2013, 23:38
Ребята, пожалуйста, подскажите где ошибка. Ато я уже голову сломал.
Хочу написать простейший фильтр, а он молчит. При компиляции ошибок нет, но индюк ничего не показывает
Вот код

int limit=Bars-IndicatorCounted();
for(int i=limit-1;i>=0;i--)
{
double v0 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, i);
if (v0 == EMPTY_VALUE)
v0 = 0;
double v1 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, (i+1));
if (v1 == EMPTY_VALUE)
v1 = 0;
if (v0>0 && v1>0)
{
if v1/v2=a
x=1;
else x=0;
}
Signal[i]=x;
}

Заранее благодарен

Ranc
13.09.2013, 02:50
еще вопрос
может кто встречал индикатор или скрипт для мт4
что бы отображался график только например с 9:00 до 22:00
а азия не отображалась
типа установить в индикаторе начало и окончание сессии
а остальное не видеть


п.с. а то в сети смотрю
только квадратиками умеют раскрашивать торговые сессии :)

Саша, скинь,плиз, индюк, который показывает сессии квадратиками или просто линиями отмечает необходимые интервалы времени.

Ranc
13.09.2013, 02:53
Ребята, пожалуйста, подскажите где ошибка. Ато я уже голову сломал.
Хочу написать простейший фильтр, а он молчит. При компиляции ошибок нет, но индюк ничего не показывает
Вот код

int limit=Bars-IndicatorCounted();
for(int i=limit-1;i>=0;i--)
{
double v0 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, i);
if (v0 == EMPTY_VALUE)
v0 = 0;
double v1 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, (i+1));
if (v1 == EMPTY_VALUE)
v1 = 0;
if (v0>0 && v1>0)
{
if v1/v2=a
x=1;
else x=0;
}
Signal[i]=x;
}

Заранее благодарен

1 Можно весь индюк в студию, а также описание того, что желаете получить.
2 Имейте ввиду, что данные теперь не бесплатны. Вызываемый индикатор "ClusterX_Volume" должен получать данные с сервера.

Alexey-fx
13.09.2013, 18:37
Саша, скинь,плиз, индюк, который показывает сессии квадратиками или просто линиями отмечает необходимые интервалы времени.

Я пользуюсь вот этим

Alexey-fx
13.09.2013, 20:27
1 Можно весь индюк в студию, а также описание того, что желаете получить.
2 Имейте ввиду, что данные теперь не бесплатны. Вызываемый индикатор "ClusterX_Volume" должен получать данные с сервера.

1. Полный код в приложении.
Суть его банальна. Это фильтр. Если последние несколько значений объема (вытянутые из КластерХ) ответчает некоторым условиям, то индюк показывает, если не отвечает, то молчит. Как-то так)))
2. Спасибо, я знаю об этом. У меня чуть-чуть есть истории (подсобирал пока Кластер был бесплатным). Надеюсь что этого хватит для проверки работы индикатора. Если он будет работать, то буду дальше думать.

TheXpert
13.09.2013, 21:36
Дальше сами.
Индикатор показывает, но там еще есть что править. Для примера посмотрите любой colored индикатор

Alexey-fx
15.09.2013, 23:05
Спасибо за помощь. Увидел свои ошибки. Теперь буду думать как их править.

Alexey-fx
22.09.2013, 23:11
Доброго времени суток!

Уважаемый TheXpert, прошу Вашей помощи.
Я устранил ошибки в индикаторе, который Вы помогли мне подправить (еще раз спасибо Вам за это). Разноцветным я его пока не делал, но зато теперь (что для меня гораздо важнее) он показывает мне именно то, что я от него хочу (3557), а именно простой фильтр по объему и дельте с очень широкими возможностями.
Теперь хочу проверить есть ли перспектива у этой идеи.
Из учебника mql взял пример простого эксперта и внес изменения в него в разделы 1 (описание переменных) и 5 (торговые критерии), больше ничего не менял (3558). При компиляции эксперта ошибок не было.
Решил прогнать в тестере, но не тут-то было. Тестер мне так и не открыл ни одной сделки, что я только не пробывал. При прогонке получается такая картинка. Он там чё-т ругается в журнале.
3563

И тут я завис. Понять не могу, почему индикатор работает (на картинке красная гистограмма в подвале окна), а советник с теми же критериями фильтрации - нет.
Либо ошибка в коде (что ОЧЕНЬ не исключено, поскольку опыта в программировании не имею, но тружусь и стараюсь разобраться), либо это связано со спецификой работы советников и/или индикаторов КластерХ (и тогда без Ваших комментариев просто не обойтись), либо у меня руки кривые и я что-то делаю совсем не правильно.
Прошу Вас, помогите.

ЗЫ
Обратился к Вам потому, что в индюке вытягиваются данные из КластерХ Волум & Дельта. Вы уж простите ))
Поймите меня правильно, я не прошу Вас переписывать код (я к Вам уже обращался с таким вопросом и Вы мне вполне понятно все объяснили). Я прошу Вас указать на мою ошибку и, если Вам не сложно, подсказать как её можно исправить. А дальше я сам попытаюсь разобраться. Я не лентяй и много читаю, но, к сожалению, не все понимаю.

TheXpert
23.09.2013, 10:54
Доброго времени суток!

Судя по скрину, вам надо разрешить вызов dll. (Сервис -- настройки -- советники).
Если не поможет, отпишитесь.

Alexey-fx
04.10.2013, 02:07
Подскажите, плиз, как правильно описать в коде следующее условие:
является ли минимальная цена последних 3-х баров (без учета 0-го) минимальной ценой за последниие n баров (без учета 4-х последних баров)
аналогично для хая
я попытался это сделать так:

int limit=Bars-IndicatorCounted();

for(int i=limit-1;i>=0;i--)
{
int x=0;
double L1=0, L2=0, H1=0, H2=0;

L1=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,i+3,i+1));
L2=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,i+n-4,i+4));
H1=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,i+3,i+1) );
H2=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,i+n-4,i+4));

if (L1<L2)
x=1;
else
{
if (H1>H2)
x=-1;
}
Signal[i]=x;
}
где n - внешняя переменная (больше 4-х)
Такой код ничего не дает.:unknown:
Пробывал как по книжке
L1=Low[iLowest(NULL,0,MODE_LOW,i+3,i+1)];
Также ничего
Пробывал и др. варианты - резалт всегда один и тот же
Подскажите как правильно:help:

Заранее благодарен.
Alex

Alexey-fx
06.10.2013, 04:24
Сам спросил - сам отвечаю :)

Разобрался в чём была ошибка.
А вернее даже сразу две ошибки.

1. было - int limit=Bars-IndicatorCounted();
а надо - int limit=(Bars-n)-IndicatorCounted();

2. было - L1=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,i+3,i+1));
а надо - L1=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,3,i+1));


Alex[/QUOTE]

stefant
07.12.2013, 19:08
Dobrij vecser . Trebujutsa uslugi programera kotorij napiset solidnij sovetnik po moej TZ . Prosu svjazatsa po skypu -> stefantell . Spasibo

Lelouch1
15.12.2013, 16:49
Здравствуйте. Не подскажите как из индикатора Cluster_Delta_Advanced сделать следующего советника - если дельта > 500, то бай.

armen1986
21.01.2014, 13:00
Подскажите пожалуйста. Написал советник, где вызывается индикатор ClusterDelta_Volume, на тесте все удачно загружается, но значение индикатора дает 0. Вот вызов индикатора mv=iCustom(NULL,0,"ClusterDelta_Volume","Coment","AUTO",14,"AUTO",0,1); Скажите пожалуйста почему значение на истории дает 0. как мне в советнике использовать значение обьема? Не как не тестируется.

TheXpert
24.01.2014, 12:10
Как вариант, использовать ClusterX.

martin92
29.01.2014, 19:30
Здравствуйте. Скажите где найти описание команд запроса параметров индикаторов с примерами, в частности - ClusterDelta-Delta ?

maxikuku
24.03.2014, 17:31
Здравствуйте.
Подскажите, пожалуйста, с таким вопросом.
Есть строка в советнике вызова внешнего индикатора:
vol = iCustom("EURUSD", 0, "ClusterDelta_Volume", 0, i);
Как ее следует изменить, чтобы советник можно было прогнать на истории, т.е. он брал данные из файла .csv по мере прохождения теста.
Файл взят из download-зоны с такими записями:
DATE;TIME;HIGH;LOW;OPEN;CLOSE;VOLUME;DELTA;ASK;BID

Пытаюсь сам разобраться, но что-то совсем не получается. Или не совсем получается :)

maxikuku
26.03.2014, 11:33
Здравствуйте.
Подскажите, пожалуйста, с таким вопросом.


Печально. Никто помочь не может?
Может в личку тогда, если не бескорыстно.

Norman Lito
29.03.2014, 12:03
Доброго времени суток.
Колеги, не кто индикатор не возьмется наваять.? Суть на картинке:
http://pikucha.ru/icQ4N/thumbnail/%D0%91%D1%8B%D1%87%D1%8C%D1%91.jpeg (http://pikucha.ru/icQ4N)
По хай лоу бара на котором объем естественно. И данные по обьемам чтоб тянул с ClusterX_Get Volume естественно, для уменьшения тормозов.:rolleyes: И глубину истории в барах чтоб ставить можно было...̶и̶ ̶к̶о̶р̶о̶в̶а̶н̶ы̶ ̶г̶р̶а̶б̶и̶л Если появится заинтересованность в платном написании свистните в личку обговорим. Заранее благодарю.

istep
08.06.2014, 13:22
Подскажите можно ли в тестере MT4 сделать отрисовку индикатора "ClusterDelta_VolumeProfile" (скажем каждый час) и если можно то как?

funtic
11.12.2015, 08:51
Привет всем .Мне тут вчера робота подкинули ,нужен компетентный человек который вынес бы своё решение,стоит его ставить на реал или нет.

deniss
11.12.2015, 13:11
Привет всем .Мне тут вчера робота подкинули ,нужен компетентный человек который вынес бы своё решение,стоит его ставить на реал или нет.

Нет, однозначно.

На демо на 3 месяца - потом нам скажете.

Ranc
12.12.2015, 05:44
Иногда создается впечатление, что тестер в МТ4 и сами боты живут самостоятельной жизнью. Даже более-менее прибыльные стратегии из-за некорректных действий ПО МТ4 могут сливать. Поэтому результирующий стейт - не показатель. Надо каждую сделку проверять и анализировать.

ashkasem
12.12.2015, 16:21
привет всем! как узнать код VWAP хотел бы написать советник, кстати я чайник)

deniss
12.12.2015, 19:43
привет всем! как узнать код VWAP хотел бы написать советник, кстати я чайник)

Берете кластер, умножаете цену на объем, суммируете это все, затем суммируете только объемы и первое делите на второе. Результат будет VWAP данного кластера. Обычно наблюдают как движется цена в течении какого-то периода: день, неделя и т.д.

ashkasem
16.12.2015, 06:03
а код на Мета Эдитор не подскажешь добрый друг)))
типа int; ... и т д

nikelodeon
20.04.2016, 22:22
Всем привет, помогите пожалуйста с профилем дельты. Нужен специальный индикатор профиля. Кто может помочь словом, а может и делом?????

Alexey-fx
26.04.2016, 09:16
Добрый день, уважаемые форумчане!

Прошу вашей помощи в решении следующей задачи.
Есть CSV-файл истории (взят промо-файл на этом сайте).

Хочу отобразить на экране (или подгрузить данные в терминал) историю из этого CSV-файла. Меня интересуют только объем и дельта.
Я себе это представляю так – объемы в одном подокне под графиком, дельта во втором подокне под объемами.
Так как разные подокна, то я понимаю, что тут необходимо будет два индикатора (или скрипта???) – один для объемов, другой для дельты. Они будут практически идентичными.
Также, если это возможно, то сразу предусмотреть такую возможность, что бы в будущем сторонний пользовательский индикатор (или советник) смог как-то обращаться к этому индикатору/скрипту и работать с данными объема и дельты. Или так не получится?

Я читал справку по MQL по файловым операциям, но, честно признаюсь, туго. Примеров маловато.
Хочется разобраться в этом самому. Но не знаю с чего начать

Заранее благодарен!
Всем профитов!!!

VShm
26.04.2016, 11:55
Нет, однозначно.

На демо на 3 месяца - потом нам скажете.

Здравствуйте. Есть примеры что робот в МТ4 зарабатывает на длительном промежутке времени?

Alexey-fx
10.05.2016, 15:53
Доброго времени суток!

В продолжение своего вопроса о чтении файла истории

Начал копать. Пока всё что удалось найти - это скрипт, который читает CSV-файл и рисует вертикальные линии на графике
Взял его за основу. Немного подправил.
Но сейчас у меня возникла проблема с выводом данных в функции DrawIndicator.
Пока ума не приложу, как и что там надо написать, что бы правильно рисовалась гистограмма объемов (вернее сказать, что бы она вообще там рисовалась).
Прошу людей, разбирающихся в MQL посмотреть и подсказать.

Вот код:
//+------------------------------------------------------------------+
//| History_VOLUME_1.mq4 |
//| В качестве основы взят скрипт |
//| http://www.mqlvopros.net |
//| Список вопросов |
//| Вопрос |
//| Здравствуйте! Подскажите, пожалуйста, как правильно вызвать |
//| теперь функцию ReadCSVFile |
//+------------------------------------------------------------------+

//--- indicator settings
#property indicator_separate_window // рисуем индикатор в отдельном окне
#property indicator_buffers 1 // количество буферов индикатора - 1
#property indicator_color1 Black // цвет индикаторной линии
#property indicator_width1 2 // толщина индикаторной линии - 2

//---- indicator buffers
double VOL[];
//+------------------------------------------------------------------+
//| Структура для хранения данных |
//+------------------------------------------------------------------+
struct History
{
datetime date_op; // дата открытия бара
datetime time_op; // время открытия бара
datetime date_cl; // дата закрытия бара
datetime time_cl; // время закрытия бара
double open; // цена открытия
double high; // максимальная цена
double low; // минимальная цена
double close; // цена закрытия
int volume; // объем
int delta; // дельта
int ask; // аск
int bid; // бид
datetime expiration; // месяц экспирации
};
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//--- drawing settings
SetIndexStyle(0,DRAW_HISTOGRAM);
//---- indicator buffers mapping
SetIndexBuffer(0,VOL);
//--- name for DataWindow and indicator subwindow label
IndicatorShortName("VOLUME");
SetIndexLabel(0,"VOLUME");
//--- initialization done
return(0);
}
//--------------------------------------------------------------- 1 --
int start() // Спец. функция start
//--------------------------------------------------------------- 2 --
{
string File_Name="EURO_15_min_2014.csv"; // Имя файла истории
{
//---
History lines[];
// Прочитаем данные из файла
// Если файл успешно найден и открыт получим true
if(ReadCSVFile(File_Name, lines))
{
// проверим были ли собраны данные
if(ArraySize(lines) > 0)
{
// отрисуем каждый прочитанный объем
for(int i = ArraySize(lines)-1; i >= 0; i--)
DrawIndicator(lines[i]);
}
else
Print("Данные отсутствуют!");
}
else
Print("Ошибка извлечения данных!");
//---
}
return (0);
}
//---------------------------------------------------------------- 3 --
//+--------------------------------------------------------------------+
//| Выполняет чтение данных из csv фала
//| fileName - имя csv файла
//| lines - результирующий массив
//+--------------------------------------------------------------------+
bool ReadCSVFile(string File_Name, History &lines[])
{
bool _result = false;
// Обнуление результирующего массива
ArrayResize(lines,0);
// открытие файла
int _fileHandle = FileOpen(File_Name,FILE_READ|FILE_CSV,";");
if(_fileHandle != INVALID_HANDLE)
{
// изменим результат выполнения метода
_result = true;
// Установка файлового указателя в начало файла
FileSeek(_fileHandle,0,SEEK_SET);
// Чтение до конца файла
while(!FileIsEnding(_fileHandle))
{
// увеличим размер результирующего массива
ArrayResize(lines,ArraySize(lines)+1);
// получим номер добавленного элемента
int _addItemNum = ArraySize(lines)-1;
// чтение даты открытия бара
lines[_addItemNum].date_op = (int)FileReadNumber(_fileHandle);
// чтение времени открытия бара
lines[_addItemNum].time_op = FileReadString(_fileHandle);
// чтение значения объема
lines[_addItemNum].volume = FileReadDatetime(_fileHandle);
}
// Закроем файл
FileClose(_fileHandle);
}
else
Print("Ошибка открытия файла: " + IntegerToString(GetLastError()));
//
return _result;
}
//+------------------------------------------------------------------+
// Метод выводящий в подокно гистограмму объема
//+------------------------------------------------------------------+
bool DrawIndicator(History &lines)
{
bool _result = false;
// отрисовывать необходимо только сделки по тек инструменту
if(lines.date_op != 0) return _result;

// найдем индекс бара, на котором нужно разместить графический объект
int _indexBar = iBarShift(_Symbol,_Period, lines.orderOpenTime, true);
if(_indexBar > -1)
{
// Составим имя графического объекта
string _objName = "order #"+IntegerToString(lines.ticketNum);
// Проверим, что бы такого графического объекта не существовало
if(ObjectFind(0, _objName) == -1)
{
// Определим тип объекта в зависимости от тип ордера
ENUM_OBJECT _objType = NULL;
if(lines.orderType == OP_BUY)
{
_objType = OBJ_ARROW_BUY;
}
else
if(lines.orderType == OP_SELL)
{
_objType = OBJ_ARROW_SELL;
}
if(_objType != NULL)
{
// Создание графического объекта
if(!ObjectCreate(0, _objName, _objType, 0, Time[_indexBar],
lines.orderOpenPrice))
{
Print("Ошибка при создании объекта "+_objName+
" #"+IntegerToString(GetLastError()));
}
}
}
}
//
return _result;
}
//+------------------------------------------------------------------+

ПС
Может я зря велосипед изобретаю и у кого-нибудь уже есть такой индикатор, который читает историю ???

deniss
10.05.2016, 16:10
Доброго времени суток!

В продолжение своего вопроса о чтении файла истории



[...skip...]
//---- indicator buffers
double VOL[];
[...skip...]
int init()
{
[...skip...]
SetIndexBuffer(0,VOL);
[...skip...]



ПС
Может я зря велосипед изобретаю и у кого-нибудь уже есть такой индикатор, который читает историю ???

Грубо говоря у тебя массив таймсерий - Time, Bars, Open, Close и так далее.

Последний (текущий) бар имеет индекс 0, все что влево от него идет 1, 2, 3 и так далее

у тебя есть массив VOL, он определен как буфер для гистограммы объема

Соответственно все значения в этом буфере будут отображены как гистограмма индикатора. Номера индексов такие же как и таймсерий.

Задача: получить время и объем бара из СSV, найти соответствующее время открытия в МТ4, найти его порядковый номер и присвоить порядковому номеру массива VOL значение объема. Для поиска можно использовать функцию MT4 ArrayBSearch, но надо помнить, что она ищет ближайший по значению элемент в отсортированном массиве.

В вышеприведенном примере используется функция iBarShift(_Symbol,_Period, lines.orderOpenTime, true);

Дальше в примере строятся объекты на каждый объем, но я бы так не делал - ведь по факту определен буфер, занеси в него значения и объекты МТ4 построит самостоятельно + сам же будет следить за их изменением .

Alexey-fx
10.05.2016, 17:54
deniss, спасибо!!!

Вы всё верно поняли
Именно это я и пытаюсь сделать, но пока еще не хватает знаний КАК это написать.
Последний блок (выделенный красным) - это из примера (скрипт, который я взял за основу), который я и хочу переделать.
Изначально, скрипт рисовал прям на графике вертикальную линию и информацию о новости. Данные брались из csv файла
Я его уже частично переделал.
В моём индикаторе время и объем бара из файла считываются в блоке "Выполняет чтение данных из csv файла"
А вот как "найти соответствующее время открытия в МТ4, найти его порядковый номер и присвоить порядковому номеру массива VOL значение объема" - вот это для меня пока проблема
Вот в этом я и прошу помощи

deniss
11.05.2016, 08:14
deniss, спасибо!!!

Вы всё верно поняли
Именно это я и пытаюсь сделать, но пока еще не хватает знаний КАК это написать.
Последний блок (выделенный красным) - это из примера (скрипт, который я взял за основу), который я и хочу переделать.
Изначально, скрипт рисовал прям на графике вертикальную линию и информацию о новости. Данные брались из csv файла
Я его уже частично переделал.
В моём индикаторе время и объем бара из файла считываются в блоке "Выполняет чтение данных из csv файла"
А вот как "найти соответствующее время открытия в МТ4, найти его порядковый номер и присвоить порядковому номеру массива VOL значение объема" - вот это для меня пока проблема
Вот в этом я и прошу помощи

В МТ4 всегда есть массив с именем "Time", он содержит время открытия всех баров. Индекс от нуля, считается справа налево. Вам надо функция поиска по массиву: одна из них ArrayBSearch, другая iBarShift. Я пользуюсь первой. Результатом выполнения будет порядковый номер индекса.

Незнайка7
26.01.2017, 13:49
здравствуйте. я 3 месяца учу Java и хочу понять, как написать программу, которая будет читать Market Data, вырисовывать график цены в виде японских свеч и гистограмму объемов. далее эти данные <OPEN> <HIGH> <LOW> <CLOSE> <VOLUME> пропускать через условия и вырисовывать на графике под или над свечой стрелку.
кто-нибудь может мне подсказать, что нужно учить на эту тему?

Аржан
23.03.2017, 05:30
Здравствуйте, мне и всем трейдерам которые не могут контролировать мани менеджмент по причине излишней эмоциональности нужен торговый советник не дающий открывать ордера при дневном убытке установленном в ММ. если такой советник у кого нибудь есть или собирается его писать пишите мне я помогу чем могу. Точно знаю что это многим очень поможет

voron_026
29.09.2017, 18:27
Здравствуйте. как можно получить данные по кластерам для своего робота? Может как-то использовать сам терминал КластерДельта?

deniss
02.10.2017, 16:29
Здравствуйте. как можно получить данные по кластерам для своего робота? Может как-то использовать сам терминал КластерДельта?

Добрый день,

вам в онлайне надо или на истории прогнать ?

voron_026
02.10.2017, 21:14
Добрый день,

вам в онлайне надо или на истории прогнать ?

Для начала на истории прогнать. А вообще конечно в онлайне

ildar2577725
06.04.2018, 10:35
Ребята, посдкажите, как протестировать советник в с тестере на кластерных обьемах? (использует индикаторы обьема)

Polymorph
13.08.2018, 19:52
while(ix>=0)
{

iBase=ArrayBsearchCorrect(TimeData,Time[ix]);
if(iBase<0 && Period()>=PERIOD_M5) { iBase=ArrayBsearchCorrect(TimeData,Time[ix]-1*60); } // 1 Min BrokenHour
if(iBase < 0 && Period() >= PERIOD_M15) { iBase = ArrayBsearchCorrect(TimeData, Time[ix] - 5*60 ); } // 5 Min BrokenHour
if(iBase < 0 && Period() >= PERIOD_H1) { iBase = ArrayBsearchCorrect(TimeData, Time[ix] - 30*60 ); } // 35 Min BrokenHour / ES
if(iBase < 0 && Period() >= PERIOD_H1) { iBase = ArrayBsearchCorrect(TimeData, Time[ix] - 35*60 ); } // 35 Min BrokenHour / ES

if(iBase>=0)
{
myvolume=ValueData[iBase];
VolumeBuf[ix]=myvolume;
}
else
{
VolumeBuf[ix]=0;
}
ix--;
}
Вырезка из PremiumVolume_4.0
Период H1 повтаряется 2 раза. Возможно первый это M30 либо второй - H4

Юрген
26.02.2020, 13:40
Всем привет! Помогите, плз, с VWAP.. MT4, ClusterDelta 4.1, пишется советник, нужно получить текущее значение VWAP указанного в настройках периода.. допустим нужен VWAP Daily.. пока удалось получить только значение из прошлой версии 3.6, затем округлить до 4-го знака и дальше уже работать с этой цифрой по логике советника, сравнение цены больше/меньше..

VWAP = iCustom(NULL,0,"ClusterDelta_VWAP_3.6","--",NameFutures,0,i+2); //получили значение VWAP 1 закрытой свечи.
VWAP_norm = NormalizeDouble (VWAP,4); // округляем значение ВВАП до 4х знаков после зпт

.. и еще вопрос в том, что код работает только в онлайн, а его еще хочется увидеть в тестере
Подскажете чего как ?

Alexey-fx
30.07.2020, 16:52
Добрый день!

Помогите разобраться с icustom, пожалуйста.

Мне необходимо получить в свой индикатор данные объемов и дельты по нулевому бару (т.е. последнему в истории), а также первому, второму и третьему барам.

Ранее, в MQL4, я их вытягивал следующим образом

double v0 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, i);
if (v0 == EMPTY_VALUE)
v0 = 0;
double v1 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, (i+1));
if (v1 == EMPTY_VALUE)
v1 = 0;
double v2 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, (i+2));
if (v2 == EMPTY_VALUE)
v2 = 0;
double d1 = iCustom(Symbol(), 0, "ClusterX_Delta", Ticker, 0, (i+1));
if (d1 == EMPTY_VALUE)
d1 = 0;
double d2 = iCustom(Symbol(), 0, "ClusterX_Delta", Ticker, 0, (i+2));
if (d2 == EMPTY_VALUE)
d2 = 0;
double d3 = iCustom(Symbol(), 0, "ClusterX_Delta", Ticker, 0, (i+3));
if (d3 == EMPTY_VALUE)
d3 = 0;

Все работало.

Сейчас пытаюсь по аналогии вытянуть эти данные в MQL5

double v0 = iCustom(NULL, 0, "ClusterDelta_Volume_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, 0, i);
if (v0 == EMPTY_VALUE)
v0 = 0;
printf("v0=", v0);
double v1 = iCustom(NULL, 0, "ClusterDelta_Volume_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, 0, (i+1));
if (v1 == EMPTY_VALUE)
v1 = 0;
double v2 = iCustom(NULL, 0, "ClusterDelta_Volume_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, 0, (i+2));
if (v2 == EMPTY_VALUE)
v2 = 0;
double d1 = iCustom(NULL, 0, "ClusterDelta_Delta_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, Reverse_Settings, ReverseChart, DO_NOT_SET_ReverseChart, 0, i);
if (d1 == EMPTY_VALUE)
d1 = 0;
printf ("d1=", d1);
double d2 = iCustom(NULL, 0, "ClusterDelta_Delta_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, Reverse_Settings, ReverseChart, DO_NOT_SET_ReverseChart, 0, (i+2));
if (d2 == EMPTY_VALUE)
d2 = 0;
double d3 = iCustom(NULL, 0, "ClusterDelta_Delta_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, Reverse_Settings, ReverseChart, DO_NOT_SET_ReverseChart, 0, (i+3));
if (d3 == EMPTY_VALUE)
d3 = 0;

Но мне терминал ругается.

Установлен терминал MT4, пакет Standart.

Подскажите, где ошибка? Никак не могу понять. Хочу разобраться

deniss
02.08.2020, 19:40
Добрый день!

Помогите разобраться с icustom, пожалуйста.

Мне необходимо получить в свой индикатор данные объемов и дельты по нулевому бару (т.е. последнему в истории), а также первому, второму и третьему барам.

Ранее, в MQL4, я их вытягивал следующим образом

double v0 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, i);
if (v0 == EMPTY_VALUE)
v0 = 0;
double v1 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, (i+1));
if (v1 == EMPTY_VALUE)
v1 = 0;
double v2 = iCustom(Symbol(), 0, "ClusterX_Volume", Ticker, 0, (i+2));
if (v2 == EMPTY_VALUE)
v2 = 0;
double d1 = iCustom(Symbol(), 0, "ClusterX_Delta", Ticker, 0, (i+1));
if (d1 == EMPTY_VALUE)
d1 = 0;
double d2 = iCustom(Symbol(), 0, "ClusterX_Delta", Ticker, 0, (i+2));
if (d2 == EMPTY_VALUE)
d2 = 0;
double d3 = iCustom(Symbol(), 0, "ClusterX_Delta", Ticker, 0, (i+3));
if (d3 == EMPTY_VALUE)
d3 = 0;

Все работало.

Сейчас пытаюсь по аналогии вытянуть эти данные в MQL5

double v0 = iCustom(NULL, 0, "ClusterDelta_Volume_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, 0, i);
if (v0 == EMPTY_VALUE)
v0 = 0;
printf("v0=", v0);
double v1 = iCustom(NULL, 0, "ClusterDelta_Volume_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, 0, (i+1));
if (v1 == EMPTY_VALUE)
v1 = 0;
double v2 = iCustom(NULL, 0, "ClusterDelta_Volume_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, 0, (i+2));
if (v2 == EMPTY_VALUE)
v2 = 0;
double d1 = iCustom(NULL, 0, "ClusterDelta_Delta_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, Reverse_Settings, ReverseChart, DO_NOT_SET_ReverseChart, 0, i);
if (d1 == EMPTY_VALUE)
d1 = 0;
printf ("d1=", d1);
double d2 = iCustom(NULL, 0, "ClusterDelta_Delta_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, Reverse_Settings, ReverseChart, DO_NOT_SET_ReverseChart, 0, (i+2));
if (d2 == EMPTY_VALUE)
d2 = 0;
double d3 = iCustom(NULL, 0, "ClusterDelta_Delta_3.5", Comment_Instrument, Instrument, Update_in_sec, MetaTrader_GMT, Reverse_Settings, ReverseChart, DO_NOT_SET_ReverseChart, 0, (i+3));
if (d3 == EMPTY_VALUE)
d3 = 0;

Но мне терминал ругается.
Установлен терминал MT4, пакет Standart.
Подскажите, где ошибка? Никак не могу понять. Хочу разобраться

Я не понял фразу: "Сейчас пытаюсь по аналогии вытянуть эти данные в MQL5", в MQL5 нет индикаторов из пакета Standart

Если Вы раньше работали с ClusterX - то, можете и сейчас работать.

Посмотрите также здесь: http://forum.clusterdelta.com/showthread.php/9809-Volume-Data-in-Experts

Alexey-fx
04.08.2020, 10:32
Да, что-то я совсем ерунду написал.
Простите моё невежество. Я далёк от программирования, вот и напутал всё (пакеты, МТ4 и МТ5). Свалил всё в одну кучу - винегрет получился.
Теперь, благодаря Вам, всё более-менее стало на свои места.

Тему "Volume Data in Experts" смотрел ранее. Но она слишком сложная для меня. Я не потяну.

Настроил у себя КластерХ (не знал, что этот проект ещё активен). Всё работает.

Денис, спасибо Вам за помощь!!!

Sarmat2018
13.03.2021, 16:09
Всем привет!Ребята помогите написать индикатор на Мт 5 .Нужен индюк что бы с реал объемов! сравнивал минимальный объем из 3 баров по закрытию Close баров и подсвечивал Его!Помогите пожалуйста!

Andrey1970
17.01.2022, 01:47
Здравствуйте!
Ищу программиста...Есть потребность в написании индикатора для МТ4. Готовое ТЗ имеется.
Коротко алгоритм. Перенос указанных заранее значений кластеров (нужны только данные объёмов) из индикатора
#Footprint на свечу графика МТ4 с аналогичными координатами в свече источника данных.