Příklad Custom Analysis ukazující, jak číst hodnoty proměnných z pravidel Strategy Init. Demonstruje použití funkce toInitValue pro přístup k inicializačním parametrům a vytváření vlastních sloupců v databance.
V pravidle spouštěném při inicializaci strategie (Strategy Init) přiřadí StrategyQuant pro každou funkci Assign function vaší proměnné namísto hodnoty proměnnou „AssignVrbVleEntMlt“.
Během inicializace pak vaší proměnné vrátí hodnotu AssignVrbVleEntMlt
Ze strategie vytvořené šablonou „H1388 Test Variable Template“ můžeme v kódu vyčíst:
AssignVrbVleEntMlt = 210
AssignVrbVleEntMlt přijímá hodnotu namísto MALength
Poté AssignVrbVleEntMlt vrátí hodnotu proměnné MALength při inicializaci.
1/ Tento ukázkový kód Custom Analysis vám ukáže, jak získat hodnotu vaší proměnné v pravidle spouštěném při inicializaci strategie (Init)
Hodnotu získáváme z funkce „toInitValue“, z objektu ResultsGroup, s názvem pravidla (Rule name) „Init“ a názvem proměnné (variable name): MALength (v tomto příkladu)
Poté použijeme funkci rg.specialValues() k uložení hodnoty do „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/ Poté kód DatabankColumn načte hodnotu z Custom Analysis
Používáme rg.specialValues k získání hodnoty z 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/ Jak to nainstalovat
Importujte snippety do Code Editoru
Klikněte na Compile All
Restartujte StrategyQuant
poté vyberte Custom Analysis v Builderu:
Poté přidáme tento nový sloupec do Databanky a přečteme hodnotu našich pravidel Init
Pokud se analýza Custom Analysis již nepoužívá, sloupec v databance musí být odebrán, aby se předešlo chybám v protokolu
Jmenuji se Emmanuel Bouillant-Evrard, inženýr specializující se na finance. V oblasti výzkumu a vývoje ve financích jsem působil v USA, Kanadě a Francii po dobu 24 let.