Filtre "What If" par mois
4 réponses
Mark Fric
Il y a 9 ans #112399
Je publie un exemple de code qui ajoute une nouvelle condition "What If" qui vous permet de filtrer par mois.
Il suffit d'ouvrir QuantEditor, de créer un nouveau fichier What If et d'en copier le contenu :
import java.util.ArrayList ; import java.util.Iterator ; import com.sonarbytes.eaa.logic.whatif.WhatIf ; import com.sonarbytes.strategy.Order ; import com.sonarbytes.strategy.StrategyStatsData ; import com.sonarbytes.windows.panels.propertyPanel.CComboBoxItemList ; import com.sonarbytes.utils.SQTime ; public class ByMonth extends WhatIf { public ByMonth() { setName("Par mois") ; addIntParameter("_JAN_", "January", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_FEB_", "Février", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_MAR_", "Mars", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_APR_", "April", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_MAY_", "May", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_JUN_", "Jun", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_JUL_", "July", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_AUG_", "August", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_SEP_", "Septembre", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_OCT_", "October", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_NOV_", "November", 1, 1, Integer.MAX_VALUE, 1) ; addIntParameter("_DEC_", "December", 1, 1, Integer.MAX_VALUE, 1) ; // définir le nom de cette méthode qui sera affiché avec le(s) paramètre(s) setFormatedName("Par mois") ; } /** * La fonction reçoit la liste de tous les ordres triés par heure d'ouverture et peut manipuler la liste et supprimer de la liste tout ordre qui correspond à un certain filtre. * manipuler la liste et supprimer de la liste tout ordre qui correspond à un certain filtre. * * * Structure de la commande : * .ticket - ticket de commande (nombre entier) * .size - taille de la commande * .type - type d'ordre : 1 - transaction longue, 2 - transaction courte * .pl - transaction résultant en Profit/Loss en $ * .pctPL - transaction résultant de Profit/Loss en % * .pipsPL - transaction résultant de Profit/Loss en pips * .openPrice - prix d'ouverture d'un ordre * .openTime - heure d'ouverture d'un ordre (en secondes à partir de 1.1.1970) * .stoploss - niveau de stop loss fixé sur le trade * .takeprofit - niveau de l'objectif de profit fixé pour la transaction * .closePrice - Prix de clôture d'un ordre * .closeTime - heure de clôture d'un ordre (en secondes à partir de 1.1.1970) * .closeType - Type de clôture * .pctDD - drawdown au cours de cette transaction en $ * .pctDD - baisse pendant cette transaction en % * .pipsDD - baisse pendant cette transaction en pips * .accountBalance - solde du compte pendant cette transaction * .symbol - symbole de l'instrument (par exemple "EURUSD") * * @param originalOrders - liste des ordres originaux qui peuvent être modifiés. Chaque ordre possède les propriétés d'ordre spécifiées ci-dessus */ @Override public void filter(ArrayList originalOrders) { int jan = getIntParameterValue("_JAN_") ; int feb = getIntParameterValue("_FEB_") ; int mar = getIntParameterValue("_MAR_") ; int apr = getIntParameterValue("_APR_") ; int may = getIntParameterValue("_MAY_") ; int jun = getIntParameterValue("_JUN_") ; int jul = getIntParameterValue("_JUL_") ; int aug = getIntParameterValue("_AUG_") ; int sep = getIntParameterValue("_SEP_") ; int oct = getIntParameterValue("_OCT_") ; int nov = getIntParameterValue("_NOV_") ; int dec = getIntParameterValue("_DEC_") ; for(Iterator i = originalOrders.listIterator() ; i.hasNext() ;) { Order order = (Order)i.next() ; SQTime time = new SQTime(order.openTime) ; int orderMonth = time.getMonth() ; if(orderMonth == 0 && jan != 1) i.remove() ; if(orderMonth == 1 && feb != 1) i.remove() ; if(orderMonth == 2 && mar != 1) i.remove() ; if(orderMonth == 3 && apr != 1) i.remove() ; if(orderMonth == 4 && may != 1) i.remove() ; if(orderMonth == 5 && jun != 1) i.remove() ; if(orderMonth == 6 && jul != 1) i.remove() ; if(orderMonth == 7 && aug != 1) i.remove() ; if(orderMonth == 8 && sep != 1) i.remove() ; if(orderMonth == 9 && oct != 1) i.remove() ; if(orderMonth == 10 && nov != 1) i.remove() ; if(orderMonth == 11 && dec != 1) i.remove() ; } } }
Marque
StratégieArchitecte de Quantités
ynachum
Il y a 9 ans #126924
Mark Fric
Il y a 9 ans #126949
Vous pouvez voir le code de toutes les options d'hypothèses déjà utilisées dans le programme, il suffit d'ouvrir le QuantEditor dans EA Analyzer.
Marque
StratégieArchitecte de Quantités
ForexTrader
Il y a 9 ans #127435
J'ai obtenu cette erreur Mark :
La classe ByMonth est publique, elle doit être déclarée dans un fichier nommé ByMonth.java
Mark Fric
Il y a 9 ans #127441
Oui, je ne sais pas où vous l'avez créé, mais vous devriez créer un fichier nommé ByMonth.java dans QuantEditor et y placer ce code.
Le nom du fichier doit être identique au nom de la classe.
Marque
StratégieArchitecte de Quantités
Affichage de 4 réponses de 1 à 4 (sur un total de 4)