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

ansol

Местный знаток
Ты знаешь, я ведь тебе сказал, что я тоже городской и с вилами не дружил никогда.
Просто построение объектов абсолютно одинаково не зависимо от типа объекта.
Я-бы для начала написал так, чтобы рисовался ПРАВИЛЬНО один объект, по ближайшим точкам, а потом уже попытался-бы сделать повтор в цикле.
Для того чтобы было несколько одинаковых объектов им надо дать разные имена. Чаще применяется метод включения в имя времени создания или даты.
string name;
Потом перед созданием объекта
name = StringConcatenate("Bily", Time);
if(ObjectFind(name) < 0)
ObjectCreate(name, ....
А дальше назначаются свойства объекта
ObjectSet(name, ....
Столько раз сколько надо изменить свойств.


Так я и написал, исходник выше, оно рисуется. Тот факт, что оно рисуется по заранее заданным точкам я проверил, конечно.
Вопрос возник из-за расчета этих точек. Сейчас все ОК.
ObjectDelete убрал - пока не вижу изменений.
Как через set менять координаты - тоже не соображу пока. Они же изначально в ObjectCreate задаются. Но пока работает.

Мне важно наличие самого объекта на графике, иначе я не знаю как работать в советнике с "воображаемой" линией.
Тут вот линия есть и можно с ней делать операции типа "сравнение".
Реально на графике мне эта линия не нужна, хотя полезна для восприятия сути происходящего.
 

AlexeyVik

Программист mql4 mql5
Так я и написал, исходник выше, оно рисуется. Тот факт, что оно рисуется по заранее заданным точкам я проверил, конечно.
Вопрос возник из-за расчета этих точек. Сейчас все ОК.
ObjectDelete убрал - пока не вижу изменений.
Как через set менять координаты - тоже не соображу пока. Они же изначально в ObjectCreate задаются. Но пока работает.

Мне важно наличие самого объекта на графике, иначе я не знаю как работать в советнике с "воображаемой" линией.
Тут вот линия есть и можно с ней делать операции типа "сравнение".
Реально на графике мне эта линия не нужна, хотя полезна для восприятия сути происходящего.
Так я тебе и сказал, что построить объект по последним точкам которые надо определить программно. Наверное ты не так понял меня.
А что может быть не понятно по ObjectSet("MyTrend", OBJPROP_TIME1, Time[0]) я просто не понимаю. В документации достаточно понятно написано.
 

ansol

Местный знаток
Так я тебе и сказал, что построить объект по последним точкам которые надо определить программно. Наверное ты не так понял меня.
А что может быть не понятно по ObjectSet("MyTrend", OBJPROP_TIME1, Time[0]) я просто не понимаю. В документации достаточно понятно написано.

Ну, не понимаешь, так и фиг с ним. Я вот другое не понимаю(но я ЕГЭ не сдавал, так что...)
Вот я посмотрел:
ObjectCreate устанавливает все координаты объекта сейчас и сразу.
ObjectSet:
bool ObjectSet( string name, int prop_id, double value)
Поштучно.

Ну, приходится пользоваться тем, что дают. Работаем по-тихоньку :)
 
Последнее редактирование модератором:

ansol

Местный знаток
И да, если есть OdjectCreate и он работает, то зачем ObjectSet?
Я имею в виду выше приведенный мною исходник. Зачем там какой-то "сет"?
Там и так все работает
 

AlexeyVik

Программист mql4 mql5
Ну, не понимаешь, так и фиг с ним.
Да не я тебя не правильно понял, а ты меня. Я-то тем более не сдавал ЕГЭ. Мне что-то кажется что ты родился после того как я закончил школу. Ну, да не в этом дело.


Во первых: Не все свойства объекта перечислены при построении объекта.
Во вторых: Часто бывает необходимость изменить координаты объекта, а место этого используют удаление и новое создание объекта, от чего я и пытался тебя предостеречь.
И ещё раз хочу тебя попросить, не уподобляйся не-до-программистам. С такими претензиями можно дойти до того, что и делфи и С# и С++ будут плохими языками, а их создатели дебилами.
На этом, мне кажется, что ты разобрался с массивами с которых всё началось и я прекращаю этот диалог.
Будут новые вопросы, пиши. Чем смогу помогу.
 
Последнее редактирование модератором:

ansol

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

Вообще, с такой реализацией языка я, конечно, не согласен. Но что делать... Вот выше в теме eeevil тоже выражал недовольство.
Вообще, самый лучший язык создал самый гениальный программист на C Ларри Уолл. Это просто !!!МАЛАДЕТС!!! какой-то. Я так привык к нему, что все остальное мне уже кажется невероятным убожеством, недостойным существовать в этом мире.
Ну и если на меня сваливают ответственность за распределение памяти(это я опять про массивы, больное место в mql4), то лучше уж ассемблер, а не это безобразие.
 

AlexeyVik

Программист mql4 mql5
Вот уж что меньше всего беспокоит в MQL так это распределение памяти. Язык MQL появился тогда когда оперативную память компьютера стали измерять гигабайтами и такими задачами которые пишутся на этом языке забить память просто не реально.
А что ты не разобрался с массивами? Ты вместо пользовательских массивов создал индикаторные динамические и потому не так они работают.
 

Milord

Местный знаток
..Логика дебила.
Ну, приходится пользоваться тем, что дают. Работаем по-тихоньку :)
так и есть)):D метаквоты часто пишут "шедевры" не поддающиеся нормальной логике среднего программиста:facepalm:
например, чтобы модифицировать ордер, надо выбрать через OrderSelect, А нах... тогда в OrderModify тикет самого ордера передаём???:facepalm:
в математике это называется избыточная информация, или дублирование функций,параметров,и как следствие неэффективный код и запутывание начинающих осваивать MQL4
 

