Les commandes sont-elles triées ?

4 réponses

krzysiaczek99

Subscriber, bbp_participant, community, 57 replies.

Visiter le profil

Il y a 7 ans #116287

Bonjour,

 

Je suis en train de concevoir un plugin qui calcule le nombre de lots ouverts et j'ai découvert que les commandes de SQOrderList ne sont pas triées.

 

D'après les informations fournies par d'autres plugins, ils sont censés être triés.

/**
	 * 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 correspondant à un certain filtre.
	 * la liste et supprimer de la liste tout ordre qui correspond à un certain filtre.
	 *
	 * La structure de l'ordre est disponible dans la documentation ici :
	 * http://www.strategyquant.com/doc/api/com/strategyquant/lib/results/SQOrder.html
	 *
	 * @param originalOrders - liste des commandes originales qui peuvent être modifiées. Chaque commande possède les propriétés de commande spécifiées ci-dessus
	 */

mais mon code produit ceci

package com.strategyquant.extend.TradeAnalysisPanes ;

import org.jfree.chart.JFreeChart ;
import com.strategyquant.lib.snippets.TradeAnalysisChartPane ;
import com.strategyquant.lib.results.SQData ;
import com.strategyquant.lib.language.L ;
import com.strategyquant.lib.settings.SQConst ;
import com.strategyquant.lib.results.SQOrderList ;
import com.strategyquant.lib.results.SQOrder ;
import com.strategyquant.lib.results.SQResultsGroup ;
import com.strategyquant.lib.charts.common.SQLineChart ;
import java.util.Date ;

public class MaxNumberOfTrades extends TradeAnalysisChartPane {

	public MaxNumberOfTrades() {
		this.name = "MaxNumberOfTrades" ;
	}
	
   @Override
	public JFreeChart drawChart(SQResultsGroup strategyResult, SQData data) {
		SQLineChart chart = new SQLineChart() ;
      chart.xLegend = L.t("Trades") ;
      chart.yLegend = L.t("Lots") ;
           
      if(strategyResult==null) {
         return chart.render() ;
      }

     SQOrderList orderList = filterOrders(strategyResult, data) ;


     int lots = 0 ;
     long exittime = orderList.get(0).CloseTime ;

     Date d = new Date(exittime) ;
     Date top = new Date(orderList.get(0).OpenTime) ;
     Date bottom = new Date(orderList.get(orderList.size()-1).OpenTime) ;
     
     System.out.println("Closetime "+d) ;
     System.out.println("Haut "+top) ;
     System.out.println("Bottom "+bottom) ;


     for (int i = 0 ; i < orderList.size() ; i++) {
      
       //System.out.println(orderList.get(i).OpenTime) ;
       //System.out.println(order.OpenTime) ;
       //System.out.println(order.CloseTime) ;
      
      if ( orderList.get(i).OpenTime <= exittime ) // heure de sortie
      { lots++ ; }
      else
      {
         lots = 0 ;
         exittime = orderList.get(i).CloseTime ;
      }
           
      chart.add("", i+1, lots) ;
       
      }

		return chart.render() ;
	}
}

Closetime Mon Apr 04 10:12:00 GMT 2016
Top Thu Mar 31 23:08:00 GMT 2016
Bottom Fri Apr 01 00:01:00 GMT 2016

 

Les ordres sont donc à l'envers par rapport au fichier d'échange. Dans le fichier commercial, il y a des ordres avec des OpenPrice de 28.03 et 30.03, donc 28.03 devrait être en bas et non 31.03.

Je joins le fichier commercial que j'utilise pour ce test.

 

Pouvez-vous donner un exemple de tri ?

 

Krzysztof

 

0

krzysiaczek99

Subscriber, bbp_participant, community, 57 replies.

Visiter le profil

Il y a 7 ans #141436

Quelle est la réponse à cette question ? Combien de mesures de l'AQ affichent des valeurs erronées à cause de ce bogue ? Quand allez-vous le corriger ? Il est difficile de croire que ce produit existe depuis tant d'années et qu'il y a encore des bogues majeurs sur .....

 

Krzysztof

0

Mark Fric

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 7 ans #141501

Bonjour,

 

Il n'est pas dit que le snipet TradeAnalysis utilise des transactions ordonnées dans un ordre particulier, car l'ordre des transactions n'a pas d'influence sur la plupart de ces statistiques.

 

Mais vous pouvez facilement trier les commandes en utilisant la commande :

Collections.sort(orderList, new OrderComparatorByCloseTime()) ;

 

vous devez également ajouter deux importations pour ce faire :

import java.util.Collections ;
import com.strategyquant.lib.comparators.OrderComparatorByCloseTime ;
 
Vous pouvez alternativement trier les commandes par heure d'ouverture en utilisant OrderComparatorByOpenTime() ou par ticket en utilisant OrderComparatorByOrder().

Marque
StratégieArchitecte de Quantités

0

krzysiaczek99

Subscriber, bbp_participant, community, 57 replies.

Visiter le profil

Il y a 7 ans #141504

Bonjour,

 

Merci pour l'information. Donc après le tri, les transactions seront dans l'ordre croissant ou décroissant ? Si c'est par ordre décroissant, comment retourner cette liste à l'envers ?

volonté  Collections.inverser(liste des commandes) travail ? ?

 

Krzysztof

0

Mark Fric

Administrateur, sq-ultimate, 2 réponses.

Visiter le profil

Il y a 7 ans #141516

il est dans l'ordre naturel. Collections.reverse() devrait fonctionner.

Marque
StratégieArchitecte de Quantités

0

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