En la carga de los recursos... Cargando...

Funciones de entrada de la estrategia

Para las estrategias enJavaScript, Python, yC++las siguientes funciones de entrada se han definido para la plataforma de negociación cuántica FMZ.

Nombre de la función Descripción
main() La función de entrada es la función principal de la estrategia.
onexit() Es una función de limpieza cuando sale normalmente, su tiempo máximo de ejecución es de 5 minutos, que puede dejarse sin declarar; si se produce el tiempo de espera, uninterrumpirSe informará del error.onerror()la función se activa primero durante la negociación en vivo, elonexit()la función no se activará de nuevo.
onerror() Es una función de salida anormal, su tiempo máximo de ejecución es de 5 minutos, que se puede dejar sin declarar.PythonyC++no soporta esta función, y la función no es compatible con el sistema de backtesting.
init() Es una función de inicialización, su programa de estrategia se llamará automáticamente cuando comience a ejecutarse, que puede dejarse sin declarar.

Un exito

onexit(), procesando trabajos de limpieza, con un tiempo máximo de ejecución de 5 minutos, que es realizado por el usuario.

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

Prueba elonexit()Función:

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

Dado que la estrategia en el sistema de backtesting suele estar diseñada como un ciclo interminable, laonexit()La función implementada en la estrategia de ejecución no puede activarse en el sistema de backtesting.onexit()la función puede activarse detectando la marca final del sistema de backtesting (excepción EOF).

En el caso de los

El usuario implementa la función de inicializacióninit(), que ejecutará automáticamente la funcióninit()al comienzo de la estrategia para completar la tarea de inicialización.

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

¿Qué pasa?

La ejecución de la funciónonerror()Esta función no admite estrategias escritas enPythonyC++El.onerror()la función puede tomar unmsgParámetro, que es el mensaje de error que se informa cuando se activa la excepción.

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++
Sistema de pruebas de retroceso Marco estratégico y funciones de la API