Exemple de Custom Analysis montrant comment lire les valeurs de variables à partir des règles d'initialisation de stratégie (Strategy Init). Démontre l'utilisation de toInitValue pour accéder aux paramètres d'initialisation et créer des colonnes personnalisées dans la banque de données.
Dans une règle déclenchée lors de l'initialisation de la stratégie (Strategy Init), pour chaque fonction Assign, StrategyQuant affecte une variable « AssignVrbVleEntMlt » à votre variable à la place d'une valeur.
Ensuite, pendant l'initialisation, il restituera la valeur de AssignVrbVleEntMlt à votre variable
À partir d'une stratégie générée par le modèle « H1388 Test Variable Template », nous pouvons lire dans le code :
AssignVrbVleEntMlt = 210
AssignVrbVleEntMlt reçoit la valeur à la place de MALength
Ensuite, AssignVrbVleEntMlt restitue la valeur à MALength lors de l'initialisation.
1/ Cet exemple de code Custom Analysis vous montre comment récupérer la valeur de votre variable dans une règle déclenchée lors de l'initialisation de la stratégie (Init)
Nous récupérons la valeur depuis une fonction « toInitValue », à partir d'un ResultsGroup, d'un Rule name « Init » et d'un nom de variable : MALength (dans cet exemple)
Ensuite, nous utilisons la fonction rg.specialValues() pour définir la valeur dans « 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 / Ensuite, le code de DatabankColumn récupère la valeur de la Custom Analysis
Nous utilisons rg.specialValues pour récupérer la valeur de 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/ Comment l'installer
Importez les snippets dans le Code Editor
Compile All
Redémarrez StrategyQuant
puis sélectionnez la Custom Analysis dans le Builder :
Ensuite, nous ajoutons cette nouvelle colonne à une banque de données et lisons la valeur de nos règles d'initialisation
Si la Custom Analysis n'est plus utilisée, la colonne de la banque de données doit être supprimée pour éviter toute erreur dans les journaux
Je m'appelle Emmanuel Bouillant-Evrard, ingénieur spécialisé en finance. J'ai travaillé en recherche et développement dans la finance aux États-Unis, au Canada et en France pendant 24 ans.