Заработай до
50000$
на приглашении друзей
получить StartUp Bonus
от ИнстаФорекс
Вложений не требуется!
Начни торговлю
без вложений и риска
С новым STARTUP бонусом 1000$
Получи бонус
55%
от ИнстаФорекс
на каждое пополнение
Ответить в теме
Страница 5 из 13
Первая ... 4 5 6 ... Последняя ◄╝

Показаны сообщения: с 81 по 100 из 259

Тема: ООП для MQL4/MQL5 - это очень просто. Курс для начинающих.

 Перейти в классический вид темы
     
  1. ТОП сообщений
    2018-01-14   22:44
    Лучший ответ #1
    Накопленные выплаты 99146 RUB

    Всем привет! Открываю тему по изучению объектно-ориентированного программирования с нуля. Будем использовать языки MQL4, MQL5, возможно, С++ в составе DLL. Будет желание, зацепим и C# с Matlab'ом Кратенько о себе. Программист с более чем 25-летним стажем, работал в крупных отечественных и зарубежных компаниях по разработке ПО и различной электроники. В мае 2010 г. понял, что наемная работа мешает мне развиваться в программировании на форексе, с тех пор работаю дома и вполне доволен. Активно использую в работе MQL4, MQL5, VS 2017 C++, C#, Matlab. Ну и всякое разное по мелочи. Краткий план курса Структуры От структур к классам Абстрактные классы, виртуальные функции Интерфейсы Что дальше? И вопрос к модераторам. Хотелось бы сделать меню, чтобы участники могли ориентироваться в разделах темы. Если я сделаю меню в начальных постах, как долго у меня будет доступ на редактирование поста с меню? Надо ли мне будет раз в несколько дней делать там изменения, чтобы пост не "заморозился"? Сможете ли вы в крайнем случае (например, я отсутствовал больше разрешенного срока) разморозить пост с меню? Или лучше продублировать меню на независимом ресурсе, например FB? Жду вашего ответа и начинаю сегодня.

    2018-01-16   03:47
    Лучший ответ #2
    Накопленные выплаты 99146 RUB

    Ну что, начнем осваивать классы. С вашего позволения я сделаю для начала небольшой лирический отступ. Среди новичков есть мнение, что классы - это очень сложно, что понять смысл ООП может только профессиональный программист и т.д. Заявляю с полной ответственностью - это полная ерунда. Как обычно, я всему учу на своем примере. Я по образованию вообще электронщик, программирование освоил самостоятельно. Тем не менее за душой куча проектов, как для России, так и по аутсортингу. Так что прочь сомнения, день-другой, и вы поймете, как работают классы! -------------- Итак, для учебных целей придумаем простенькую структуру struct SSimple1 { int ticket; double profit; }; Как нам преобразовать ее в класс? Элементарно, Ватсон! Заменяем слово struct на class class CSimple1 { int ticket; double profit; }; И пишем проверочный код. Да, друзья, чтобы чему-то научиться, надо писать код. Самому. Ручками. Читать мои посты недостаточно. Так что пиво в сторону, открывайте редактор MQL4 или 5 и пишем скрипт. void OnStart() { SSimple1 ss1; CSimple1 cs1; ss1.ticket = 123; cs1. // заметили, что после точки у вас не развернулся список из 2-х переменных? // попробуйте насильно вбить cs1.ticket = 123; // получите ошибку компиляции. Что делать, щеф?? Дело в том, что классы исторически произошли от структур, по крайней мере в Си-подобных языках. И если в структуре все ее члены, методы(функции) и поля(переменные) открыты внешнему миру, то в классах есть три уровня защиты, это уровни private, protected, public. Начнем с самого "доброго" уровня - с public Все, что находится в секции public, видно окружающему миру так же, как и все, что есть в структуре. Делаем эксперимент. class CSimple1 { public: // объявили секцию, где все будет доступно снаружи int ticket; double profit; }; И еще раз прогоняем OnStart. Обратите внимание, после печатанья точки cs1. у вас вдруг стал доступен список из 2-х переменных? Это компилер увидел секцию public и решил, что теперь вы имеете доступ к этим двум переменным. Далее разберемся с правами доступа поглубже и перейдем к наследованию. Потом забубеним что-то практическое, желательно мультиплатформенное, для мт4 и мт5 одновременно. ---------------------------------------- Друзья, Дамы и Господа. Я буду все больше давать практических заданий, очень рекомендую не просто читать эти посты, а делать их. Времени это будет занимать немного, но у вас наработается практика. Тупое чтение никогда ничего не дает. В этой жизни надо действовать, а не тупо читать!

    2018-07-19   20:34
    Лучший ответ #3
    Накопленные выплаты 27419 RUB

    полуавтомат хочу, и в тестере хочу погонять его, лень писать 2 версии (тестер/реал), надеюсь решить проблему имитации в тестере событий мыши полуавтомат хочу в виде панели, в которой можно чекбоксом выделить необходимый ордер и перевести этот ордер в отдельное сопровождение (доливки, трал, усреднение и пр.), а сам советник будет выставлять ордера по основному алгоритму - вот такая вот идея

    2018-01-15   00:53
    Лучший ответ #4
    Накопленные выплаты 99146 RUB

    У нас в процессе торговли может быть множество открытых и отложенных ордеров. Конечно, можно было бы тупо сделать каждый параметр динамическим массивом массивом, но представьте все неудобства такого подхода. При каждом увеличении количество ордеров сверх размера массива надо его менять для каждого параметра. И вопрос, что делать с дырами, которые получаются на месте закрытых ордеров? int ticket[], cmd[], slippage[], magic[]; double volumeSend[], volumeReal[], priceSend[], priceReal[], stoploss[], takeprofit[]; Гораздо проще и красивее упаковать все параметры в контейнер, который называется структурой. Для того, чтобы использовать структуру, надо сначала объявить ее тип. Это делается один раз и в дальнейшем мы можем создавать экземпляры этой структуры, или говоря по другому переменные типа объявленной структуры. struct SOrderParams // объявили имя типа. Теперь в программе помимо стандартных типов int, double и др. появился наш пользовательский тип структуры с именем SOrderParams { int ticket, cmd, slippage, magic; double volumeSend, volumeReal, priceSend, priceReal, stoploss, takeprofit; }; Допускается после объявления типа сразу же создавать переменные этой структуры struct SOrderParams // объявили имя типа. Теперь в программе помимо стандартных типов int, double и др. появился наш пользовательский тип структуры с именем SOrderParams { int ticket, cmd, slippage, magic; double volumeSend, volumeReal, priceSend, priceReal, stoploss, takeprofit; } order1, order2, orders;

    2018-01-15   13:22
    Лучший ответ #5
    Накопленные выплаты 99146 RUB

    Продолжим. Структуры, подобные SOrderParams, то есть имеющие в составе только целые и вещественные типы данных, называются простыми. Например, если в состав структуры входит строка или указатель на класс, она теряет невинность и простоту Простые типы структур можно присваивать, при этом данные будут копироваться. oparams_local2 = oparams_local3; Но тут есть важное замечание. Для компилятора идентичными структурами будут структуры одного типа. А тип определяется однозначно по имени типа, компилятор не анализирует, как там структура устроена внутри. Имя другое - все, значит и структура другая. Рассмотрим на примере. struct SOrderParams2 // та же структура, что и SOrderParams, но с другим именем типа - для компилятора она не идентична SOrderParams { int ticket, cmd, slippage, magic; double volumeSend, volumeReal, priceSend, priceReal, stoploss, takeprofit; } order2_1, order2_2, orders2; SOrderParams oparams_global; // глобальная переменная структуры, все поля обнулены void OnStart() { SOrderParams oparams_local1; // локальная переменная структуры, в полях в общем случае может быть мусор от предыдущих вызовов (именно в данном случае не будет, так как однопроходный скрипт) SOrderParams oparams_local2 = {0}; // обнулили все поля принудительно SOrderParams oparams_local3 = {123, ORDER_TYPE_SELL/* OP_SELL*/, 25, 456789, 0.5, 0.5, 1.25468, 1.25465, 1.25860, 1.25410}; // обнулили все поля принудительно Print(oparams_local2.priceReal, ", ", oparams_local2.stoploss, ", ", oparams_local3.magic, ", ", oparams_local3.stoploss); oparams_local2 = oparams_local3; // order2_1 = oparams_local2; // ошибка компиляции 'operator=' - illegal operation use Structures.mq5 30 13 } Структуры разных типов можно копировать только отдельно по полям // order2_1 = oparams_local2; // ошибка компиляции 'operator=' - illegal operation use Structures.mq5 30 13 // поэтому копируем по полям order2_1.cmd = oparams_local2.cmd; order2_1.magic = oparams_local2.magic; order2_1.priceReal = oparams_local2.priceReal; order2_1.priceSend = oparams_local2.priceSend; // и так далее

    2018-01-14   23:25
    Лучший ответ #6
    Накопленные выплаты 99146 RUB

    Курс будет рассчитан на людей, знакомых с программирование на MQL4/5, но не владеющих ООП. То есть я не буду объяснять, что такое циклы, функции и т.д. Смело задавайте вопросы в рамках темы, обязательно всем отвечу. Огромная просьба не скатываться во флейм и не устраивать священные войны а-ля "ООП vs процедурное программирование", именно из-за флейма я ушел с форума разработчиков Metatrader и пришел сюда. Надеюсь, тут народ подисциплинированнее, а модераторы построже В первых постах возможны ошибки с кодами оформления, т.к. нет особого опыта на этом движке, прошу указывать и поправлять. ------ Поехали! ------- Начну с того, что, вопреки ошибочному мнению, языки MQL4 и MQL5 практически одинаковы, поэтому все, что касается ООП, будет работать и там и там. Отличия касаются только API (application program interface - программный интерфейс приложений), это торговые функции, работа с таймсериями, индикаторами и т.д. Но сами языки идентичны. Основная цель структуры - упаковать набор разнородных данных в единый контейнер. Например, имеем набор переменных int ticket, cmd, slippage, magic; double volumeSend, volumeReal, priceSend, priceReal, stoploss, takeprofit; Как вы поняли, в них будут хранится параметры открытого ордера (код для MQL4), для MQL5 параметры будут немного другие. Поэтому я постараюсь писать кросс-платформенный код, как давно делаю в своих роботах. В дальнейшем мы будем разрабатывать класс по управлению сеткой виртуальных ордеров и надо будет как-то хранить параметры сетки и параметры уже открытых ордеров. Для этого будем использовать структуру. Продолжение через 30 минут. !!!!!!!!!!!!!!! почему MQL код не оформился? Подскажите плз, как правильно сделать

  2. Линк#1
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Всем привет!

    Открываю тему по изучению объектно-ориентированного программирования с нуля. Будем использовать языки MQL4, MQL5, возможно, С++ в составе DLL. Будет желание, зацепим и C# с Matlab'ом
    Кратенько о себе. Программист с более чем 25-летним стажем, работал в крупных отечественных и зарубежных компаниях по разработке ПО и различной электроники. В мае 2010 г. понял, что наемная работа мешает мне развиваться в программировании на форексе, с тех пор работаю дома и вполне доволен. Активно использую в работе MQL4, MQL5, VS 2017 C++, C#, Matlab. Ну и всякое разное по мелочи.

    Краткий план курса
    1. Структуры
    2. От структур к классам
    3. Абстрактные классы, виртуальные функции
    4. Интерфейсы
    5. Что дальше?

    И вопрос к модераторам. Хотелось бы сделать меню, чтобы участники могли ориентироваться в разделах темы. Если я сделаю меню в начальных постах, как долго у меня будет доступ на редактирование поста с меню? Надо ли мне будет раз в несколько дней делать там изменения, чтобы пост не "заморозился"? Сможете ли вы в крайнем случае (например, я отсутствовал больше разрешенного срока) разморозить пост с меню? Или лучше продублировать меню на независимом ресурсе, например FB?
    Жду вашего ответа и начинаю сегодня.

    Последний раз редактировалось Gold; 17.01.2018 в 11:23. Причина: Добавил ссылки для п.1 и п.2

  3. <a href="https://www.instaforex.com/ru/forexcopy_system">Форекс портал</a>
  4. Линк#85
    Свой человек
    Все пучком
     
    IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация Аватар для IgorM
    Регистрация:
    09.05.2011
    Пол:
    Мужчина
    Сообщений:
    798
    Деньги за посты (Подробнее):
    27419 RUB
    Поставил лайков:
    233
    Получено лайков:  704
    в 407 сообщениях
    88%
    Цитата Сообщение от VDev Посмотреть сообщение
    Пока думаю, как безболезненно разруливать зависшие убыточные ордера на автомате.
    а думать то особо тут нечего... много чего пишут любители локов и нелюбители убытков , и я писал и даже делал , причем выложил работающую идею
    https://www.forexdengi.com/threads/8...ghlight=locker
    ну и итого: при "разруливании убыточных ордеров" всего 2 стратегии:
    1. усреднение
    2. дробление убытка

    для 1-й стратегии - выставляем ордера такого же типа как и убыточный по повторным сигналам ТС (или тупо по уровням ниже/выше 1-го ордера)
    для 2-й стратегии - выставляем ордера противоположного типа
    ЗЫ: но чудес не бывает, чтобы разрулить убыток, нужно заработать в последующем больше чем убыток


  5. post_thanks Получено лайков: 3

    BrownAleks (02.05.2018), VDev (02.05.2018), Незарегистрированный (1 пользователь)

  6. Линк#86
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Цитата Сообщение от IgorM Посмотреть сообщение
    а думать то особо тут нечего... много чего пишут любители локов и нелюбители убытков , и я писал и даже делал , причем выложил работающую идею
    https://www.forexdengi.com/threads/8...ghlight=locker
    ну и итого: при "разруливании убыточных ордеров" всего 2 стратегии:
    1. усреднение
    2. дробление убытка

    для 1-й стратегии - выставляем ордера такого же типа как и убыточный по повторным сигналам ТС (или тупо по уровням ниже/выше 1-го ордера)
    для 2-й стратегии - выставляем ордера противоположного типа
    ЗЫ: но чудес не бывает, чтобы разрулить убыток, нужно заработать в последующем больше чем убыток
    И как, получилось что-то удачное? Я склоняюсь к варианту второй стратегии, но не такому примитивному. Хочется чуда ))


  7. post_thanks Получено лайков: 3

    Незарегистрированный (3 пользователя)

  8. Линк#87
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Цитата Сообщение от HorseStep Посмотреть сообщение
    Дык это же список !
    Иначе и быть не может.

    Для ускорения - нужен не список, а массив, возможно даже индексированный...

    Зачем же применять список там, где он нецелесообразен ?
    Список хорош для, скажем, организации очереди, когда тебе искать не надо, а нужно организовать буффер - добавляем элементы в хвост, берем с головы....
    И как в него вставить и удалить в произвольном месте?
    В МТ5 сравнительно недавно ввели \MQL5\Include\Generic\HashMap.mqh, очень быстрая хеш-таблица, я тестировал, вроде тут выкладывал результаты.
    Вот нашел, если ссылка не сработает, пост 57
    ссылка


  9. Линк#88
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Неудобно тут выкладывать большой код. Сделаю проект в Хранилище для МТ5 и расшарю на чтение. Например с таким именем \MQL5\Shared Projects\OOPIsSimple\
    И буду там выкладывать код, можно будет качнуть и сразу запустить без лишних телодвижений.

    Все умеют пользоваться Хранилищем для МТ4 и МТ5? К сожалению, примерно летом 2017 Метаквоты зачем-то разделили одно Хранилище на два. Одно, на базе SVN осталось для МТ4, второе, какая-то их собственная разработка досталось МТ5.

    Я уверен, что большинство классов типа хеш-таблиц, будут работать и на MQL4, и на MQL5. Ну разберемся, как лучше, все в Хранилище МТ5 или дублировать для МТ4. Напишу инструкцию, а то я был поражен, что многие опытные программисты с mql5.com даже не знают, что такое Cистема Управления Версиями и, как в каменном веке, делают копии на флешках, другом HDD и т.д.


  10. Линк#89
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,552
    Деньги за посты (Подробнее):
    51054 RUB
    Поставил лайков:
    270
    Получено лайков:  587
    в 531 сообщениях
    38%
    Цитата Сообщение от VDev Посмотреть сообщение
    И как в него вставить и удалить в произвольном месте?
    В МТ5 сравнительно недавно ввели \MQL5\Include\Generic\HashMap.mqh, очень быстрая хеш-таблица, я тестировал, вроде тут выкладывал результаты.
    Вот нашел, если ссылка не сработает, пост 57
    ссылка
    И как в него вставить и удалить в произвольном месте?
    А в каких случаях, это необходимо делать? Для примера.


  11. post_thanks Получено лайков: 2

    VDev (02.05.2018), Незарегистрированный (1 пользователь)

  12. Линк#90
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Блиннн, как же тут неудобно картинки вставлять, 100500 телодвижений. Щас ошибся и проглотило сообщение, опять набивать!!!

    О-опс, посмотрел, а в МТ4 тоже есть MQL4IncludeGenericHashMap.mqh !!
    Сравнил Байондом, полное совпадение, за исключением понятной строчки в МТ4

    Нажмите на изображение для увеличения
