R-Portfolio - метод диверсификации - страница 7

 
Reshetov:

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

Юрий, это не так, mql5 по скорости жабе никак не уступает.

Что до смысла использования - мне, например, в отношении форекса более интересна оптимизация портфелей стратегий, а не инструментов. Так что... отмазки не принимаются. :)

Зато хорошая новость - могу составить компанию при написании кода на mql5. Даже сам могу всё написать. Желательно только описание алгоритма.

Мне кажется будет весело.

 
MetaDriver:

Юрий, это не так, mql5 по скорости жабе никак не уступает.

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

См. результаты сравнения производительности Quake2 на Java и на С++: http://www.bytonic.de/html/benchmarks.html

Вот еще по теме: Бенчмарки C#, C++, Java, Delphi

Ведь это легко проверить, запустив один и тот же benchmark, написанный на Java и на MQL5.


MetaDriver:

Что до смысла использования - мне, например, в отношении форекса более интересна оптимизация портфелей стратегий, а не инструментов. Так что... отмазки не принимаются. :)

Ну дык скидывайте первые разности Equity стратегий в CSV файл и оптимизируйте. Зачем нужны отмазки о том, что якобы MQL5 может "обогнать" приложение, исполняющееся в машинном коде?

MetaDriver:

Зато хорошая новость - могу составить компанию при написании кода на mql5. Даже сам могу всё написать. Желательно только описание алгоритма.


Дерзайте. Алгоритм Брауна - Робинсон не является секретным. Вот код на Java:

  private int[] optimization(double[][] a) {
    Random rand = new Random();
    int m = a.length;
    int n = a[0].length;
    int[] p = new int[m];
    Arrays.fill(p, 0);
    int[] q = new int[n];
    Arrays.fill(q, 0);
    double[] x = new double[m];
    Arrays.fill(x, 0d);
    double[] y = new double[n];
    Arrays.fill(y, 0d);
    int r = rand.nextInt(m);
    int c = 0;
    for (int t = 0; t < 10000000; t++) {
        for (int j = 0; j < n; j++) {
          y[j] = y[j] + a[r][j];
        }
        c = 0;
        for (int j = 1; j < n; j++) {
          if ((y[j] == y[c]) && rand.nextBoolean()) {
            c = j;
          }
          if (y[j] > y[c]) {
            c = j;
          }
        }
        q[c] = q[c] + 1;
        for (int i = 0; i < m; i++) {
            x[i] = x[i] + a[i][c];
        }
        r = 0;
        for (int i = 1; i < m; i++) {
          if ((x[i] == x[r]) && rand.nextBoolean()) {
            r = i;
          }
          if (x[i] < x[r]) {
            r = i;
          }
        }
        p[r] = p[r] + 1;
    }

    return q;
  }
 
Reshetov:

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

Юра, похоже это для тебя новость, однако виртуальная машина mql5 работает аналогично. Компилятор делает байт-код, перед запуском происходит докомпиляция в натив. Так же как в яве и шарпе. Почаще читай форум mql5.

См. результаты сравнения производительности Quake2 на Java и на С++: http://www.bytonic.de/html/benchmarks.html

Вот еще по теме: Бенчмарки C#, C++, Java, Delphi

Ведь это легко проверить, запустив один и тот же benchmark, написанный на Java и на MQL5.

Я проверял. Правда сравнивал не с явой, а с шарпом. Получил аналогичную скорость. Не думаю что ява быстрее шарпа хотя бы на 30-40%. Если разница и есть, она ещё не известно в чью пользу. Согласен сравнить и с явой. Какой код посоветуешь для сравнительного тестирования?

Ну дык скидывайте первые разности Equity стратегий в CSV файл и оптимизируйте.

Такой вариант мне неинтересен. Хочу встраиваемый код. И сделаю.

Зачем нужны отмазки о том, что якобы MQL5 может "обогнать" приложение, исполняющееся в машинном коде?

См. выше. На обгон не расчитываю, на идентичность вполне (плюс-минус 10%).

Дерзайте. Алгоритм Брауна - Робинсон не является секретным. Вот код на Java:

Да есть у меня этот код. Ты ж его уже выкладывал. Я его сходу ниасилил. Расчитывал на комментарии хотя бы, чтоб реально разобраться, а не просто собезьянничать.

Ок, попробую ещё разок. Описания идеи алгоритма вроде в инете есть. Разберусь.

 
MetaDriver:

Юра, похоже это для тебя новость, однако виртуальная машина mql5 работает аналогично. Компилятор делает байт-код, перед запуском происходит докомпиляция в натив. Так же как в яве и шарпе. Почаще читай форум mql5.

Я проверял. Правда сравнивал не с явой, а с шарпом. Получил аналогичную скорость. Не думаю что ява быстрее шарпа хотя бы на 30-40%. Если разница и есть, она ещё не известно в чью пользу. Согласен сравнить и с явой. Какой код посоветуешь для сравнительного тестирования?

Такой вариант мне неинтересен. Хочу встраиваемый код. И сделаю.

См. выше. На обгон не расчитываю, на идентичность вполне (плюс-минус 10%).

Да есть у меня этот код. Ты ж его уже выкладывал. Я его сходу ниасилил. Расчитывал на комментарии хотя бы, чтоб реально разобраться, а не просто собезьянничать.

Ок, попробую ещё разок. Описания идеи алгоритма вроде в инете есть. Разберусь.

ржака...

однако

;)

 
MetaDriver:

Да есть у меня этот код. Ты ж его уже выкладывал. Я его сходу ниасилил. Расчитывал на комментарии хотя бы, чтоб реально разобраться, а не просто собезьянничать.

Ок, попробую ещё разок. Описания идеи алгоритма вроде в инете есть. Разберусь.

Ничего сложного в коде нет. В аргументах передается платежная матрица - a[][], на выходе оптимальная стратегия игрока по столбцам платежной матрицы - q


Random rand = new Random(); // Объект rand - генератор случайных чисел
int[] q = new int[n]; //  Объявление целочисленного массива q  размером n и выделение под него памяти
int m = a.length; // переменной m присваивается значение в виде количества строк в платежной матрице
int n = a[0].length; // переменной n присваивается значение в виде количества столбцов в платежной матрице
Arrays.fill(p, 0); // Массив p инициализируется нулевыми значениями

int r = rand.nextInt(m); // значению переменной r присваивается случайное число в диапазоне от 0 до m - 1
rand.nextBoolean() // с вероятностью 50% / 50% даст случайным образом значение true или false
Все остальное любой программер, знающий C подобные языки, поймет без посторонней помощи. Единственное, что отличает Java от C - это отсутствие необходимости освобождать память. Т.е. если переменная объявлена внутри блока фигурных скобок {}, то сие означает, что после того, как блок закрыт, переменная вне блока уже недействительна и виртуальная машина Java самостоятельно освободит память, которая была под нее выделена. При попытках обратиться к переменной, объявленной внутри какого либо блока, за пределами этого самого блока, компилятор Java выдаст ошибку.
 
Alex5757000:
Почему бы Вам не написать все это на mql5 и не выложить исходники?

Исходники в открытом доступе на http://r-portfolio.sourceforge.net/

Если Вам так необходимо, то можете самостоятельно переписать их на любой язык программирования или обратиться в Job - там исполняют различные прихоти и похоти тех, кому что-то нужно реализовать что-то в коде MQL.

 
Юрий у меня вопрос по формированию портфеля Вашей программой, я его задал в ветке "советник по корреляции", но нашел эту ветку и задам здесь. Вы наряду с мажорами включаете в портфель золото, но у валютных пар и золота разная цена тика. Как это корректируется при расчете и какие пары Вы сами используете для портфеля? Меня заинтересовала эта тема и хотелось бы узнать у опытного спеца примерные результаты использования системы.
 
FION:
Юрий у меня вопрос по формированию портфеля Вашей программой, я его задал в ветке "советник по корреляции", но нашел эту ветку и задам здесь. Вы наряду с мажорами включаете в портфель золото, но у валютных пар и золота разная цена тика. Как это корректируется при расчете и какие пары Вы сами используете для портфеля? Меня заинтересовала эта тема и хотелось бы узнать у опытного спеца примерные результаты использования системы.
См. ответ в советник по корреляции
 
Reshetov:

Виртуальные машины Java выполняют JIT компиляцию, т.е. перед запуском программы, компилируют Java код в машинный код. Так что выполнение Java приложений происходит в машинном коде.


jit в java компилирует в машинный код частями. На сколько я понимаю, mql5 компилирует сразу всю программу в машинный код - это скорее aot, а не jit.
 
Reshetov:
См. ответ в советник по корреляции

.

http://sourceforge.net/projects/r-portfolio/ - а есть на русском ?


Причина обращения: