• В разделе форекс имеются хорошие бесплатные торговые роботы для МТ4 терминала. Если вы готовы поддержать ресурс финансово ,то есть возможность приобрести любой робот в исходном коде.

Индикатор Medium

Денис

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

Вложения

  • Like
Реакции: erch

erch

Пользователь
Слегка подправленный индюк.
Теперь выставленная в свойствах толщина линий не меняется при переинициализации.
 

Вложения

erch

Пользователь
Вот то что получилось при выводе значений буферов индюка, причем в нижней таблице
значения полученные с помощью iCustom, откуда видно некоторое расхождение
в нумерации буферов, так цвет линии в самом индюке находится в 7 буфере, а если его выводить,
то в пятом.
2014-10-03_115709.jpg
 

erch

Пользователь
а по русски это что значит? дал игрушку я так понял)))))))))))
Если остановиться только на значениях полученных с помощью iCustom, то кроме 5 буфера, фиксирующего цвет
линии, есть еще два буфера 6 и 7, значения которых выведены в Arrow для визуального определения уровеня где цвет сменится и появится стрелка. Кроме этого есть еще пара буферов фиксирующих текущее значение линии. Как это все использовать и надо ли, каждый решает сам.
 

coder-ex

Пользователь
Вот то что получилось при выводе значений буферов индюка, причем в нижней таблице
значения полученные с помощью iCustom, откуда видно некоторое расхождение
в нумерации буферов, так цвет линии в самом индюке находится в 7 буфере, а если его выводить,
то в пятом.
Посмотреть вложение 343
Прежде чем код индикатора обсуждать на наличие ошибок и возможных его доработок, было бы правильнее привести его в порядок, т.е. обозначить имена переменных в удобочитаемый вид для программистов. Так проще в дальнейшем общаться. К тому же выложи код вывода буферов, вполне возможна и там ошибка.
 

coder-ex

Пользователь
Я еще до конца код индикатора не обработал, но уже нашел явные ошибки из-за которых расчет в индикаторе будет не верным. Вот часть кода:

PHP:
double G_time_192;
...
  if (Li_0 < 3 && G_ibuf_168[Li_0] == G_ibuf_164[Li_0] && G_time_192 != Time[0]) {
  if (PopUp_Alert) Alert("Medium-Term Scalper - Sell signal on ", Symbol(), ", TimeFrame: ", Period());
  G_time_192 = Time[0];
  if (Email_Alert) {
  SendMail("Sell signal on " + Symbol() + ", TimeFrame: " + Period() + " at " + TimeToStr(G_time_192, TIME_DATE), "Medium-Term Scalper Sell signal on " + Symbol() +
  ", TimeFrame: " + Period() + " at " + TimeToStr(G_time_192, TIME_DATE));
  }
  }
Как можно сравнивать вещественное с datetime, плюс ко всему при отправке сообщения на E-Mail так же возникнут ошибки т.к. TimeToStr в первом параметре принимает тип datetime, а в коде ему пытаются вставить вещественное (double). Вот справка по TimeToStr:
PHP:
string TimeToStr(
datetimevalue, // число
intmode=TIME_DATE|TIME_MINUTES// формат вывода
);
Чуть позже выложу исправленный код.
 
Последнее редактирование модератором:

Константин

Администратор
Чуть позже выложу исправленный код.
Тезка, может ты его и в нормальный читабельный вид переведешь, там кода вроде не много, понимание языка у тебя на порядок выше, ну а потом можно будет его попытаться усовершенствовать.
 

coder-ex

Пользователь
Тезка, может ты его и в нормальный читабельный вид переведешь, там кода вроде не много, понимание языка у тебя на порядок выше, ну а потом можно будет его попытаться усовершенствовать.
я это и собираюсь сделать, просто пока занят, скорее всего завтра получится, там в логике много ошибок...
 

Константин

Администратор
я это и собираюсь сделать, просто пока занят, скорее всего завтра получится, там в логике много ошибок...
Будет хорошо если появится рабочий код данного индюка, за все время на форексе это самый точный индюк который я юзал, ошибок там конечно много и как помнится автор этого индикатора заложил в код несколько буферов но использование их советником не задействовано.
 

coder-ex