ansol

Местный знаток
А что ты не разобрался с массивами?
Дык, ноль у меня в якобы массиве!
Вот уж что меньше всего беспокоит в MQL так это распределение памяти.
Задание размера массива до его использования - это и есть забота о распределении памяти! Она не тебя беспокоит - просто беспокойство разработчики свалили на тебя, вот и все.
А мы пока будем писать программы на mql и зарабатывать на форексе.
Писатели программ для форекса за бабло очевидно ни хрена не зарабатывают.
Стал бы некий известный пейсатель программулек мелочиться из-за $10 денег, если бы он рубил на форексе миллионы? Есть и поинтереснее задачи для умного программиста. Времени нет, которое деньги или наоборот.
А писатель книжек по mql4, который тут на форуме тоже ошивается? Он что-ли зарабатывает? Ну-ну, счас. Зарабатывает, конечно, но не на форексе.
:)

Программмку будем обсуждать, что я выложил или "ну ее к чертям"?
 

Milord

Местный знаток
Вам с eeevil остаётся скооперироваться, написать свою торговую платформу со своим языком для программирования индикаторов и советников. В нём будет всё как вам нравится. Если у вас получится уговорит ДЦ и брокеров перейти на вашу платформу, то будете зашибать большие деньги.
наконец пошли здравые мысли на счет тупизма метаквотов:D
чего стоят только их ответы в их ветке, как говорится без коментов...:facepalm:
из математики, статистики известно что любая система имеет 3 периода - рост,зрелость,упадок, так вот походу что метаквоты скоро начнут падать...судя по их реакции на здоровую критику программистов...)) они делают вид, что никого не слышат и не видят кроме себя и бабла)))
 

Milord

Местный знаток
Писатели программ для форекса за бабло очевидно ни хрена не зарабатывают.
Стал бы некий известный пейсатель программулек мелочиться из-за $10 денег, если бы он рубил на форексе миллионы? Есть и поинтереснее задачи для умного программиста. Времени нет, которое деньги или наоборот.
А писатель книжек по mql4, который тут на форуме тоже ошивается? Он что-ли зарабатывает? Ну-ну, счас. Зарабатывает, конечно, но не на форексе.
:)
терзают меня жуткие сомнения...походу форекс это большая замануха для всех почти трейдеров, поскольку те кто пишут платформы МТ4,МТ5 и прочие фирмы- конкуренты, в первую очередь заключают договора с брокерами, и им пишут некие програмульки, для контроля времени закрытия ордеров у трейдеров,проскальзывания и прочих параметров, которых немало..как говорил Остап Бендер - есть много способов сравнительно честного отъема денег...):facepalm:
 

Milord

Местный знаток
...С такими претензиями можно дойти до того, что и делфи и С# и С++ будут плохими языками, а их создатели дебилами.
хочется сказать словами Кота Леопольда - РЕБЯТА - ДАВАЙТЕ ЖИТЬ ДРУЖНО!
а если серьезно, я не вижу предмета спора, потому что есть 2 основных пути:
1)консерваторов
2)реформаторов
причем они взаимо- дополняют и уравновешивают друг друга, если бы не было здорового консерватизма, все бы превратилось в хаос, а без реформаторов, все бы стало болотом...

P.S. аксиома - нет предела совершенству, нет ничего на Земле, что нельзя было бы улучшить и усовершенствовать, вопрос лишь в стремлении, желании, труде и терпении...
 
Последнее редактирование:

ansol

Местный знаток
Ладно, чё-то по теме все замолчали.
Хорош оффтопить про форекс!
Изучаем массивы в mql4(свое мнение про них я уже высказал).
Переходим к делу:
PHP:
//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- input parameters
extern int       ExtParam1=1;
//--- buffers
double ExtMapBuffer1[];
double f[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   ExtMapBuffer1[5]=2.7182;
   f[5]=2.7182;
   Comment(ExtMapBuffer1[5]," ",f[5]);
//----
   return(0);
  }
