Ваши вопросы по языку MQL4

egorr007

Новичок форума
Дошёл до этого: Картинку прилагаю.

Не могу соединить вершины наклонных буферов.

Кто то поможет с циклами?

Спасибо.
 

Вложения

  • 6.jpg
    6.jpg
    65,5 КБ · Просмотры: 38

Артмен

Новичок форума
Здравствуйте программисты! Мне нужно что бы индюк делал запись в отдельные буфера для бай и селл. Я сделал что бы индюк в течении n баров давал сигнал в эти буфера(при сигнале стрелки бай: буферу бай 2, буферу селл 1; на стрелку селл то же самое только значения местами помяняються). Так вот, вроде всё правильно но в некоторые моменты не ставит значение буферу бай(даже с Print в журнал вообще ничего не пишет). Огромная просьба помочь! Буду вечно благодарен тому кто ответит!
Просто меня этот индикатор убивает... Уже злюсь на этот индюк... И на себя... Спасибо
ГИГАНСКОЕ заранее.
 

egorr007

Новичок форума
Не получается, правильно найти искомую модель.
 

Вложения

  • 7.jpg
    7.jpg
    69 КБ · Просмотры: 38

Артмен

Новичок форума
Здравствуйте программисты! Мне нужно что бы индюк делал запись в отдельные буфера для бай и селл. Я сделал что бы индюк в течении n баров давал сигнал в эти буфера(при сигнале стрелки бай: буферу бай 2, буферу селл 1; на стрелку селл то же самое только значения местами помяняються). Так вот, вроде всё правильно но в некоторые моменты не ставит значение буферу бай(даже с Print в журнал вообще ничего не пишет). Огромная просьба помочь! Буду вечно благодарен тому кто ответит!
Просто меня этот индикатор убивает... Уже злюсь на этот индюк... И на себя... Спасибо
ГИГАНСКОЕ заранее.

Вот индюк
 

Вложения

drugwdrug

Активный участник
Подскажите функцию:
пробитие 50% предыдущей свечи с выбором отрабатываемого старшего таймфрейма
 

Tankk

*********
ZZ NRP TR AA LB TT [x3]

Здравствуйте программисты! Мне нужно что бы индюк делал запись в отдельные буфера для бай и селл. Я сделал что бы индюк в течении n баров давал сигнал в эти буфера(при сигнале стрелки бай: буферу бай 2, буферу селл 1; на стрелку селл то же самое только значения местами помяняються). Так вот, вроде всё правильно но в некоторые моменты не ставит значение буферу бай(даже с Print в журнал вообще ничего не пишет). Огромная просьба помочь! Буду вечно благодарен тому кто ответит!
Просто меня этот индикатор убивает... Уже злюсь на этот индюк... И на себя... Спасибо ГИГАНСКОЕ заранее.
пересмотрел ваши посты, но так и не понял: что вы хотите сделать!? я сам плохо разбираюсь в советниках....
нет, если вы хотите отфильтровать "открытие ордера" по тренду от ZZ NRP, то добавил вам пару буферов в нужном месте...
и вообще, переписал его, чтоб облегчить работу... может поможет!?
- или вы хотите ещё и тренд "порезать" на короткие блоки [Howbars], чтоб поймать "запоздавшую" Стрелку/Алерт!?
- или вы хотите сделать Алерт, чтоб он сигналил ещё несколько свечей после Стрелки!?
Подскажите функцию: пробитие 50% предыдущей свечи с выбором отрабатываемого старшего таймфрейма
как-то так... P.S. цены High/Low можно заменить и на Open/Close... или сложить все 4, а за скобками разделить на 4...
Код:
Expand Collapse Copy
   int CountedBars=IndicatorCounted();   
   if (CountedBars<0) return(-1);       
   if (CountedBars>0) CountedBars--;
   int limit=fmin(Bars-CountedBars,Bars-2);  
   if (History>ZZSpeed) limit=fmin(History,Bars-2);      
//**************************************************************************//

   for (int i=limit+ZZSpeed*3; i>=0; i--)    //for (i=0; i<=History; i++)   //
    { 
     int y = iBarShift(NULL,TimeFrame,Time[i],false);
     int TF = 0 == текущий ТФ, 1 == предыдущий ТФ и так далее...
     MID[i] = (iLow(NULL,TimeFrame,y+TF) + iHigh(NULL,TimeFrame,y+TF)) /2;
     if (Close[i] > MID[i]) BUY[i] = рисуем гисто вверх (например)...
     if (Close[i] < MID[i]) SELL[i] = рисуем гисто вниз (например)...
    }
 

