Создание DLL для Metatrader 4 на языке C++ - Страница 3
Страница 3 из 10 ПерваяПервая 1 2 3 4 5 6 7 ... ПоследняяПоследняя
Показано с 21 по 30 из 97

Тема: Создание DLL для Metatrader 4 на языке C++

  1. #21
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    599
    Благодарности
    Получено: 253
    Отправлено: 47
    Цитата Сообщение от zlodei Посмотреть сообщение
    ))))) Я знаю
    8 и более ядер (вроде до 16) - это уже Xeon, стоимостью от нескольких килобаксов и выше )) эх, мечты..))
    А по делу - в длл можно ведь просто выносить не весь код, а прожорливые функции, тут я трудностей не вижу, сам делал, ничем не отличается от использования MQL-библиотек. Я бы по этому простому пути пошел, хоть что-то улучшилось бы.

    Вы не можете благодарить!

  2. #22
    Местный Аватар для zlodei
    Регистрация
    17.07.2013
    Адрес
    Караганда
    Сообщений
    633
    Благодарности
    Получено: 49
    Отправлено: 25
    Цитата Сообщение от Алексей Волчанский Посмотреть сообщение
    8 и более ядер (вроде до 16) - это уже Xeon, стоимостью от нескольких килобаксов и выше )) эх, мечты..))
    можно и по доступней семейства Сore i7 Extreme 6 ядерные по 2 потока.

    ---------- Сообщение добавлено в 18:54 ----------

    Цитата Сообщение от Алексей Волчанский Посмотреть сообщение
    А по делу - в длл можно ведь просто выносить не весь код, а прожорливые функции, тут я трудностей не вижу, сам делал, ничем не отличается от использования MQL-библиотек. Я бы по этому простому пути пошел, хоть что-то улучшилось бы.
    Создать библиотеку к которой будет обращаться советник в случае сопровождения позиции??? Это получается тормоз будет только если например открыта позиция, и при этом тралится, а когда позиций нет - то прогонка увеличивается примерно так это всё будет?

    Вы не можете благодарить!

  3. #23
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    599
    Благодарности
    Получено: 253
    Отправлено: 47
    Цитата Сообщение от zlodei Посмотреть сообщение
    можно и по доступней семейства Сore i7 Extreme 6 ядерные по 2 потока.

    ---------- Сообщение добавлено в 18:54 ----------


    Создать библиотеку к которой будет обращаться советник в случае сопровождения позиции??? Это получается тормоз будет только если например открыта позиция, и при этом тралится, а когда позиций нет - то прогонка увеличивается примерно так это всё будет?
    Ну я же не в курсе, какой у тебя алгоритм, но если неделю оптимизируется - значит много вычислений. Ну для примера...берем индикатор MACD, просто я его вот тут разбирал, там три части. И, к примеру, ты его используешь в советнике.
    1. Главные тормоза. При вызове любого индикатора он пересчитыват себя полностью! То есть если у тебя на чарте реально накоплено 250000 баров, он на каждом вызове, а реально на каждом тике будет пересчитывать их всех! Решение - в лоб, уменьши количество баров на чарте. Умное решение - перепиши индюк, чтобы при старте считал только необходимое тебе количество баров, ну к примеру 50.
    2. Опять же на примере MACD. Смотрим код
    Код:
       for(int i=0; i<limit; i++)
          MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
    //---- signal line counted in the 2-nd buffer
       for(i=0; i<limit; i++)
          SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
    Чувствуешь, где тормоза? По 2 вызова iMA в цикле, и каждый раз они пересчитываются! Переделываем iMA, а лучше выносим их в длл, там как раз циклов много, а интел циклы обожает параллелить
    3. SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i ); - ну тут сам бог веле выкинуть в длл

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

    Вы не можете благодарить!

  4. #24
    Местный Аватар для zlodei
    Регистрация
    17.07.2013
    Адрес
    Караганда
    Сообщений
    633
    Благодарности
    Получено: 49
    Отправлено: 25
    Цитата Сообщение от Алексей Волчанский Посмотреть сообщение
    Ну я же не в курсе, какой у тебя алгоритм, но если неделю оптимизируется - значит много вычислений. Ну для примера...берем индикатор MACD, просто я его вот тут разбирал, там три части. И, к примеру, ты его используешь в советнике.
    1. Главные тормоза. При вызове любого индикатора он пересчитыват себя полностью! То есть если у тебя на чарте реально накоплено 250000 баров, он на каждом вызове, а реально на каждом тике будет пересчитывать их всех! Решение - в лоб, уменьши количество баров на чарте. Умное решение - перепиши индюк, чтобы при старте считал только необходимое тебе количество баров, ну к примеру 50.
    2. Опять же на примере MACD. Смотрим код
    Код:
       for(int i=0; i<limit; i++)
          MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
    //---- signal line counted in the 2-nd buffer
       for(i=0; i<limit; i++)
          SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
    Чувствуешь, где тормоза? По 2 вызова iMA в цикле, и каждый раз они пересчитываются! Переделываем iMA, а лучше выносим их в длл, там как раз циклов много, а интел циклы обожает параллелить
    3. SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i ); - ну тут сам бог веле выкинуть в длл

    Все это здорово даст в производительности, но много работы. Попробуй для начала уменьшить до минимума количество баров на чарте. Наверное стоит поставить отдельный тестовый терминал и там задать минимально возможное значение
    Спасибо за советы!!! Попробую наверно немного подправить индюк(стандартная МА), чтоб пересчитывался только на 600 свечках.

    ---------- Сообщение добавлено в 20:15 ----------

    Нет, я наверно сделаю просто чтоб полностью все расчёты были только 1 раз при появлении нового бара, а трал оставлю по тикам. Тоже существенно увеличит скорость. Кстати ему оптимизироваться осталось ещё 2 недели ))))))))))).

    Вы не можете благодарить!

  5. #25
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    599
    Благодарности
    Получено: 253
    Отправлено: 47
    Цитата Сообщение от zlodei Посмотреть сообщение
    ено в 20:15 ----------

    Нет, я наверно сделаю просто чтоб полностью все расчёты были только 1 раз при появлении нового бара, а трал оставлю по тикам. Тоже существенно увеличит скорость. Кстати ему оптимизироваться осталось ещё 2 недели ))))))))))).
    Да, на новом баре - это здравая мысль. А 2 недели - это жесть )))) И потом выясниться, что выигрышных вариантов нет ))))

    Вы не можете благодарить!

  6. #26
    Местный Аватар для zlodei
    Регистрация
    17.07.2013
    Адрес
    Караганда
    Сообщений
    633
    Благодарности
    Получено: 49
    Отправлено: 25
    Цитата Сообщение от Алексей Волчанский Посмотреть сообщение
    Да, на новом баре - это здравая мысль. А 2 недели - это жесть )))) И потом выясниться, что выигрышных вариантов нет ))))
    Главное чтоб электричество не отключили.

    Вы не можете благодарить!

  7. #27
    Местный Аватар для zlodei
    Регистрация
    17.07.2013
    Адрес
    Караганда
    Сообщений
    633
    Благодарности
    Получено: 49
    Отправлено: 25
    Хочу просто поделиться впечатлениями. В общем написал я эксперта на mql5, который у меня на МТ4 несколько недель оптимизировался. Так вот написал значит, запустил перед сном оптимизацию, на следующий день просыпаюсь, подхожу к компу, а оптимизация уже завершилась!!! Я подумал нифигасибе! На МТ4 больше 2 недель ждал, а на МТ5 процессор за ночь всё перелопатил!!!! Единственная проблема - я ненавижу mql5 ))) Но придётся привыкать.
    Хотя на сайте mql4.com пишут что грядут серьёзные изменения в mql4, его собираются соединять с 5, и можно будет советники написанные на mql4 запускать на МТ5, и наоборот, а также добавят в четвёрку ООП. Ну и я так думаю сделают ещё и х64. И ещё там много всего.

    Вы не можете благодарить!

  8. #28
    Местный
    Регистрация
    02.06.2013
    Сообщений
    36
    Благодарности
    Получено: 3
    Отправлено: 17
    Здарствуйте Алексей.
    Просьба такая.
    Написать функцию SUM в ДЛЛ y=a+b, где а и b double данные с советника, а y возвращаемое число и ее вызов в советнике. Пример на mql4.

    extern double a=10;
    extern double b=20;
    int start()
    {
    Print("y = ", SUM(a, b);
    }
    double SUM(double a, double b)
    {
    double y=a+b;
    return (y);
    }
    Сюда выложите папку samples

    Вы не можете благодарить!

  9. #29
    Banned
    Регистрация
    22.10.2012
    Адрес
    Питер
    Сообщений
    599
    Благодарности
    Получено: 253
    Отправлено: 47
    Цитата Сообщение от gince Посмотреть сообщение
    Здарствуйте Алексей.
    Просьба такая.
    Написать функцию SUM в ДЛЛ y=a+b, где а и b double данные с советника, а y возвращаемое число и ее вызов в советнике. Пример на mql4.
    Сюда выложите папку samples
    А что, Visual Studio не стоит? Я бы лучше по шагам рассказал, как это сделать, пользы было бы больше. И на такой простенькой операции выигрыша может и не быть, так как параллелить просто нечего.

    Вы не можете благодарить!

  10. #30
    Местный
    Регистрация
    02.06.2013
    Сообщений
    36
    Благодарности
    Получено: 3
    Отправлено: 17
    Цитата Сообщение от Алексей Волчанский Посмотреть сообщение
    А что, Visual Studio не стоит? Я бы лучше по шагам рассказал, как это сделать, пользы было бы больше. И на такой простенькой операции выигрыша может и не быть, так как параллелить просто нечего.
    поставил 2010 ултимате.
    Впервую очередь хочу понять как передается данные из советника и обратно возвращаються в советник. потому такой простой пример. Видел на другом форуме, что данные передаеться как массив.

    extern double a=10;
    extern double b=20;
    int start()
    {
    Print("y = ", SUM(a, b);
    }
    double SUM(double a, double b)
    {
    double y=a+b;
    return (y);
    }
    void SUM(double a[], double b[], double & y[]) // функция лежит в библиотеке lib.ex4 или dll
    {
    y[0]=a[0]+b[0];
    }


    в советнике
    #import "lib.ex4"
    void SUM(double x1[], double x2[], double y[]);

    double x1[] = 321.54;
    double x2[] = 123.45;
    double x3=SUM(x1, x2);

    правильно ли я понял ?

    Вы не можете благодарить!

Страница 3 из 10 ПерваяПервая 1 2 3 4 5 6 7 ... ПоследняяПоследняя

Похожие темы

  1. Создание сигнального индикатора (для новичков)
    от SilverKZ в разделе Программирование на MQL
    Ответов: 43
    Последнее сообщение: 25.10.2018, 22:21
  2. Создание мультивалютного советника (MQL5)
    от SilverKZ в разделе Программирование на MQL
    Ответов: 9
    Последнее сообщение: 15.08.2016, 23:59
  3. Создание и тестирование торговых систем
    от Super в разделе Разговоры о трейдинге
    Ответов: 10
    Последнее сообщение: 13.07.2014, 01:45
  4. Создание торговой системы ПИНБАР 1
    от dimmi2012 в разделе Клуб любителей пинбара
    Ответов: 16
    Последнее сообщение: 18.10.2013, 21:08
  5. Ответов: 11
    Последнее сообщение: 15.06.2013, 14:15

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •