Beispiel für Custom Analysis, das zeigt, wie Variablenwerte aus Strategy-Init-Regeln ausgelesen werden. Demonstriert die Verwendung von toInitValue für den Zugriff auf Initialisierungsparameter und das Erstellen benutzerdefinierter Datenbankspalten.
In einer Regel, die bei Strategy Init ausgelöst wird, weist StrategyQuant für jede Assign-Funktion Ihrer Variable anstelle eines Wertes eine „AssignVrbVleEntMlt“-Variable zu.
Während der Initialisierung wird Ihrer Variable dann der Wert von AssignVrbVleEntMlt zurückgegeben
Aus einer Strategie, die mit der „H1388 Test Variable Template“ erstellt wurde, können wir im Code Folgendes ablesen:
AssignVrbVleEntMlt = 210
AssignVrbVleEntMlt erhält den Wert anstelle von MALength
Anschließend gibt AssignVrbVleEntMlt den Wert bei der Initialisierung an MALength zurück.
1/ Dieses Codebeispiel für Custom Analysis zeigt Ihnen, wie Sie einen Wert Ihrer Variable in einer Regel abrufen, die bei Strategy Init ausgelöst wird
Wir erhalten den Wert aus einer Funktion „toInitValue“, aus einer ResultsGroup, dem Regelnamen „Init“ und einem Variablennamen: MALength (in diesem Beispiel)
Anschließend verwenden wir die Funktion rg.specialValues(), um den Wert in „CA_MALength“ zu setzen
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/ Danach ruft der DatabankColumn-Code den Wert der Custom Analysis ab
Wir verwenden rg.specialValues, um den Wert aus CA_MALength abzurufen
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/ So installieren Sie es
Importieren Sie die Snippets im Code Editor
Alle kompilieren
Starten Sie StrategyQuant neu
Wählen Sie anschließend die Custom Analysis im Builder aus:
Danach fügen wir diese neue Spalte zu einer Databank hinzu und lesen den Wert unserer Init-Regeln aus
Wenn die Custom Analysis nicht mehr verwendet wird, muss die Databank-Spalte entfernt werden, um Fehler im Log zu vermeiden
Mein Name ist Emmanuel Bouillant-Evrard, Ingenieur mit Spezialisierung auf Finanzen. Ich war 24 Jahre lang in Forschung und Entwicklung im Finanzbereich in den USA, Kanada und Frankreich tätig.