Вложения

  • ZZ NRP TR AA LB TT [x3]_2018-10-27.png
    ZZ NRP TR AA LB TT [x3]_2018-10-27.png
    60,7 КБ · Просмотры: 85
  • ZZ NRP TR AA LB TT [x3].mq4
    ZZ NRP TR AA LB TT [x3].mq4
    38,2 КБ · Просмотры: 27
Последнее редактирование:

drugwdrug

Активный участник
как-то так... P.S. цены High/Low можно заменить и на Open/Close... или сложить все 4, а за скобками разделить на 4...
Код:
Expand Collapse Copy
   int CountedBars=IndicatorCounted();   
   if (CountedBars<0) return(-1);       
   if (CountedBars>0) CountedBars--;
   int limit=fmin(Bars-CountedBars,Bars-2);  
   if (History>ZZSpeed) limit=fmin(History,Bars-2);      
//**************************************************************************//

   for (int i=limit+ZZSpeed*3; i>=0; i--)    //for (i=0; i<=History; i++)   //
    { 
     int y = iBarShift(NULL,TimeFrame,Time[i],false);
     int TF = 0 == текущий ТФ, 1 == предыдущий ТФ и так далее...
     MID[i] = (iLow(NULL,TimeFrame,y+TF) + iHigh(NULL,TimeFrame,y+TF)) /2;
     if (Close[i] > MID[i]) BUY[i] = рисуем гисто вверх (например)...
     if (Close[i] < MID[i]) SELL[i] = рисуем гисто вниз (например)...
    }

Спасибо. Но мне не понятно, зачем мне здесь ZZSpeed ит .д. ??? Какие гистограммы?
 

Артмен

Новичок форума
пересмотрел ваши посты, но так и не понял: что вы хотите сделать!? я сам плохо разбираюсь в советниках....
нет, если вы хотите отфильтровать "открытие ордера" по тренду от ZZ NRP, то добавил вам пару буферов в нужном месте...
и вообще, переписал его, чтоб облегчить работу... может поможет!?
- или вы хотите ещё и тренд "порезать" на короткие блоки [Howbars], чтоб поймать "запоздавшую" Стрелку/Алерт!?
- или вы хотите сделать Алерт, чтоб он сигналил ещё несколько свечей после Стрелки!?

как-то так... P.S. цены High/Low можно заменить и на Open/Close... или сложить все 4, а за скобками разделить на 4...
Код:
Expand Collapse Copy
   int CountedBars=IndicatorCounted();   
   if (CountedBars<0) return(-1);       
   if (CountedBars>0) CountedBars--;
   int limit=fmin(Bars-CountedBars,Bars-2);  
   if (History>ZZSpeed) limit=fmin(History,Bars-2);      
//**************************************************************************//

   for (int i=limit+ZZSpeed*3; i>=0; i--)    //for (i=0; i<=History; i++)   //
    { 
     int y = iBarShift(NULL,TimeFrame,Time[i],false);
     int TF = 0 == текущий ТФ, 1 == предыдущий ТФ и так далее...
     MID[i] = (iLow(NULL,TimeFrame,y+TF) + iHigh(NULL,TimeFrame,y+TF)) /2;
     if (Close[i] > MID[i]) BUY[i] = рисуем гисто вверх (например)...
     if (Close[i] < MID[i]) SELL[i] = рисуем гисто вниз (например)...
    }

Здравствуйте! Вот в изначальной версии этого индикатора сигнал от стрелки существует только в момент появления стрелки. А мне надо чтоб этот сигнал дальше существовал n количество баров. Спасибо за ответ и за хороший индикатор!
 

gince

Местный знаток
Привет знатоки.
Хочу сделать индикатор с возможностью переключения свойств с помощью кнопок. В глобальных переменных прописал
HTML:
Expand Collapse Copy
int Type;
Так эту переменную должны видеть и все функции OnCalculate,OnChartEvent.В функции OnChartEvent и OnCalculate сделал принт. В журнале вижу печать переменной, а вот в OnCalculate не печатает. Что не так делаю?
И еще вопрос. Как изменит цвет активной кнопки ?
int Type;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
Print("OnInit -------- Type = ",Type);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
ObjectsDeleteAll(0,OBJ_RECTANGLE);
ObjectsDeleteAll(0,OBJ_BUTTON);
return (0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{

Print("OnCalculate ------ Type = ",Type);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
int n;
int buttonsRange=ArrayRange(arrayP,0);
for(n=0; n<buttonsRange; n++)
//--- jei pele paspaude mygtuka
if(id==CHARTEVENT_OBJECT_CLICK)
{
for(n=0; n<buttonsRange; n++)
{
if(sparam==objNam+"Mygtukas"+IntegerToString(n))
{ if(ObjectGetInteger(0,objNam+"Mygtukas"+IntegerToString(n),OBJPROP_STATE)==1)
{
Type=n;
Print("event ------- Type = ",Type); ObjectSetInteger(0,objNam+"Mygtukas"+IntegerToString(n),OBJPROP_STATE,0);
}
}
}
}
ChartRedraw();
}

Код инди:
 

Вложения

Leonup

Новичок форума
Добрый день!
Есть у меня индикатор в виде синих и красных столбиков, в отдельном окне. Формат ex4. Нужные параметры для открытия сделок я извлек с помощью iCustom: Down1 - красный столбик, Up1 – синий. Эти параметры - в виде единиц и нулей. Например, на продажу условие получилось такое: (Down1 > 0) && (Up2 > 0) && (Up3 > 0). Сигналы появляются нечасто. В определенное время (не сразу после появления сигнала!) открываю сделку.
Хочу попытаться сделать советник на базе этого индикатора. Для этого мне нужно знать время и цену открытия свечи, перед которой появился сигнал. А сигнал мог появиться и сегодня, и вчера, и даже позавчера. Как программно можно вывести время и цену открытия этой свечи? Помогите, пожалуйста.
 

AlexeyVik

Программист mql4 mql5
Привет знатоки.
Хочу сделать индикатор с возможностью переключения свойств с помощью кнопок. В глобальных переменных прописал
HTML:
Expand Collapse Copy
int Type;
Так эту переменную должны видеть и все функции OnCalculate,OnChartEvent.В функции OnChartEvent и OnCalculate сделал принт. В журнале вижу печать переменной, а вот в OnCalculate не печатает. Что не так делаю?
И еще вопрос. Как изменит цвет активной кнопки ?
А почему должно что-то печатать если сегодня нет тиков? Один раз печатает и хватит.
поменять цвет можно ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr);
Одно нажатие, один цвет. Второе нажатие другой цвет.
 

gince

Местный знаток
А почему должно что-то печатать если сегодня нет тиков? Один раз печатает и хватит.
поменять цвет можно ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr);
Одно нажатие, один цвет. Второе нажатие другой цвет.

Спасибо. Это понял. Так получается так, если нет тиков в выходные ни OnCalculate, ни OnTimer с OnChartEventне получит сигнал. А других способов передать сигнал с OnChartEventв в OnCalculate нету ?
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Спасибо. Это понял. Так получается так, если нет тиков в выходные ни OnCalculate, ни OnTimer с OnChartEventне получит сигнал. А других способов передать сигнал с OnChartEventв в OnCalculate нету ?
А зачем его туда передавать? OnChartEvent отдельный, самостоятельный обработчик события.
Завтра, когда пойдут тики из OnCalculate будет печатать на каждом тике. Но надо-ли это?
Ну... в крайнем случае, при острой необходимости можно воспользоваться пользовательской функцией которую будет вызывать OnCalculate и при необходимости вызывать из OnChartEvent.
 

mobidik

-----
Привет знатоки.
Хочу сделать индикатор с возможностью переключения свойств с помощью кнопок. В глобальных переменных прописал
HTML:
Expand Collapse Copy
int Type;
Так эту переменную должны видеть и все функции OnCalculate,OnChartEvent.В функции OnChartEvent и OnCalculate сделал принт. В журнале вижу печать переменной, а вот в OnCalculate не печатает. Что не так делаю?

Спасибо. Это понял. Так получается так, если нет тиков в выходные ни OnCalculate, ни OnTimer с OnChartEventне получит сигнал. А других способов передать сигнал с OnChartEventв в OnCalculate нету ?

Вот как раз OnTimer() будет видеть изменение состояний кнопки с задержкой равной времени заданного в таймере. При использовании ф-ции OnChartEvent() есть один момент - она не работает в тестере, если это важно, тогда определение состояния кнопки нужно делать в OnCalculate() или в OnTimer().

И еще вопрос. Как изменит цвет активной кнопки ?

Сперва определить состояние кнопки, затем определить какой сейчас цвет кнопки, если цвет не соответствует её положению - изменить на заданный, если соответствует - ничего не делаем...
 

AlanTrade

Интересующийся
Чудо

Добрый вечер, уважаемые коллеги.
Столкнулся в очередной раз с чудом то ли MQL4, то ли МТ4, то ли своего творчества.
Функция ObjectGetValueByTime в индикаторе не работает. Тоесть, не совсем не работает, а работает как то по своему усмотрению.
Нужно контролировать каналы стандартного отклонения.
Если создать 3 идентичных канала:
- первый в окне индикатора стандартной функцией МТ4 вручную "StdDev Channel" (номер просто удаляем) ;
- второй (для контроля) "CanelOutside" , созданный внешним скриптиком в том же окне функцией ObjectCreate;
- и третий, собственно, который необходимо контролировать, " CanelInside" той же функцией ObjectCreate, но самим индикатором, -
ТО первые две функции "StdDev Channel" и "CanelOutside" индикатор прекрасно видит и выдаёт цену нужных точек, а собственный канал отлично видит, но значения цены канала показывать упорно не хочет!
К слову, функцией ObjectGet индикатор определяет свойства своего канала " CanelInside" .
Все передумал, если у кого есть какие мысли, или кто сталкивался help.
Коды и лог эксперта прилагаю. Заранее благодарен.

2018.11.28 23:23:52.526 Chudo GBPUSD,H1: Канал StdDev Channel найден в окне = 0 Верхняя цена на баре 12 = 1.279788722871162
2018.11.28 23:23:52.526 Chudo GBPUSD,H1: Канал CanelOutside найден в окне = 0 Верхняя цена на баре 6 = 1.275677944353492
2018.11.28 23:23:52.526 Chudo GBPUSD,H1: Канал CanelInside найден в окне = 0 Верхняя цена на баре 8 = 0.0
2018.11.28 23:23:52.516 Chudo GBPUSD,H1: initialized
2018.11.28 23:23:52.446 Custom indicator Chudo GBPUSD,H1: loaded successfully
 

Вложения

mobidik

-----
Добрый вечер, уважаемые коллеги.
Столкнулся в очередной раз с чудом то ли MQL4, то ли МТ4, то ли своего творчества.
Функция ObjectGetValueByTime в индикаторе не работает. Тоесть, не совсем не работает, а работает как то по своему усмотрению.
Нужно контролировать каналы стандартного отклонения...

А Вы закомментируйте 54 строку своего кода в "Chudo" и все будет, а вот чем вызвана задержка...
 

AlanTrade

Интересующийся
Чудо

А Вы закомментируйте 54 строку своего кода в "Chudo" и все будет, а вот чем вызвана задержка...
Благодарю mobidik, действительно, цену канала CanelInside определяет, но со второй и далее итерации. А на первой, которую и выделяет флаг на 54 строке, чтобы не мелькали данные на каждый тик, объект определяется, а цена нет! После такого сбоя индикатор правильно не может инициализироваться. Почему так происходит и что делать, пока не пойму.
С уважением, AlanTrade.

2018.11.29 13:53:19.364 Chudo GBPUSD,H1: Канал CanelOutside найден в окне = 0 Верхняя цена на баре 6 = 1.293209835852652
2018.11.29 13:53:19.364 Chudo GBPUSD,H1: Канал CanelInside найден в окне = 0 Верхняя цена на баре 2 = 1.285447129034891
2018.11.29 13:52:56.321 Chudo GBPUSD,H1: Канал StdDev Channel найден в окне = 0 Верхняя цена на баре 12 = 1.282497000244989
2018.11.29 13:52:56.321 Chudo GBPUSD,H1: Канал CanelOutside найден в окне = 0 Верхняя цена на баре 6 = 1.293209835852652
2018.11.29 13:52:56.321 Chudo GBPUSD,H1: Канал CanelInside найден в окне = 0 Верхняя цена на баре 2 = 0.0
2018.11.29 13:52:56.321 Chudo GBPUSD,H1: initialized
2018.11.29 13:52:56.211 Custom indicator Chudo GBPUSD,H1: loaded successfully
2018.11.29 13:52:56.151 Custom indicator Chudo GBPUSD,H1: removed
 

AlanTrade

Интересующийся
Приношу извинения, сразу не понял суть вашей фразы: "... , а вот чем вызвана задержка...".
 

mobidik

-----
чтобы не мелькали данные на каждый тик
так это просто: ввести переменную, в которую будем заносить значение цены линии, затем задаем условие - как только значение в переменной становиться больше "0" - сменили флаг и вывели в принт, а так, вариантов может быть несколько.
 
Верх