//+------------------------------------------------------------------+
Индюк создан с помощью стандартной процедуры MT4 - правой мышкой щелк на "пользовательские индикаторы" - в меню выбираем "создать"
1 внешний параметр, 1 буфер. Текст перед вами.
Результат у меня в МТ4 билд 509, скачан с оффсайта FXOpen (не реклама, просто так получилось, что я к ним в конкурс залез по приколу, он счас идет, здесь же на сайте организован)
Результат на картинке. Ну-с, не уроды?
 

Вложения

  • eurusdm1.png
    eurusdm1.png
    25,1 КБ · Просмотры: 32

ansol

Местный знаток
На картинке также видно мои "вилы Эндрюса" :) и зигзаг
 

_SERG_

Активный участник
Ладно, чё-то по теме все замолчали.
Хорош оффтопить про форекс!
Изучаем массивы в mql4(свое мнение про них я уже высказал).
Переходим к делу:
PHP:
//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//--- input parameters
extern int       ExtParam1=1;
//--- buffers
double ExtMapBuffer1[];
double f[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   ExtMapBuffer1[5]=2.7182;
   f[5]=2.7182;
   Comment(ExtMapBuffer1[5]," ",f[5]);
//----
   return(0);
  }
//+------------------------------------------------------------------+
Индюк создан с помощью стандартной процедуры MT4 - правой мышкой щелк на "пользовательские индикаторы" - в меню выбираем "создать"
1 внешний параметр, 1 буфер. Текст перед вами.
Результат у меня в МТ4 билд 509, скачан с оффсайта FXOpen (не реклама, просто так получилось, что я к ним в конкурс залез по приколу, он счас идет, здесь же на сайте организован)
Результат на картинке. Ну-с, не уроды?


А как на счёт инициализации второго массива f?
Объявить объявили, а как с размерностью?
Добавь ArrayResize(f, 10); А потом и про ArrayInitialize() не забудь, поскольку в индикаторе, второй массив не привязан к буферу индикатора. Пробуй.
 

Ugar

Гуру форума
Ладно, чё-то по теме все замолчали.
Хорош оффтопить про форекс!
Изучаем массивы в mql4(свое мнение про них я уже высказал).
Переходим к делу:
PHP:
double ExtMapBuffer1[];
double f[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
Это разные массивы. Для разных целей. Имеют разные свойства.
Подробности есть где то в справочнике и букваре.
Вкратце, надо задать размер массиву f[];
При объявлении так:
double f[6];
Или потом с помощью функции изменения размера.
Кстати, в массиве f[] не будет сама сдвигаться информация с появлением нового бара как в ExtMapBuffer1[]
 

ansol

Местный знаток
Ugar
Ну ты сначала тему читал или с середины? Как и предыдущий комментатор, кстати.
С этого и началось - я объявил массив и получил дырку от бублика, тогда я его объявил индексным и стал работать дальше. Мне всего-то и надо было получить три координаты для "вил". Можно было сотворить три переменных, а можно объявить массив. Оказыватся я еще ему должен сообщить, что он массив из трех элементов!
Сам-то он ну никак не догадается, по надписи f[3]=1, что как минимум 4 элемента у него уже есть :)
Речь только про это. Как сделать чтоб работало см. выше, я же приложил работающий индюк
 

_SERG_

Активный участник
Ugar
Ну ты сначала тему читал или с середины? Как и предыдущий комментатор, кстати.
С этого и началось - я объявил массив и получил дырку от бублика, тогда я его объявил индексным и стал работать дальше. Мне всего-то и надо было получить три координаты для "вил". Можно было сотворить три переменных, а можно объявить массив. Оказыватся я еще ему должен сообщить, что он массив из трех элементов!
Сам-то он ну никак не догадается, по надписи f[3]=1, что как минимум 4 элемента у него уже есть :)
Речь только про это. Как сделать чтоб работало см. выше, я же приложил работающий индюк

Без объявления, ты прав, никак не догадается. Таков от MQL!

Да и в индюке у тебя ноль стоит во второй части коммента.

Я мож, чёт и не дочитал, но ты проверь версию.
 
Последнее редактирование:

Milord

Местный знаток
Вопрос для профи???

я верно понимаю, чтобы кусок кода выполнялся один раз, только при запуске советника, его надо засунуть в init()???так да?:)
есть ли функциональные ограничения этого(любого) куска кода при работе в init()???
 
Последнее редактирование:

_SERG_

Активный участник
я верно понимаю, чтобы кусок кода выполнялся один раз, только при запуске советника, его надо засунуть в init()???так да?:)
есть ли функциональные ограничения этого куска кода при работе в init()???

Это вопрос не для профи, это вопрос, для тех, кто изучает, или только начинает изучать язык.
Всё тоже что и в старте, но один раз. Например подготовка данных которые будут использоваться в функции старт. Ну а деинит, понятно, что может отвечать за сохранение данных, после окончания работы советника, скрипта или индикатора.
Это идеологическая нагрузка.
 
Верх