Название: BC.png
Просмотров: 5
Размер:	43.3 КБ
ID:	1919074


  13. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  14. Линк#91
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    А в каких случаях, это необходимо делать? Для примера.
    Например, ведем таблицу открытых ордеров, как раз часть текущего проекта. Возьмем для простоты примера МТ4.
    Имеем 50 открытых ордеров, тикеты 123, 245, 456 и т.д. Как найти номер 586? А только перебором, ну, можно оптимизировать поиск, есть способы. Но все равно будет перебор. А потом оопс, тикет 666 закрылся, получитась дырка, что с ней делать? Писать ноль? А потом открылся тикет 667, куда его писать, в эту дырку? В общем, имеет место быть геммор.

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

    Вот пример из теста, о котором говорил, выложу его в Хранилище вечерком, надо его проверить, а то давно писалось и коверкалось ))


    PHP код:
    void CheckHashMap()
    {
    CHashMap<int, CObject*> *hmap = new CHashMap<int, CObject*>(PassCount); // так тоже нет нет, пишет перед //CAvOrder * order = new CAvOrder(1, "EURUSD", ORDER_TYPE_BUY, 1, D'2018.02.21 12:44', 1.21354);
    CAvOrder * order = new CAvOrder;

    static
    ulong start, stop;
    start = GetMicrosecondCount();
    for(
    int n = 0; n < PassCount; n++)
    {
    if(!
    hmap.Add(n+1, order))
    {
    Print(
    "Неудачный Add, итерация ", n+1);
    break;
    }
    }
    stop = GetMicrosecondCount();
    Print(
    "Время добавления ", PassCount, " элементов = ", DoubleToString((stop-start)/1000000.0, 4), " сек, ", DoubleToString((stop-start)/(double)PassCount, 4), " мкс/объект" );

    start = GetMicrosecondCount();
    CObject* obj;
    for(
    int n = 0; n < PassCount; n++)
    {
    if(
    hmap.ContainsKey(n+1))
    {
    if(!
    hmap.TryGetValue(n+1, obj))
    {
    Print(
    "Неудачный поиск, итерация ", n+1);
    break;
    }
    }
    else
    {
    Print(
    "Ключ не найден, итерация ", n+1);
    break;
    }
    }
    stop = GetMicrosecondCount();
    Print(
    "Время поиска ", PassCount, " элементов = ", DoubleToString((stop-start)/1000000.0, 4), " сек, ", DoubleToString((stop-start)/(double)PassCount, 4), " мкс/объект" );

    start = GetMicrosecondCount();
    for(
    int n = 0; n < PassCount; n++)
    {
    hmap.Remove(n);
    }
    stop = GetMicrosecondCount();
    Print(
    "Время удаления ", PassCount, " элементов = ", DoubleToString((stop-start)/1000000.0, 4), " сек, ", DoubleToString((stop-start)/(double)PassCount, 4), " мкс/объект" );
    delete hmap;
    delete order;
    }


  15. post_thanks Получено лайков: 4

    MonyaMaker (02.05.2018), Незарегистрированный (3 пользователя)

  16. Линк#92
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Да, забыл, для тех, кто пишет только на МТ4. Не по теме ветки, но все же. Вчера Ренат (директор Metaquotes) сообщил, что готовится новая версия МТ4 с более полной совместимостью с MQL5. Вот цитата:

    Renat Fatkhullin:
    Используйте последнюю бету 1810 с сервера MetaQuotes-Demo.
    Мы скоро выпустим релиз четверки и пятерки для совместимости с этим апдейтом
    .

    Так что слухи о смерти МТ4 сильно преувеличены ))


  17. post_thanks Получено лайков: 1

    Viktor1987 (02.05.2018)

  18. Линк#93
    Свой человек
    Все пучком
     
    IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация Аватар для IgorM
    Регистрация:
    09.05.2011
    Пол:
    Мужчина
    Сообщений:
    798
    Деньги за посты (Подробнее):
    27419 RUB
    Поставил лайков:
    233
    Получено лайков:  704
    в 407 сообщениях
    88%
    Цитата Сообщение от VDev Посмотреть сообщение
    И как, получилось что-то удачное? Я склоняюсь к варианту второй стратегии, но не такому примитивному. Хочется чуда ))
    в тестере получилось, можете по ссылке выше скачать, но не понравилось мне все это да и времени не было в то время у меня - все забросил
    там по сигналу АДХ выставлялись ордера по стратегии "дробление убытка" - на истории все красиво в целом было
    ну насчет примитивного и по сабжу топика - имхо, должно быть примерно так:
    - класс ТС
    - если ТС получила убыток, то создается класс вывода в БУ и новый класс торговли по основной ТС
    - если БУ достигнут, то уничтожаем класс БУ и класс который вызвал БУ
    типа так
    реализовать такую ООП ТС я могу, единственное не могу прикинуть как классы создавать и уничтожать: если описать класс и сделать массив классов, и добавлять новый элемент массива - да все будет работать, а как удалять элементы массива и сдвигать пустые?
    вот типа так хочу породить сиё чудо:
    paperclip Рисунок attachment1919138 


  19. post_thanks Получено лайков: 4

    VDev (02.05.2018), Незарегистрированный (3 пользователя)

  20. Линк#94
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,552
    Деньги за посты (Подробнее):
    51054 RUB
    Поставил лайков:
    270
    Получено лайков:  587
    в 531 сообщениях
    38%
    Цитата Сообщение от VDev Посмотреть сообщение

    За пример спасибо, про коллизии не спрашиваю.


    Цитата Сообщение от VDev Посмотреть сообщение
    Да, забыл, для тех, кто пишет только на МТ4. Не по теме ветки, но все же. Вчера Ренат (директор Metaquotes) сообщил, что готовится новая версия МТ4 с более полной совместимостью с MQL5. Вот цитата:

    .

    Так что слухи о смерти МТ4 сильно преувеличены ))
    Они сейчас улучшат, и четвёрка тоже ляжет.


  21. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  22. Линк#95
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Цитата Сообщение от IgorM Посмотреть сообщение
    в тестере получилось, можете по ссылке выше скачать, но не понравилось мне все это да и времени не было в то время у меня - все забросил
    там по сигналу АДХ выставлялись ордера по стратегии "дробление убытка" - на истории все красиво в целом было
    ну насчет примитивного и по сабжу топика - имхо, должно быть примерно так:
    - класс ТС
    - если ТС получила убыток, то создается класс вывода в БУ и новый класс торговли по основной ТС
    - если БУ достигнут, то уничтожаем класс БУ и класс который вызвал БУ
    типа так
    реализовать такую ООП ТС я могу, единственное не могу прикинуть как классы создавать и уничтожать: если описать класс и сделать массив классов, и добавлять новый элемент массива - да все будет работать, а как удалять элементы массива и сдвигать пустые?
    вот типа так хочу породить сиё чудо:
    Использовать CHashTable, как раз вчера-сегодня про хеш-таблицы много тут писали.


  23. post_thanks Получено лайков: 3

    IgorM (02.05.2018), Незарегистрированный (2 пользователя)

  24. Линк#96
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    За пример спасибо, про коллизии не спрашиваю.
    Они сейчас улучшат, и четвёрка тоже ляжет.
    У меня в скальпере так сделано, у него обычно несколько десятков открытых мелких ордеров. Торгую им на реале, проблем нет.

    А что легло? Бета билды пятерки выходят иногда по 2 в неделю. Да, бывают и баги, но не смертельные. Главное, чтобы быстро устраняли

    Меня другое огорчает, что вместо принципиально важных вещей часто вносятся косметические изменения. Ренат обещал сервисы еще полтора года назад, так и нет.
    Зато сделали кастомные символы. Ничего, торговать можно, а идеала в природе не существует ))

    PS: вот форум там архаичный, на уровне 20-летней давности. Бесит ))


  25. post_thanks Получено лайков: 3

    Незарегистрированный (3 пользователя)

  26. Линк#97
    В начале пути
    next19 стараюсь положительно себя зарекомендовать Аватар для next19
    Регистрация:
    26.06.2016
    Пол:
    Мужчина
    Сообщений:
    9
    Деньги за посты (Подробнее):
    120 RUB
    Поставил лайков:
    5
    Получено лайков:  0
    в 0 сообщениях
    0%
    Благодарю за тему... очень полезная. Вот есть вопрос.. Если какая либо функция в параметрах ссылается на структуру, то компилятор ругается на имя и поля структуры которая не объявлена. Как победить?? сделать передаваемые параметры универсальными..
    вот пример
    PHP код:
    void CopyStruct(MyStruct &Source, MyStruct &Destination)
    {
    Destination.Field1 = Source.Field1;
    Destination.Field2 = Source.Field2;
    Destination.Field3 = Source.Field3;
    Destination.Field4 = Source.Field4;
    }


  27. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  28. Линк#98
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Цитата Сообщение от next19 Посмотреть сообщение

    Не поверил и проверил, все компилируется и запускается нормально
    PHP код:
    struct MyStruct
    {
    int Field1, Field2, Field3, Field4;
    };

    void CopyStruct(MyStruct &Source, MyStruct &Destination)
    {
    Destination = Source; // структуры идентичны, можно просто копировать
    }

    void OnStart()
    {
    MyStruct ms1 = {1,2,3,4}, ms2;
    CopyStruct(ms1, ms2);
    ms2 = ms1; // можно напрямую
    У вас где-то в коде ошибка. Проверьте имена. Часто компилятор обнаруживает ошибку, а показывает в другом месте. Закомментируйте все, кроме объявления структуры и этой функции и увидите - ошибки не будет


  29. post_thanks Получено лайков: 9

    Незарегистрированный (9 пользователей)

  30. Линк#99
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Цитата Сообщение от Tekora Посмотреть сообщение
    Не знаю что вы подразумеваете под ошибкой поиска, и реализацией от Metaquotes , но скаченный файл Dictionary.mgh в конце статьи в МТ4 выдает ошибку при компиляции так же



    Лично я не настолько продвинутый программист, как Вы. Как исправить такую ошибку и выложите реализацию от Metaquotes, плииз... Может не у всех МТ5 установлен.
    Поставьте МТ5, это дело 3 минут, качаете прямо с метаквотов и ставите, дистрибутив в правом нижнем углу страницы, где вот такой текст, как я ниже скопировал. Сразу будет открыт демо-счет.
    Я буду выкладывать мультиплатформенный код, но наверное, будут и части только под МТ5.
    Программировать можно только под Windows, остальные ОС только для торговли.

    Присоединяйся — скачай MetaTrader 5!
    Windows
    iPhone/iPad
    Mac OS
    Android
    Linux


  31. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  32. Линк#100
    В начале пути
    next19 стараюсь положительно себя зарекомендовать Аватар для next19
    Регистрация:
    26.06.2016
    Пол:
    Мужчина
    Сообщений:
    9
    Деньги за посты (Подробнее):
    120 RUB
    Поставил лайков:
    5
    Получено лайков:  0
    в 0 сообщениях
    0%
    Вот насчет мусора и дыр в массивах структур столкнулся сам..через некоторое время работы сова появляется что то вроде этого:
    --------------------------------------------------------------
    unknown ticket 483096923 for OrderClose function
    GBPUSD,H1: Закрытие_Позиций:Критическая ошибка.. невозможно выполнить процедуру закрытия GBPUSD№ тикета: 483096923Ошибка: Неверный номер тикета.
    -------------------------------------------------------------
    Вот накидал щас, проверить не могу рынок закрыт.
    PHP код:
    //+------------------------------------------------------------------+
    //| Тест_Стуктура.mq4 |
    //| Copyright 2016, MetaQuotes Software Corp. |
    //| https://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2016, MetaQuotes Software Corp."
    #property link "https://www.mql5.com"
    #property version "1.00"
    #property strict
    extern bool знач = false;
    struct Инфо_Позиции
    {
    string Символ;
    int Тип;
    int Тикет;
    int Дигитс;
    int Спред;
    int Магик;
    };
    Инфо_Позиции Ордер[];
    int OnInit()
    {
    return(
    INIT_SUCCEEDED);
    }

    void OnDeinit(const int reason)
    {
    }

    void OnTick()
    {
    Инит_Ордер (Ордер);//---Обнуляем все поля
    if(знач) Рыночные_ордера (Ордер);//---Заполняем значениями

    //--------------Это кусок от ir0407------------------------------------------------------------+
    //Формируем строку для функции Comment
    string msg="";
    int массив = ArrayRange(Ордер,0);
    for(
    int i = 0; i < массив-1; i++)
    {
    msg = StringConcatenate(msg, "{", IntegerToString(Ордер[i].Тикет, 1), ", ");
    msg = StringConcatenate(msg, DoubleToString(Ордер[i].Дигитс, 5), ", ");
    msg = StringConcatenate(msg, DoubleToString(Ордер[i].Спред , 2), ", ");
    msg = StringConcatenate(msg, IntegerToString(Ордер[i].Магик ), ", ");
    msg = StringConcatenate(msg, IntegerToString(Ордер[i].Тип ), ", ");
    msg = StringConcatenate(msg, Ордер[i].Символ, "}\n");
    }
    //Выводим строку на экран
    Comment(msg);
    //--------------------------------------------------------------------------------------------------+

    }
    void Рыночные_ордера (Инфо_Позиции &Ордерс[]){
    int кол_во=0,i;
    ArrayResize(Ордерс,OrdersTotal(),0);
    for(
    i=OrdersTotal()-1;i>=0;i--){
    if(
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
    Ордер[i].Символ = OrderSymbol();
    Ордер[i].Тип = OrderType();
    Ордер[i].Тикет = (int)OrderTicket();
    Ордер[i].Дигитс = (int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
    Ордер[i].Спред = (int)SymbolInfoInteger(OrderSymbol(),SYMBOL_SPREAD);
    Ордер[i].Магик = OrderMagicNumber();
    кол_во++;
    }
    }
    ArrayResize(Ордерс,кол_во);
    }

    void Инит_Ордер (Инфо_Позиции &Ордерс[]){
    int кол_во=0,i;
    ArrayResize(Ордерс,0,0);
    for(
    i=6-1;i>=0;i--){
    Ордер[i].Символ = "";
    Ордер[i].Тип = 0;
    Ордер[i].Тикет = 0;
    Ордер[i].Дигитс = 0;
    Ордер[i].Спред = 0;
    Ордер[i].Магик = 0;
    кол_во++;
    }
    ArrayResize(Ордерс,кол_во);
    }
    Всё правильно? или может эстетичней и проще есть вариант...

    Увидел ошибку..-)) функция Инит_Ордер вот так должная быть наверно..
    PHP код:
    void Инит_Ордер (Инфо_Позиции &Ордерс[]){
    ArrayResize(Ордерс,0,0);
    Ордер[0].Символ = "";
    Ордер[0].Тип = 0;
    Ордер[0].Тикет = 0;
    Ордер[0].Дигитс = 0;
    Ордер[0].Спред = 0;
    Ордер[0].Магик = 0;
    }
    paperclip Вложения


  33. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  34. Линк#101
    Кандидат форумных наук
    HorseStep хорошая репутация HorseStep хорошая репутация HorseStep хорошая репутация HorseStep хорошая репутация HorseStep хорошая репутация HorseStep хорошая репутация Аватар для HorseStep
    Регистрация:
    31.07.2015
    Пол:
    Мужчина
    Сообщений:
    1,876
    Деньги за посты (Подробнее):
    10991 RUB
    Поставил лайков:
    24
    Получено лайков:  415
    в 355 сообщениях
    22%
    Цитата Сообщение от VDev Посмотреть сообщение
    вот форум там архаичный, на уровне 20-летней давности. Бесит ))
    А мне наоборот, нравится.
    Всякие рюшечки да свистоперделки - только мешают.
    Между прочим, в том форуме - можно в сообщениях таблицы выводить. А в этом - увы...

    Более 300 систем в советнике "Лига Торговых Систем" (графики результатов на последних страницах)
    Помоги оптимизировать одну из ТС советника (есть иллюстрированная инструкция) - и пользуйся лучшей из уже оптимизированных !

  35. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  36. Линк#102
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Цитата Сообщение от HorseStep Посмотреть сообщение
    А мне наоборот, нравится.
    Всякие рюшечки да свистоперделки - только мешают.
    Между прочим, в том форуме - можно в сообщениях таблицы выводить. А в этом - увы...
    Вот тут я несколько недель не появлялся и ветка жива. А там она давно улетела бы в отстойник. Там даже не форум, а какая-то разновидность суперчата.


  37. Линк#103
    Знающий
    Очень рад
     
    VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь VDev авторитетный пользователь Аватар для VDev
    Регистрация:
    14.07.2010
    Пол:
    Мужчина
    Сообщений:
    3,266
    Деньги за посты (Подробнее):
    99146 RUB
    Поставил лайков:
    718
    Получено лайков:  2,667
    в 1,556 сообщениях
    82%
    Давайте немного вернемся к теории и поговорим о наследовании. Тем более, вещь это важная и встречается повсеместно.
    Как всегда, я постараюсь упрощать рассказ до уровня людей, которые совсем не в теме, так что более опытные могут улыбаться моим примерам. Или негодовать, возражать и дополнять.
    Наследование в ООП довольно сильно похоже на наследование в природе. Как вы наверное знаете, ДНК человека (кроме искалеченных ЕГЭ) довольно похожи на ДНК многих животных. Я даже читал, что наше ДНК и ДНК какого-то червя совпадают на 70% )) А с шимпанзе так вообще на 98%. Кстати, после этой инфы я стал внимательнее присматриваться к людям ))

    Ладно, наследование в природе - сложная вещь. А вот в ООП оно подчиняется довольно простым правилам, которые мы сейчас и рассмотрим.
    Как вы помните, в классе MQL4, MQL5, а также С++, C# и некоторых других языков есть всего три уровня доступа
    1. Приватный, секция начинается с ключевого слова private


  38. post_thanks Получено лайков: 4

    BrownAleks (02.07.2018), Незарегистрированный (3 пользователя)

  39. Линк#104
    Частый гость
    websalamander приемлемый уровень репутации websalamander приемлемый уровень репутации Аватар для websalamander
    Регистрация:
    25.04.2018
    Пол:
    Мужчина
    Сообщений:
    199
    Деньги за посты (Подробнее):
    6434 RUB
    Поставил лайков:
    73
    Получено лайков:  157
    в 108 сообщениях
    79%
    Я так понимаю public и protected изучаем самостоятельно?
    VDev, продолжение темы будет? Большое удовольствие должно приносить общение в ветке, кто настроен на программирование в торговле, так как без своего "боевого" и отлаженного робота скоро делать на терминале нечего - только слив.


  40. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)


Страница 5 из 13
Первая ... 4 5 6 ... Последняя ◄╝

Похожие темы

  1. MQL4 для начинающих
    от Nick'Otin в разделе MQL-программирование, АТС
    Replies: 2400
    Последнее сообщение: 18.12.2019, 21:16
  2. Программирование MQL4/MQL5, для начинающих, в вопросах и ответах.
    от Aleksandr Bereznyak в разделе MQL-программирование, АТС
    Replies: 55
    Последнее сообщение: 01.05.2019, 10:13
  3. Баги и ошибки в MQL4 и MQL5
    от Mihey85 в разделе MQL-программирование, АТС
    Replies: 2
    Последнее сообщение: 06.03.2016, 18:25
  4. Бесплатный курс для начинающих трейдеров
    от bogo в разделе Доска объявлений
    Replies: 31
    Последнее сообщение: 09.08.2013, 16:01
  5. mql4->mql5. ищу программиста
    от artemserebryakov в разделе Доска объявлений
    Replies: 0
    Последнее сообщение: 28.07.2011, 22:24