Esempio di Custom Analysis che mostra come leggere i valori delle variabili dalle regole di Strategy Init. Dimostra l'uso di toInitValue per accedere ai parametri di inizializzazione e creare colonne personalizzate nella databank.
In una regola attivata su Strategy Init, per ogni Assign function, StrategyQuant assegna una variabile "AssignVrbVleEntMlt" alla tua variabile invece di un valore.
Successivamente, durante l'inizializzazione, restituirà il valore AssignVrbVleEntMlt alla tua variabile
Da una strategia generata dal "H1388 Test Variable Template", possiamo leggere nel codice:
AssignVrbVleEntMlt = 210
AssignVrbVleEntMlt riceve il valore al posto di MALength
Poi AssignVrbVleEntMlt restituisce il valore a MALength durante l'inizializzazione.
1/ Questo esempio di codice Custom Analysis ti mostra come ottenere il valore della tua variabile in una regola attivata su strategy Init
Otteniamo il valore da una funzione "toInitValue", da un ResultsGroup, e da Rule name "Init", e un variable name: MALength (in questo esempio)
Quindi utilizziamo la funzione rg.specialValues() per impostare il valore in "CA_MALength"
package SQ.CustomAnalysis;
import com.strategyquant.lib.*;
import java.util.ArrayList;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;
import SQ.Utils.Bouillant;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.*;
// Created in France by 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));
return true;
} catch(Exception e)
{
Log.error("Error CA_InitStratsSettings", e);
return false; // "Error: " + e.getMessage();
}
}
//------------------------------------------------------------------------
@Override
public ArrayList<ResultsGroup> processDatabank(String project, String task, String databankName, ArrayList<ResultsGroup> databankRG) throws Exception {
return databankRG;
}
}
2 / Successivamente il codice DatabankColumn recupera il valore della Custom Analysis
Utilizziamo rg.specialValues per recuperare il valore da CA_MALength
package SQ.Columns.Databanks;
import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// Created in France by Emmanuel Bouillant-Evrard
public class StratSettingsMALength extends DatabankColumn
{
public static final Logger Log = LoggerFactory.getLogger(StratSettingsMALength.class);
public StratSettingsMALength()
{
super("MALength Settings", DatabankColumn.Decimal2, ValueTypes.Maximize, 0, 0, 100);
}
//------------------------------------------------------------------------
/**
* This method should return computed value of this new column. You should typically compute it from the list of orders
* or from some already computed statistical values (other databank columns).
*/
@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)
{
// this means value was not set
return NOT_AVAILABLE;
} else
{
// return value converted to String
return java.lang.Double.toString(value);
}
} catch(Exception e)
{
Log.error("Error StratSettingsMALength", e);
return ""; // "Error: " + e.getMessage();
}
}
}
3/ Come installarlo
Importa gli snippet nell'Editor di Codice
Compila tutto
Riavvia StrategyQuant
poi seleziona la Custom Analysis nel Builder:
Poi aggiungiamo questa nuova colonna a una Databank e leggiamo il valore delle nostre regole Init
Se la Custom Analysis non viene più utilizzata, la colonna della Databank deve essere rimossa per evitare qualsiasi errore nel log
Mi chiamo Emmanuel Bouillant-Evrard, ingegnere specializzato in finanza. Ho lavorato per 24 anni nella ricerca e sviluppo nel settore finanziario negli Stati Uniti, in Canada e in Francia.