Leggere il valore di una variabile in una regola attivata all'avvio della strategia dalle impostazioni della strategia.
Contenuto della pagina
In una regola attivata sulla Strategia Init, per ogni Assegnazione della funzione, StrategyQuant assegnare un valore "AssegnazioneVrbVleEntMlt" alla vostra variabile invece di un valore.
Poi, durante l'inizializzazione, restituirà il valore AssignVrbVleEntMlt alla propria variabile
Da una strategia prodotta dalla "H1388 Modello di variabile di test", possiamo leggere nel codice :
AssegnazioneVrbVleEntMlt = 210
AssegnazioneVrbVleEntMlt sta ricevendo il valore nel luogo Lunghezza MAL
Allora AssegnazioneVrbVleEntMlt restituire il valore a Lunghezza MAL all'inizializzazione.
1/ Questo esempio di codice di analisi personalizzato mostra come ottenere il valore di una variabile in una regola attivata dalla strategia Init.
Otteniamo il valore da una funzione "toInitValue", da un Gruppo di risultati, e Nome della regola "Init", e un nome della variabile : Lunghezza MAL (In questo esempio)
Quindi si utilizza rg.specialValues() per impostare il valore in "CA_Lunghezza"
pacchetto SQ.CustomAnalysis; import com.strategyquant.lib.*; importare java.util.ArrayList; importare com.strategyquant.datalib.*; importare com.strategyquant.tradinglib.*; importare SQ.Utils.Bouillant; importare org.slf4j.Logger; importare org.slf4j.LoggerFactory; importare java.util.*; // Creato in Francia da Emmanuel Bouillant-Evrard public class CA_InitStratsSettings extends CustomAnalysisMethod { public static final Logger Log = LoggerFactory.getLogger(CA_InitStratsSettings.class); public CA_InitStratsSettings() { super("CA MALength Settings", TYPE_FILTER_STRATEGY); } //------------------------------------------------------------------------ @Override public boolean filterStrategy(String project, String task, String databankName, ResultsGroup rg) throws Exception { try { Bouillant BouilltParaObj1 = new Bouillant(); String IntTemp = BouilltParaObj1.toInitValue(rg, false, "Init", "MALength", 100); rg.specialValues().set("CA_MALength", Double.parseDouble(IntTemp)); restituisce true; } catch(Exception e) { Log.error("Errore CA_InitStratsSettings", e); return false; // "Errore: " + e.getMessage(); } } //------------------------------------------------------------------------ @Override public ArrayList processDatabank(String project, String task, String databankName, ArrayList databankRG) throws Exception { restituisce databankRG; } }
2 / Poi il codice DatabankColumn recupera il valore dell'Analisi personalizzata
pacchetto SQ.Columns.Databanks; importare com.strategyquant.lib.*; importare com.strategyquant.datalib.*; importare com.strategyquant.tradinglib.*; importare org.slf4j.Logger; import org.slf4j.LoggerFactory; // Creato in Francia da Emmanuel Bouillant-Evrard public class StratSettingsMALength extends DatabankColumn { public static final Logger Log = LoggerFactory.getLogger(StratSettingsMALength.class); public StratSettingsMALength() { super("Impostazioni Lunghezza MAL", DatabankColumn.Decimal2, ValueTypes.Maximize, 0, 0, 100); } //------------------------------------------------------------------------ /** * Questo metodo deve restituire il valore calcolato di questa nuova colonna. In genere lo si dovrebbe calcolare dall'elenco degli ordini * o da alcuni valori statistici già calcolati (altre colonne della banca dati). */ @Override public String getValue(ResultsGroup rg, String resultKey, byte direction, byte plType, byte sampleType) throws Exception { try { double value = rg.specialValues().getDouble("CA_MALength", -1); if(value == -1) { // significa che il valore non è stato impostato restituire NOT_AVAILABLE; } else { // restituisce il valore convertito in stringa return java.lang.Double.toString(valore); } } catch(Exception e) { Log.error("Errore StratSettingsMALength", e); return ""; // "Errore: " + e.getMessage(); } } }
3/ Come installarlo
- Importazione gli snippet nella sezione Editor di codice
- Compilare tutto
- Riavviare StrategyQuant
- allora selezionare l'Analisi personalizzata nel Costruttore :
Allora aggiungiamo questa nuova colonna a un Databank e leggiamo il valore della nostra regola Init
Se l'analisi personalizzata non viene più utilizzata, il database delle colonne deve essere rimosso per evitare errori nel log.
Mi chiamo Emmanuel Bouillant-Evrard, ingegnere specializzato in finanza. Ho lavorato per 24 anni nella ricerca e nello sviluppo nel settore finanziario negli Stati Uniti, in Canada e in Francia.