Datenbankspalte zeigt immer den Wert Null an
1 Antworten
Julian Gonzalez
vor 10 Monaten #291831
Ich habe eine Datenbankspalte erstellt und ein Vorlagencode wird automatisch generiert, der netProfit berechnet. Ich kompiliere ihn und starte SQX UI neu. Wenn ich die DataBank aus dem Builder heraus öffne und die Spalte hinzufüge, zeigt sie immer einen Nullwert an. Dasselbe passiert, wenn ich Snippets aus der Community herunterlade.
Wenn ich eine neue Datei nur mit getNumericValue() und getValue() erstelle, funktioniert sie perfekt. Es scheint also, dass die Funktion compute() nichts tut, warum?
Ich habe es bereits mit den Versionen 136, 142 und 143 versucht. Hilfe!
Dies ist die Vorlage:
Paket SQ.Columns.Databanks;import com.strategyquant.lib.*;import com.strategyquant.datalib.*;import com.strategyquant.tradinglib.*;public class Prueba2 extends DatabankColumn {public Prueba2() {super(“Prueba2”,DatabankColumn.Decimal2, // Format der WertanzeigeValueTypes.Maximize, // ob Wert maximiert / minimiert / auf einen Wert angenähert werden soll0, // Zielwert, wenn Annäherung gewählt wurde0, // durchschnittliches Minimum dieses Wertes100); // durchschnittliches Maximum dieses WertessetWidth(80); // Standardspaltenbreite in PixelsetTooltip(“Ihr Tooltip hier”);/* Wenn diese neue Spalte von anderen Spalten abhängt, die zuerst berechnet werden müssen, fügen Sie sie hier ein.Achten Sie darauf, dass Sie keine zirkulären Abhängigkeiten schaffen, wie z.B. A hängt von B ab und B hängt von A ab.Spalten (=Statistikwerte) sind durch den Namen der Klasse gekennzeichnet)*///setDependencies(“DrawdownPct”, “NumberOfTrades”);}//————————————————————————/*** Diese Methode sollte den berechneten Wert dieser neuen Spalte zurückgeben. Normalerweise sollten Sie ihn aus der Liste der Aufträge berechnen* oder von einigen bereits berechneten statistischen Werten (andere Datenbankspalten).*/@Overridepublic double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception {/* ein Beispiel - so können Sie andere Werte erhalten, von denen dieser neue Wert abhängig ist *///int numberOfTrades = stats.getInt(“NumberOfTrades”);//double drawdownPct = stats.getDouble(“DrawdownPct”);/* ein Beispiel - Berechnung des Nettogewinns aus der Liste der Gewerke */double netProfit = 0;for(int i = 0; i<ordersList.size(); i++) {Auftrag = ordersList.get(i);if(Auftrag.isBalanceAuftrag()) {// Guthabenaufträge (Einzahlungen, Abhebungen) werden nicht berücksichtigt inweiter;}/* Die Methode getPLByStatsType gibt automatisch PL zurück, abhängig vom angegebenen Statistik-Typ - in Geld, % oder Pips */double PL = getPLByStatsType(Auftrag, Kombination);netProfit += PL;}/* Runden Sie den Wert und geben Sie ihn zurück. Er wird in der Statistik unter dem Schlüssel “Prueba2” gespeichert */return round2(netProfit);}}
0
Julian Gonzalez
vor 10 Monaten #291832
Gelöst!
Es scheint, dass die compute()-Funktion nur dann aktualisiert wird, wenn Sie erzwingen, dass die Strategie erneut einem Backtest unterzogen wird (erneutes Testen oder Erstellen einer neuen Strategie). Stattdessen benötigen die Funktionen getNumericValue() und getValue() diese Funktion nicht.
🙂
1
Ansicht von 1 Antwort (von insgesamt 1)