Функция ICustom - страница 8

 
 

посмотрите на функцию iCustom в справке MQL, она делает именно то, что вам нужно

 

Вот и все!

Спасибо!

 

iCustom

Здравствуйте,

Иногда работа моих индикаторов должна немного отличаться, если индикатор был запущен в результате вызова iCustom, в отличие от того, как индикатор обычно работает, если он был прикреплен к графику.

Существует ли простая функция или метод в MQL, который можно использовать в индикаторе, чтобы определить, был ли индикатор запущен явно, потому что он был прикреплен к графику, или если индикатор был запущен в результате вызова iCustom?

В качестве примера я включил в мои индикаторы булев параметр 'Custom' со значением по умолчанию false. Если я делаю вызов iCustom для запуска индикатора, то вместо этого я устанавливаю этот параметр в true. Таким образом, я могу определить внутри своего индикатора, запущен ли индикатор в результате вызова iCustom.

Конечно, должна быть какая-то функция, например IsCustom(), которая возвращает true, если индикатор был запущен через iCustom, или false в противном случае.

Есть ли у кого-нибудь элегантный и простой способ определить, был ли индикатор запущен в результате вызова через iCustom?

С уважением,

Лоуренс.

 

спасибо всем за помощь!

aj

 

Вопрос по icustom

Я пытался сделать индикатор, который вызывает другой индикатор только по icustom. Я сделал такую строку кода;

double COG=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

Я пытался разместить строку в разных местах кода и играл с именем двойника, я читал и читал много руководств. Я думаю, что, возможно, я должен поместить что-то в начале, например, количество буферов!? Возможно, это не должно быть double?

В таком виде я получаю ошибки при компиляции;

'init' - ожидается запятая или точка с запятой

'init' - выражение в глобальной области видимости недопустимо.

может ли кто-нибудь помочь мне понять это с любым пользовательским индикатором? потому что я чувствую, что учебники, которые я прочитал (а я думаю, что прочитал их все), дали мне строку кода для icustom, но это не работает, просто имея строку саму по себе, я знаю, что она должна быть изменена для каждого индикатора, но есть некоторые вещи, отсутствующие в объяснении.

 

У меня была серьезная попытка сделать это, и я очень горжусь собой! Я получил некоторый код от Codersguru, я изменил его для индикатора. lol он выглядит хорошо не имеет ошибок при компиляции (первый раз когда-либо!!!!!), но ... он делает metatrader "не отвечает", когда вы добавляете его на график.

Я изменил все имена буферов индикаторов (с val1, val2, val3, val4. на value1, value2...etc), потому что я решил, что они мешают друг другу, так как я лучше рассмотрел код, который сделал Codersguru (он сделал код для вызова супертренда с icustom) он изменил имена буферов, так что я подумал, что это должно быть оно, но нет, все еще не отвечает.

//+------------------------------------------------------------------+

//| COG call.mq4 |

//| |

//| |

//+------------------------------------------------------------------+

#property indicator_separate_window

#property indicator_buffers 4

#property indicator_color1 Lime

#property indicator_color2 Red

#property indicator_color3 CLR_NONE

#property indicator_color4 CLR_NONE

//---- буферы

double value1[];

double value2[];

double value3[];

double value4[];

//+------------------------------------------------------------------+

//| Пользовательская функция инициализации индикатора |

//+------------------------------------------------------------------+

int init()

{

//---- индикаторы

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Lime);

SetIndexBuffer(0,value1);

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Red);

SetIndexBuffer(1,value2);

SetIndexStyle(2,DRAW_NONE);

SetIndexBuffer(2,value3);

SetIndexStyle(3,DRAW_NONE);

SetIndexBuffer(3,value4);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Пользовательская функция деинициализации индикатора |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Пользовательская функция итерации индикатора |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//---- проверка на возможные ошибки

if (counted_bars<0) return(-1);

//---- последний подсчитанный бар будет пересчитан.

if (counted_bars>0) counted_bars--;

int pos=Bars-counted_bars;

while(pos>=0)

{

value1[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

value2[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

value3[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

value4[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true);

}

return(0);

}

//+------------------------------------------------------------------+

 

это тема, где я взял код, созданный Codersguru;

https://www.mql5.com/en/forum/173108

Я заметил, что я оставил часть кода pos на концах и pos--;

value1[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

value2[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

value3[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

value4[pos]=iCustom(NULL,0, "COGpoint1",50,3000,0,true,pos);

pos--;

давайте попробуем!

 

лол лол лол лол лол лол хахаха! о боже!

Хорошо, я добился прогресса У меня половина индикатора на экране (только красная часть индикатора, lol где же зеленая часть?) это первая вещь, которую я когда-либо получал, чтобы половина работала, хотя я не могу поверить в это hahaha! Кто-нибудь знает, что я сделал неправильно?

 

Я добавила цифры в конце 0,1,2,3 для эксперимента. Не знаю почему? Но это что-то дало, теперь у меня ровная красная линия и зеленый цвет.

Ура! Но это не правильно, может быть еще хуже, это странно! Помогите мне пожалуйста кто-нибудь... все спят zzz zzz zzz кроме меня!

Причина обращения: