Diskussion zum Artikel "Expert Advisor auf der Grundlage des universellen MLP-Approximators" - Seite 2

 
Eric Ruvalcaba #:

Vielen Dank für diesen Artikel und den Einblick. Tolle Idee. Ich habe ein unabhängiges Positionshandling implementiert und es auf dem Hedging-Konto (meines Brokers) zum Laufen gebracht.

Sie sind der Beste.

Super!

 

Sehr geehrter Autor, ich habe mir den TargetFunction()-Code mehrmals durchgelesen und es scheint, dass Sie einige Fehler gemacht haben.

1. Bei der Berechnung des Gewinns einer Position, machen Sie eine doppelte Summierung des Gewinns.

        if (!truTradeTime [h]) {
            if (posType != 0) { // Wenn es eine offene Stelle gibt
                posClPrice = rates [h].open; // Schließen zum Eröffnungskurs der Bar
                profit = (posClPrice - posOpPrice) * signal - 0.00003; // Kommission

                if (profit > 0.0) allProfit += profit;
                else              allLoss   += -profit;

                if (posType == 1) buys++;
                else              sells++;

                allProfit += profit;
                posType = 0; // Position zurücksetzen
            }
            continue; // Überspringen der Nicht-Handelszeit
        }

        if ((posType == 1 && signal == -1) || (posType == -1 && signal == 1)) {
            posClPrice = rates [h].open; // Schließen zum Eröffnungskurs des aktuellen Balkens
            profit = (posClPrice - posOpPrice) * signal - 0.00003; // Berechnung des Gewinns

            // Gewinn-/Verlustrechnung
            if (profit > 0.0) allProfit += profit;
            else              allLoss   += -profit;

            // Statistiken über Transaktionen
            if (posType == 1) buys++;
            else              sells++;

            allProfit += profit;
            posType = 0; // Position geschlossen
        }


2. Der Ko-Koeffizient wird bei der Berechnung des Anpassungsindexes nicht verwendet.
double ko = 1.0;
  if (sells == 0 || buys == 0) return -DBL_MAX;
  if (sells / buys > 1.5 || buys / sells > 1.5) ko = 0.001;

  return (allProfit / (allLoss + DBL_EPSILON)) * dealsNumb;
 
John_Freeman #:

Sehr geehrter Autor, ich habe mir den TargetFunction()-Code mehrmals durchgelesen und es scheint, dass Sie einige Fehler gemacht haben.

1. Bei der Berechnung des Gewinns einer Position, machen Sie eine doppelte Summierung des Gewinns.


2. Bei der Berechnung des Anpassungsindexes wird der Ko-Koeffizient nicht verwendet.

1. Ja, Sie haben recht, entfernen Sie die Zeilen am Ende der beiden Codeblöcke
allProfit += profit;

damit es wie folgt aussieht:

f (!truTradeTime [h]) {
            if (posType != 0) { // Wenn es eine offene Stelle gibt
                posClPrice = rates [h].open; // Schließen zum Eröffnungskurs der Bar
                profit = (posClPrice - posOpPrice) * signal - 0.00003; // Kommission

                if (profit > 0.0) allProfit += profit;
                else              allLoss   += -profit;

                if (posType == 1) buys++;
                else              sells++;

                //allProfit += profit;
                posType = 0; // Position zurücksetzen
            }
            continue; // Überspringen der Nicht-Handelszeit
        }

        if ((posType == 1 && signal == -1) || (posType == -1 && signal == 1)) {
            posClPrice = rates [h].open; // Schließen zum Eröffnungskurs des aktuellen Balkens
            profit = (posClPrice - posOpPrice) * signal - 0.00003; // Berechnung des Gewinns

            // Gewinn-/Verlustrechnung
            if (profit > 0.0) allProfit += profit;
            else              allLoss   += -profit;

            // Statistiken über Transaktionen
            if (posType == 1) buys++;
            else              sells++;

            //allProfit += profit;
            posType = 0; // Position geschlossen
        }


2. Ja, ko wird nicht verwendet.