R-Portfolio - un metodo di diversificazione - pagina 7

 
Reshetov:

In MQL5, e ancora di più in MQL4 la velocità del codice per tali algoritmi è troppo bassa, cioè non si può ottenere nulla di buono in MQL puro, e si deve creare almeno una DLL. E non avrebbe comunque senso, dato che i portafogli non hanno bisogno di essere ottimizzati in tempo reale su ogni tick o sulle barre di piccoli timeframe.

Yuri, non è vero, mql5 non è inferiore a toad in termini di velocità.

Per quanto riguarda lo scopo dell'utilizzo, ad esempio, per quanto riguarda il forex, sono più interessato a ottimizzare i portafogli di strategie, non gli strumenti. Quindi... Le scuse non sono accettate. :)

Ma la buona notizia è che posso tenerti compagnia mentre scrivi il codice di mql5. Posso anche scriverlo io stesso. Preferibilmente solo una descrizione dell'algoritmo.

Penso che sarà divertente.

 
MetaDriver:

Yuri, questo non è vero, mql5 non è in alcun modo inferiore a toad in termini di velocità.

Raccontate queste favole ai vostri figli. Le macchine virtuali Java fanno la compilazione JIT, cioè compilano il codice Java in codice macchina prima di eseguire il programma. Quindi l'esecuzione delle applicazioni Java avviene in codice macchina.

Vedere i risultati che confrontano le prestazioni di Quake2 in Java e C++: http://www.bytonic.de/html/benchmarks.html

Qui c'è di più su questo argomento: C#, C++, Java, Delphi benchmark

Dopotutto è facile verificarlo eseguendo lo stesso benchmark scritto in Java e in MQL5.


MetaDriver:

Per quanto riguarda il senso dell'uso - per me, ad esempio, rispetto al forex sono più interessato a ottimizzare portafogli di strategie, non strumenti. Quindi... Le scuse non sono accettate. :)

Bene, poi carica le prime differenze di equità delle strategie in un file CSV e ottimizzale. Perché avete bisogno di scuse che MQL5 può presumibilmente "superare" un'applicazione eseguita in codice macchina?

MetaDriver:

Ma la buona notizia è che posso tenerti compagnia mentre scrivi codice in mql5. Posso anche scriverlo io stesso. Preferibilmente solo una descrizione dell'algoritmo.


Vai avanti. L'algoritmo Brown-Robinson non è un segreto. Ecco il codice in 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, 0 d);
    double[] y = new double[n];
    Arrays.fill(y, 0 d);
    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:

Raccontate queste favole ai vostri figli. Le macchine virtuali Java fanno la compilazione JIT, cioè compilano il codice Java in codice macchina prima di eseguire il programma. Quindi l'esecuzione delle applicazioni Java avviene in codice macchina.

Yura, questa sembra essere una novità per te, tuttavia la macchina virtuale mql5 funziona in modo simile. Il compilatore fa il bytecode, prima di eseguirlo viene precompilato in un nativ. È lo stesso che in java e sharp. Dovresti leggere più spesso il forum mql5.

Vedere i risultati che confrontano le prestazioni di Quake2 in Java e C++: http://www.bytonic.de/html/benchmarks.html

Altro su questo argomento: Benchmark per C#, C++, Java, Delphi

È facile verificarlo eseguendo lo stesso benchmark scritto in Java e in MQL5.

Ho controllato. Anche se l'ho confrontato non con java ma con sharp. Ho la stessa velocità. Non credo che Java sia almeno il 30-40% più veloce di Sharp. Se c'è una differenza, non si sa ancora a favore di chi. Sono d'accordo anche sul confronto con java. Quale codice consiglieresti per i test comparativi?

Bene, allora scarica le prime differenze delle strategie Equity in un file CSV e ottimizzalo.

Non sono interessato a una tale variante. Voglio un codice incorporato. E lo farò.

Perché avete bisogno di scuse che MQL5 può presumibilmente "superare" un'applicazione che gira in codice macchina?

Vedi sopra. Non conto sul sorpasso, conto di essere identico (più o meno il 10%).

Vai avanti. L'algoritmo Brown-Robinson non è un segreto. Ecco il codice in Java:

Sì, ho quel codice. L'hai già postato. Non l'ho capito subito. Contavo almeno sui commenti, per capirlo davvero, non per fare solo casino.

Ok, ci riprovo. Ci sono descrizioni dell'idea dell'algoritmo su Internet. Troverò il modo.

 
MetaDriver:

Yura, questa sembra essere una novità per te, tuttavia la macchina virtuale mql5 funziona in modo simile. Il compilatore fa il bytecode, prima di lanciarlo viene ricompilato in un nativ. È lo stesso che in java e sharp. Dovresti leggere più spesso il forum mql5.

Ho controllato. Anche se l'ho confrontato non con java ma con sharp. Ho la stessa velocità. Non credo che Java sia almeno il 30-40% più veloce di Sharp. Se c'è una differenza, non si sa ancora a favore di chi. Sono d'accordo anche sul confronto con java. Quale codice consigliereste per i test comparativi?

Non mi interessa una tale variante. Voglio un codice incorporato. E lo farò.

Vedi sopra. Non conto sul sorpasso, conto di essere identico (più o meno 10%).

Sì, ho quel codice. L'hai già postato. Non l'ho capito subito. Contavo almeno sui commenti, per capirlo davvero, non per fare solo casino.

Ok, ci riprovo. Ci sono descrizioni dell'idea dell'algoritmo su Internet. Troverò il modo.

esilarante...

tuttavia

;)

 
MetaDriver:

Sì, ho quel codice. L'hai già postato. Non sono riuscito ad entrarci subito. Speravo almeno in un commento in modo da poterlo capire davvero, non solo fare casino.

Ok, ci riprovo. Ci sono descrizioni dell'idea dell'algoritmo su Internet. Troverò il modo.

Non c'è niente di complicato nel codice. Passo in argomenti una matrice di pagamento - a[][], in uscita la strategia ottimale del giocatore per colonne della matrice di pagamento - 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
Tutto il resto, qualsiasi programmatore che conosce linguaggi simili al C capirà senza alcun aiuto. L'unica differenza tra Java e C è che non c'è bisogno di liberare la memoria. Cioè, se una variabile è dichiarata all'interno di un blocco di parentesi graffe {}, questo significa che dopo che il blocco è chiuso, la variabile al di fuori del blocco non è valida e la macchina virtuale Java libererà indipendentemente la memoria che è stata allocata per essa. Se si tenta di fare riferimento a una variabile dichiarata all'interno di un blocco al di fuori di questo blocco, il compilatore Java genererà un errore.
 
Alex5757000:
Perché non scrivi tutto in mql5 e posti le fonti?

Il codice sorgente è pubblicamente disponibile su http://r-portfolio.sourceforge.net/

Se ne avete bisogno, potete riscriverli in qualsiasi linguaggio di programmazione o contattare Job - fanno vari capricci e brame di chi ha bisogno di implementare qualcosa nel codice MQL.

 
Yuri, ho una domanda sulla formazione di un portafoglio con il tuo programma. L'ho fatta nel thread "Correlation Expert Advisor", ma ho trovato questo thread e la farò qui. Si include l'oro nel portafoglio insieme alle major, ma le coppie di valute e l'oro hanno prezzi di tick diversi. Come viene corretto questo nel calcolo e quali coppie usate per il vostro portafoglio? Sono interessato a questo argomento e vorrei sapere da uno specialista esperto i risultati approssimativi dell'uso del sistema.
 
FION:
Yuri, ho una domanda sulla formazione di un portafoglio con il tuo programma. L'ho fatta nel thread "Correlation Expert Advisor", ma ho trovato questo thread e la farò qui. Si include l'oro nel portafoglio insieme alle major, ma le coppie di valute e l'oro hanno prezzi di tick diversi. Come viene corretto questo nel calcolo e quali coppie usate per il vostro portafoglio? Sono interessato a questo argomento e vorrei sapere da uno specialista esperto i risultati approssimativi dell'uso del sistema.
Vedi risposta al consigliere di correlazione
 
Reshetov:

Le macchine virtuali Java eseguono la compilazione JIT, cioè compilano il codice Java in codice macchina prima di eseguire il programma. Quindi l'esecuzione delle applicazioni Java avviene in codice macchina.


jit in java compila in codice macchina in parti. Per quanto ho capito, mql5 compila l'intero programma in codice macchina in una volta sola - questo è più aot di jit.
 
Reshetov:
Vedi risposta al consigliere di correlazione

.

http://sourceforge.net/projects/r-portfolio/ - è disponibile in russo?


Motivazione: