Die Ressourcen sind geladen. Beförderung...

Strategie-Eingabefunktionen

Für Strategien inJavaScript, Python, undC++Für die FMZ Quant Trading Plattform wurden folgende Eingabefunktionen definiert.

Funktionsname Beschreibung
main() Die Eingangsfunktion ist die Hauptfunktion der Strategie.
onexit() Es ist eine Reinigungsfunktion, wenn es normal ausgeht, seine maximale Ausführungszeit beträgt 5 Minuten, die nicht angemeldet werden kann;UnterbrechenDer Fehler wird gemeldet.onerror()Die Funktion wird erstmals während des Live-Handels ausgelöst.onexit()Funktion wird nicht wieder ausgelöst.
onerror() Es handelt sich um eine abnormale Ausgangsfunktion, deren maximale Ausführungszeit 5 Minuten beträgt, die nicht deklariert werden kann.PythonundC++Diese Funktion wird vom Backtesting-System nicht unterstützt.
init() Es handelt sich um eine Initialisierungsfunktion, deren Strategieprogramm automatisch aufgerufen wird, wenn es ausgeführt wird, was nicht deklariert bleiben kann.

Ein Exit (((

onexit(), Verarbeitung von Aufräumarbeiten mit einer maximalen Ausführungszeit von 5 Minuten, die vom Benutzer realisiert wird.

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);
    }
}

Test deronexit()Funktion:

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");
}

Da die Strategie im Backtesting-System in der Regel als endlose Schleife konzipiert ist, ist dieonexit()Die Funktion, die in der Ausführungsstrategie implementiert ist, kann im Backtesting-System nicht ausgelöst werden.onexit()Die Funktion kann durch Erkennen der Endmarke des Backtesting-Systems ausgelöst werden (EOF-Ausnahme).

Initial

Der Benutzer implementiert die Initialisierungsfunktioninit(), die automatisch die Funktion ausführtinit()Sie werden anfangs der Strategie angezeigt, um die Initialisierungsaufgabe abzuschließen.

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!");
}

Ein Fehler.

Ausführung der Funktiononerror()Diese Funktion unterstützt keine inPythonundC++. Dieonerror()Funktion kann einemsgParameter, die Fehlermeldung, die bei Auslösung der Ausnahme gemeldet wird.

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++
Backtest-System Strategierahmen und API-Funktionen