Для стратегий вJavaScript
, Python
, иC++
для платформы FMZ Quant Trading были определены следующие функции ввода.
Имя функции | Описание |
---|---|
main() |
Функция входа - это основная функция стратегии. |
onexit() |
Это функция очистки при нормальном выходе, его максимальное время выполнения составляет 5 минут, которое может быть оставлено незаявленным; если наступает тайм-аут,прерыватьОшибка будет сообщена.onerror() Функция запускается впервые во время торговли в режиме реального времени.onexit() Функция не будет активирована снова. |
onerror() |
Это ненормальная функция выхода, ее максимальное время выполнения составляет 5 минут, которое может быть оставлено незаявленным.Python иC++ не поддерживают эту функцию, и функция не поддерживается системой обратного тестирования. |
init() |
Это функция инициализации, ее стратегия будет автоматически вызвана при запуске, которая может быть оставлена незаявленной. |
onexit()
, обработка очистных работ, с максимальным временем выполнения 5 минут, которое реализуется пользователем.
function main(){
Log("Start running, stop after 5 seconds, and execute onexit function!")
Sleep(1000 * 5)
}
// onexit function implementation
function onexit(){
var beginTime = new Date().getTime()
while(true){
var nowTime = new Date().getTime()
Log("The program stops counting down..The cleaning starts and has passed:", (nowTime - beginTime) / 1000, "Seconds!")
Sleep(1000)
}
}
import time
def main():
Log("Start running, stop after 5 seconds, and execute onexit function!")
Sleep(1000 * 5)
def onexit():
beginTime = time.time() * 1000
while True:
ts = time.time() * 1000
Log("The program stops counting down.The cleaning starts and has passed:", (nowTime - beginTime) / 1000, "Seconds!")
Sleep(1000)
void main() {
Log("Start running, stop after 5 seconds, and execute onexit function!");
Sleep(1000 * 5);
}
void onexit() {
auto beginTime = Unix() * 1000;
while(true) {
auto ts = Unix() * 1000;
Log("The program stops counting down.The cleaning starts and has passed:", (nowTime - beginTime) / 1000, "Seconds!");
Sleep(1000);
}
}
Проверитьonexit()
Функция:
function main() {
if (exchange.GetName().startsWith("Futures_")) {
Log("The exchange is futures")
exchange.SetContractType("swap")
} else {
Log("The exchange is spot")
}
if (IsVirtual()) {
try {
onTick()
} catch (e) {
Log("error:", e)
}
} else {
onTick()
}
}
function onTick() {
while (true) {
var ticker = exchange.GetTicker()
LogStatus(_D(), ticker ? ticker.Last : "--")
Sleep(500)
}
}
function onexit() {
Log("Execute the sweep function")
}
def main():
if exchange.GetName().startswith("Futures_"):
Log("The exchange is futures")
else:
Log("The exchange is spot")
if IsVirtual():
try:
onTick()
except Exception as e:
Log(e)
else:
onTick()
def onTick():
while True:
ticker = exchange.GetTicker()
LogStatus(_D(), ticker["Last"] if ticker else "--")
Sleep(500)
def onexit():
Log("Execute the sweep function")
#include <iostream>
#include <exception>
#include <string>
void onTick() {
while (true) {
auto ticker = exchange.GetTicker();
LogStatus(_D(), ticker);
Sleep(500);
}
}
void main() {
std::string prefix = "Futures_";
bool startsWith = exchange.GetName().substr(0, prefix.length()) == prefix;
if (startsWith) {
Log("The exchange is futures");
exchange.SetContractType("swap");
} else {
Log("The exchange is spot");
}
if (IsVirtual()) {
try {
onTick();
} catch (...) {
std::cerr << "Caught unknown exception" << std::endl;
}
} else {
onTick();
}
}
void onexit() {
Log("Execute the sweep function");
}
Поскольку стратегия в системе обратного тестирования обычно рассчитана как бесконечный цикл,onexit()
Невозможно запустить функцию, реализованную в стратегии выполнения, в системе обратного тестирования.onexit()
функция может быть активирована путем обнаружения конечной марки системы обратного тестирования (исключение EOF).
Пользователь реализует функцию инициализацииinit()
, который автоматически выполняет функциюinit()
в начале стратегии для завершения задачи инициализации.
function main(){
Log("The first line of the code executed in the program!", "#FF0000")
Log("Exit!")
}
// Initialization the function
function init(){
Log("Initialization!")
}
def main():
Log("The first line of the code executed in the program!", "#FF0000")
Log("Exit!")
def init():
Log("Initialization!")
void main() {
Log("The first line of the code executed in the program!", "#FF0000");
Log("Exit!");
}
void init() {
Log("Initialization!");
}
Исполнение функцииonerror()
Эта функция не поддерживает стратегии, написанные вPython
иC++
.onerror()
Функция может приниматьmsg
параметр, который представляет собой сообщение об ошибке, сообщаемое при запуске исключения.
function main() {
var arr = []
Log(arr[6].Close) // A program exception is intentionally raised here.
}
function onerror(msg) {
Log("error:", msg)
}
# not supported by python
// not supported by C++
Система обратных испытаний
Рамочная стратегия и функции API