Пользователь
автор этого индикатора заложил в код несколько буферов но использование их советником не задействовано.
не понял я тебя по поводу этого :)а вообще использование этого индикатора напрямую в советниках не правильно, этот индикатор сперва нужно подготовить для этого...
 

coder-ex

Пользователь
Ошибка не в выводе, так по видимому задумано:
Посмотреть вложение 361
И в чем же там ошибка?
На мой взгляд ошибки в синтаксисе, плюс не понимание автором назначения буферов индикатора. В коде изначально определены 5 буферов, затем память распределяется еще под 8 :eek: К тому же этот участок кода я не понял:
SetIndexStyle(1,DRAW_LINE,STYLE_DOT,2);
SetIndexStyle(2,DRAW_LINE,STYLE_DOT,2);
SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,2);
SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID,2);
SetIndexArrow(1,159);
SetIndexArrow(2,159);
SetIndexArrow(3,233);
SetIndexArrow(4,234);
SetIndexBuffer(1,dBuffLine1);
SetIndexBuffer(2,dBuffLine2);
SetIndexShift(1,iShift);
SetIndexShift(2,iShift);
SetIndexBuffer(3,dBuffLine3);
SetIndexBuffer(4,dBuffLine4);
SetIndexBuffer(5,dBuffLine5);
SetIndexBuffer(6,dBuffLine6);
SetIndexBuffer(7,dBuffLine7);
IndicatorShortName("Medium-Term Scalper");
SetIndexLabel(0,"Medium-Term Scalper");
SetIndexLabel(1,"UpTrend");
SetIndexLabel(2,"DownTrend");
автор использует нумерацию с 1 до 7, а ведь буферы используют нумерацию с 0 до 7. Ну и плюс ко всему тут нумерация с 0 до 7, но отсутствует 5-й :
SetIndexDrawBegin(0,iDrawBegin);
SetIndexDrawBegin(1,iDrawBegin);
SetIndexDrawBegin(2,iDrawBegin);
SetIndexDrawBegin(3,iDrawBegin);
SetIndexDrawBegin(4,iDrawBegin);
SetIndexDrawBegin(6,iDrawBegin);
SetIndexDrawBegin(7,iDrawBegin);
и присутствует уже нулевой :eek:
В общем код индюка кроме правки еще нужно понять, что бы вносить изменения.
 

coder-ex

Пользователь
Малость его модифицировал, теперь работает на инструментах > 10.0 (золото и т.д.) и < 10.0 (GBPUSD и т.д.). Осталось еще провести оптимизацию кода и впоследствии перенести его из индикаторных буферов для интеграции в советники :Юно это уже будет закрытый код по всем правилам этого форума :)
 

Вложения

erch

Пользователь
Малость его модифицировал, теперь работает на инструментах > 10.0 (золото и т.д.) и < 10.0 (GBPUSD и т.д.).
И что бы это значило. Неужели старый индюк работает неправильно?
(чувствительность здесь одинаковая)
2014-10-05_084525.jpg
По видимому вы правы, заявляя " В общем код индюка кроме правки еще нужно понять, что бы вносить изменения."
 

coder-ex

Пользователь
И что бы это значило. Неужели старый индюк работает неправильно?
(чувствительность здесь одинаковая)
Посмотреть вложение 368
По видимому вы правы, заявляя " В общем код индюка кроме правки еще нужно понять, что бы вносить изменения."
измени чувствительность на 10 к примеру и увидишь отработку индикатора, в старом коде очень много синтаксических ошибок связанных со старым MQL4
 

coder-ex

Пользователь
Вот, у обоих чувствительность = 10
Посмотреть вложение 369
ты чей индикатор используешь? по цветам вроде не тот который я правил :)[DOUBLEPOST=1412488946,1412488144][/DOUBLEPOST]В моем коде кстати тоже есть недоделка, приводящая к ошибке в случае не подгруженных котировок... Правда сейчас уже часть ошибок устранил.
По поводу разных значений индикаторов - в моем коде введена проверка на инструменты с ценой выше/ниже 10.0, это влияет на показания индикатора.
 
Последнее редактирование модератором:

erch

Пользователь
Может это чем то поможет. Значения буферов 5 и 6 какие то нереальные.
2014-10-05_101952.jpg
 
Сверху