Filtro What If per mese

4 risposte

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

9 anni fa #112399

Sto pubblicando un codice di esempio che aggiunge una nuova condizione What If che consente di filtrare per mese.

 

Basta aprire QuantEditor, creare un nuovo file What If e copiarvi il contenuto:

 

importare java.util.ArrayList;
importare java.util.Iterator;
 
importare com.sonarbytes.eaa.logic.whatif.WhatIf;
import com.sonarbytes.strategy.Order;
importare com.sonarbytes.strategy.StrategyStatsData;
importare com.sonarbytes.windows.panels.propertyPanel.CComboBoxItemList;
importare com.sonarbytes.utils.SQTime;
 
public class ByMonth extends WhatIf {
 
public ByMonth() {
setName("Per mese");
 
      addIntParameter("_JAN_", "January", 1, 1, Integer.MAX_VALUE, 1);
      addIntParameter("_FEB_", "Febbraio", 1, 1, Integer.MAX_VALUE, 1);
      addIntParameter("_MAR_", "Marzo", 1, 1, Integer.MAX_VALUE, 1);
      addIntParameter("_APR_", "Aprile", 1, 1, Integer.MAX_VALUE, 1);
      addIntParameter("_MAY_", "Maggio", 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_", "Agosto", 1, 1, Integer.MAX_VALUE, 1);
      addIntParameter("_SEP_", "Settembre", 1, 1, Integer.MAX_VALUE, 1);
      addIntParameter("_OCT_", "Ottobre", 1, 1, Integer.MAX_VALUE, 1);
      addIntParameter("_NOV_", "Novembre", 1, 1, Integer.MAX_VALUE, 1);
      addIntParameter("_DEC_", "Dicembre", 1, 1, Integer.MAX_VALUE, 1);
        
        // impostare il nome di questo metodo che verrà visualizzato con i parametri
setFormatedName("Per mese");
}
 
/**
* La funzione riceve l'elenco di tutti gli ordini ordinati in base all'ora di apertura e può manipolare l'elenco e rimuovere dall'elenco gli ordini che corrispondono a un determinato filtro.
* l'elenco e rimuovere dall'elenco qualsiasi ordine che corrisponda a un determinato filtro.     
*
*
* Struttura dell'ordine:
* .ticket - biglietto d'ordine (numero intero)
* .size - dimensione dell'ordine
* .type - tipo di ordine: 1 - compravendita lunga, 2 - compravendita corta
* .pl - compravendita con risultato Profit/Loss in $
* .pctPL - compravendita risultante in Profit/Loss in %
* .pipsPL - trade risultante Profit/Loss in pips
* .openPrice - prezzo di apertura di un ordine
* .openTime - tempo di apertura di un ordine (in secondi da 1.1.1970)
* .stoploss - livello di stop loss impostato sull'operazione
* .takeprofit - livello di obiettivo di profitto impostato sull'operazione
* .closePrice - prezzo di chiusura di un ordine
* .closeTime - orario di chiusura di un ordine (in secondi dall'1.1.1970)
* .closeType - tipo di chiusura
* .DD - drawdown durante questa operazione in $
* .pctDD - drawdown durante questa operazione in %
* .pipsDD - drawdown durante questa operazione in pips
* .accountBalance - saldo del conto durante questo trade
* .symbol - simbolo dello strumento (per esempio "EURUSD")
*
* @param originalOrders - elenco degli ordini originali che possono essere modificati. Ogni ordine ha le proprietà specificate in precedenza
*/
@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)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();
}
}
}

Marchio
Architetto StrategyQuant

0

ynachum

Cliente, bbp_partecipante, comunità, 21 risposte.

Visita il profilo

9 anni fa #126924

Avete forse altri codici what-if già scritti come questo?...

Yossi

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

9 anni fa #126949

Per vedere il codice di tutte le opzioni What-if già utilizzate nel programma, basta aprire il QuantEditor in EA Analyzer.

Marchio
Architetto StrategyQuant

0

ForexTrader

Abbonato, bbp_partecipante, comunità, 34 risposte.

Visita il profilo

9 anni fa #127435

Ho ricevuto questo errore Mark:

 

La classe ByMonth è pubblica e deve essere dichiarata in un file chiamato ByMonth.java.

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

9 anni fa #127441

Sì, non so dove l'avete creato, ma dovreste creare un file chiamato ByMonth.java in QuantEditor e inserirvi questo codice.

 

Il nome del file deve essere uguale al nome della classe.

Marchio
Architetto StrategyQuant

0

Stai visualizzando 4 risposte - da 1 a 4 (di 4 totali)