Filtro What If per mese
4 risposte
Mark Fric
12 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
11 anni fa #126924
Avete forse altri codici what-if già scritti come questo?...
Yossi
0
Mark Fric
11 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
11 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
11 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)