Przykład analizy niestandardowej (Custom Analysis) pokazujący, jak odczytywać wartości zmiennych z reguł Strategy Init. Pokazuje użycie toInitValue do uzyskiwania dostępu do parametrów inicjalizacji i tworzenia własnych kolumn w databanku.
W regule wywoływanej przy Strategy Init, dla każdej funkcji Assign, StrategyQuant przypisuje zmienną „AssignVrbVleEntMlt” do Twojej zmiennej zamiast wartości.
Następnie, podczas inicjalizacji, przekaże wartość AssignVrbVleEntMlt z powrotem do Twojej zmiennej
Ze strategii wygenerowanej przez szablon „H1388 Test Variable Template” możemy odczytać w kodzie:
AssignVrbVleEntMlt = 210
AssignVrbVleEntMlt otrzymuje wartość na miejscu MALength
Następnie AssignVrbVleEntMlt przekazuje wartość z powrotem do MALength podczas inicjalizacji.
1/ Ten przykładowy kod Custom Analysis pokazuje, jak pobrać wartość zmiennej w regule wywoływanej przy Strategy Init
Pobieramy wartość z funkcji „toInitValue”, z obiektu ResultsGroup, podając nazwę reguły „Init” oraz nazwę zmiennej: MALength (w tym przykładzie)
Następnie używamy funkcji rg.specialValues(), aby ustawić wartość w „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 / Następnie kod DatabankColumn odczytuje wartość analizy niestandardowej (Custom Analysis)
Używamy rg.specialValues, aby pobrać wartość 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 zainstalować
Zaimportuj snippety w Edytorze kodu
Skompiluj wszystko
Uruchom ponownie StrategyQuant
następnie wybierz Custom Analysis w Builderze:
Następnie dodajemy tę nową kolumnę do Databanku i odczytujemy wartość naszych reguł Init
Jeśli funkcja Custom Analysis nie jest już używana, należy usunąć Column Databank, aby uniknąć błędów w dzienniku zdarzeń (logach)
Nazywam się Emmanuel Bouillant-Evrard, jestem inżynierem specjalizującym się w finansach. Pracowałem w dziale badań i rozwoju (R&D) w branży finansowej w USA, Kanadzie i Francji przez 24 lata.