В процессе загрузки ресурсов... загрузка...

Функции входа в стратегию

Для стратегий в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(), который автоматически выполняет функцию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