Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
посмотрите на функцию 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 кроме меня!