Filtre "What If" par mois

4 réponses

Mark Fric

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

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

0

ynachum

Client, bbp_participant, communauté, 21 réponses.

Visiter le profil

Il y a 9 ans #126924

Avez-vous peut-être d'autres codes de simulation déjà écrits comme celui-ci ?...

Yossi

0

Mark Fric

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

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

0

ForexTrader

Abonné, bbp_participant, communauté, 34 réponses.

Visiter le profil

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

0

Mark Fric

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

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

0

Affichage de 4 réponses de 1 à 4 (sur un total de 4)