La colonne de la banque de données affiche toujours une valeur nulle
1 réponses
Julian Gonzalez
Il y a 10 mois #291831
J'ai créé une colonne Databank et un code modèle est généré automatiquement pour calculer netProfit. Je le compile et redémarre l'interface utilisateur SQX. Lorsque j'ouvre la DataBank à partir de Builder et que j'ajoute la colonne, elle affiche toujours la valeur zéro. Il en va de même lorsque je télécharge des extraits de code depuis la communauté.
Si j'en crée un nouveau avec seulement getNumericValue() et getValue(), cela fonctionne parfaitement. Il semble donc que la fonction compute() ne fasse rien, pourquoi ?
J'ai déjà essayé avec les versions 136, 142 et 143. À l'aide !
Voici le modèle :
package 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 d'affichage de la valeurValueTypes.Maximize, // si la valeur doit être maximisée / minimisée / approximée à une valeur0, // valeur cible si l'approximation a été choisie0, // moyenne minimale de cette valeur100) ; // moyenne maximale de cette valeursetWidth(80) ; // largeur par défaut de la colonne en pixelssetTooltip(“ Votre info-bulle ici ”) ;/* Si cette nouvelle colonne dépend d'autres colonnes qui doivent être calculées au préalable, placez-les ici.Veillez à ne pas créer de dépendance circulaire, telle que A dépend de B et B dépend de A.Les colonnes (=valeurs statistiques) sont identifiées par le nom de la classe.*///setDependencies(“ DrawdownPct ”, “ NumberOfTrades ”) ;}//————————————————————————/*** Cette méthode doit renvoyer la valeur calculée de cette nouvelle colonne. Vous devez généralement la calculer à partir de la liste des commandes.* ou à partir de certaines valeurs statistiques déjà calculées (autres colonnes de la base de données).*/@Overridepublic double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception {/* un exemple – voici comment obtenir d'autres valeurs dont dépend cette nouvelle valeur *///int nombreDeTransactions = stats.getInt(“ NombreDeTransactions ”) ;//double drawdownPct = stats.getDouble(“ DrawdownPct ”) ;/* un exemple – calcul du bénéfice net à partir de la liste des transactions */double netProfit = 0 ;for(int i = 0; i<ordersList.size(); i++) {Commande commande = listeCommandes.get(i) ;if(commande.estCommandeSolde()) {// ne pas compter les ordres de solde (dépôts, retraits) danscontinuer ;}/* La méthode getPLByStatsType renvoie automatiquement le PL en fonction du type de statistiques donné : en argent, % ou pips. */double PL = getPLByStatsType(ordre, combinaison) ;netProfit += PL ;}/* arrondir et renvoyer la valeur. Elle sera enregistrée dans les statistiques sous la clé “ Prueba2 ” */retourner round2(netProfit) ;}}
0
Julian Gonzalez
Il y a 10 mois #291832
Résolu !
Il semble que la fonction compute() ne se mette à jour que lorsque vous forcez la stratégie à être testée à nouveau (en la testant à nouveau ou en générant une nouvelle stratégie). En revanche, les fonctions getNumericValue() et getValue() n'en ont pas besoin.
🙂
1
Affichage d'1 réponse (sur un total de 1)