Filtro What If per mese
4 risposte
Mark Fric
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
ynachum
9 anni fa #126924
Mark Fric
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
ForexTrader
9 anni fa #127435
Ho ricevuto questo errore Mark:
La classe ByMonth è pubblica e deve essere dichiarata in un file chiamato ByMonth.java.
Mark Fric
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
Stai visualizzando 4 risposte - da 1 a 4 (di 4 totali)