La cuantificación del círculo de monedas es algo nuevo para mí -- lo que me acerca a la cuantificación del círculo de monedas.

El autor:Un sueño pequeño., Creado: 2021-04-19 14:16:21, Actualizado: 2023-09-24 19:30:05

img

El círculo de monedas cuantificado transacción de nuevo en la vista que te lleva más cerca de la moneda cuantificada (II)

En el artículo anterior, hablamos de un script de transacción programada. De hecho, la estrategia de transacción es un script de transacción, y el artículo habla principalmente de que el script de transacción requiere un soporte de hardware (donde se ejecuta el programa), que puede escribirse en el lenguaje de programación de la computadora (se enumeran los tres lenguajes de programación utilizados por los inventores en las plataformas de transacción cuantitativas, por supuesto, la estrategia de implementación de cualquier lenguaje de programación para hacer transacciones programadas).

Escrito de transacciones programadas

  • Tipos de estrategias comerciales Los principiantes en la negociación programada y la negociación cuantitativa pueden llegar a ser confundidos con los nombres de estrategias de tendencia, estrategias de alquiler, estrategias de alta frecuencia, estrategias de red, etc. En realidad, la negociación programada y la negociación cuantitativa son tipos de estrategias comunes en pocas direcciones.

    • Las estrategias de cobertura de interés En pocas palabras, las estrategias como mantener posiciones de venta masiva y mantener posiciones de venta reducida pueden clasificarse como estrategias de interés. Hay muchas categorías específicas, entre los mercados actuales, entre los futuros, entre los futuros, entre los tipos de interés.
    • Estrategias de tendencia En pocas palabras, es una estrategia de seguimiento de tendencias, como el binario, el MACD, etc.
    • Estrategia de regreso Por ejemplo, las estrategias de red para sacar provecho de los fluctuaciones de precios en mercados inestables.
    • Estrategias de alta frecuencia En pocas palabras, es una estrategia para realizar transacciones de alta frecuencia mediante algoritmos que exploran la estructura microscópica del mercado, las leyes, las oportunidades, etc.

    Las estrategias de los inventores de plataformas de intercambio cuantitativas pueden ser divididas en:

    • Estrategia de una sola variedad Es decir, esta estrategia solo opera una variedad, como hacer transacciones con BTC o hacer transacciones con ETH.
    • Estrategias multiculturales En pocas palabras, es operar con varias variedades de acuerdo a una lógica estratégica.
    • Políticas de cuentas múltiples En pocas palabras, es un objeto de intercambio configurado en el disco real (en el artículo anterior se introdujo el concepto de intercambio, configurar el objeto de intercambio de API KEY para representar una cuenta de intercambio). Por ejemplo, algunas políticas de seguimiento, varias cuentas que siguen operaciones juntas (puede ser el mismo intercambio, o puede ser diferente intercambio), en resumen, un objeto de intercambio administrado en el disco real (cuentas).
    • Las estrategias de la pluralidad lógica Por ejemplo, la estrategia MACD, la estrategia de línea recta, la estrategia de red, etc. se diseñan simultáneamente en un disco real. (Por supuesto, se opera con diferentes objetos de intercambio, se opera con los mismos objetos de intercambio para ver si la estrategia específica tiene un conflicto lógico)
  • Interfaz de la API de las bolsas ¿Cómo funciona el script de transacción programada en una cuenta de intercambio? La respuesta es la interfaz API abierta a través de la bolsa. Entonces, ¿qué tipos de interfaces hay abiertas en los intercambios? En el artículo anterior, en la sección "Exchanges", hablamos de los intercambios en general con interfaces REST, Websocket. Aquí agregamos un poco de concepto desde el nivel de la política.

    • Interfaz sin necesidad de autenticación Generalmente, se conoce como un pin de interfaz pública, este tipo de interfaces no requieren verificación.API KEYEste tipo de interfaz es generalmente una interfaz de mercado, por ejemplo, para consultar la profundidad del mercado, para consultar datos de la línea K, para consultar las tasas de capital, para consultar información sobre la variedad de transacciones, para consultar el horario del servidor del intercambio, etc. En pocas palabras, una interfaz que no tiene nada que ver con tu cuenta puede ser más o menos segura de que es una interfaz pública (sin necesidad de autenticación).
      En las plataformas de intercambio cuantificadas por los inventores, cuando se llama a una función API no verificada (interfaz no verificada de intercambio de envases, interfaz pública), los datos devueltos a la interfaz se pueden obtener normalmente incluso si la configuración de la API KEY es incorrecta.

    • Interfaces que necesitan ser verificadas En pocas palabras, es una interfaz que requiere autenticación (verificación mediante API KEY), que se llama interfaz privada. Estas interfaces generalmente están relacionadas con algunas operaciones o información de su cuenta, como consultar los activos de la cuenta, consultar el mantenimiento de la cuenta, interrogatorio suspendido, transferencia de consulta única, transferencia, cambio de moneda, apalancamiento de apalancamiento, configuración del modo de mantenimiento, etc. Estas operaciones deben ser verificadas. En las plataformas de intercambio cuantificadas de los inventores, cuando se llama a una función API que requiere verificación (interfaz que requiere verificación de la bolsa envuelta, interfaz privada), si el API KEY está configurado incorrectamente, se produce un error al llamar a la interfaz y se devuelve un valor en blanco.

    Entonces, ¿cómo se utilizan estas interfaces en las plataformas de intercambio cuantitativas de los inventores?

    Las plataformas de intercambio cuantificado de inventores envuelven el comportamiento de los intercambios, definen interfaces coherentes (por ejemplo, interfaces de línea K, interfaces de mercado profundo, interfaces de consulta de activos actuales, interfaces de descarga, interfaces de retirada de pedidos, etc.) que se llaman funciones API de la plataforma de intercambio cuantificado de inventores y que se pueden consultar consultando la documentación de la API.https://www.fmz.com/api )。

    Entonces, ¿cómo se utilizan las interfaces de intercambio de comportamiento y definición no uniformes en las plataformas de intercambio cuantitativas de los inventores?

    Estas interfaces son, por ejemplo: transferencia de activos, encargo condicional, pedido por lotes, retiro por lotes, orden de modificación, etc. Estas interfaces están disponibles en algunos intercambios y en otros no, y las funciones y detalles de uso pueden variar mucho, por lo que estas interfaces se pueden usar en la plataforma de comercio cuantitativo del inventor.exchange.IOPara acceder a esta función (para más detalles, vea el documento de la API de la plataforma de intercambio cuantitativo de los inventores):https://www.fmz.com/api#exchange.io..También hay algunos ejemplos de estrategias prácticas de IO en la plaza de estrategias de plataformas de intercambio cuantitativas de inventores.

    ¿Todas las funciones de API en la documentación de la API de la plataforma de intercambio cuantificada de los inventores generan solicitudes de red?

    Si la interfaz API de la bolsa tiene una frecuencia de acceso limitada (por ejemplo, 5 veces por segundo), la entrada no puede ser demasiado frecuente o se reporta un error HTTP 429 y se rechaza la entrada (la mayoría de las bolsas reportan 429). No todas las funciones API de las plataformas de intercambio cuantificadas de los inventores generan solicitudes de red, y algunas funciones API de los inventores solo modifican algunas configuraciones locales, como establecer el par de transacciones actual, establecer el código del contrato, las funciones de cálculo de indicadores, obtener el nombre del objeto del intercambio, etc. Básicamente, el uso de la función puede determinar si se está realizando una solicitud de red, siempre que se produzcan solicitudes de red para obtener datos de la bolsa, operaciones sobre cuentas de la bolsa, etc. Estas interfaces requieren atención a la frecuencia de las llamadas.

    • A continuación se presentan algunos problemas y experiencias comunes en las plataformas de intercambio cuantificado de inventores que utilizan funciones de API.

      • No hay que equivocarse Este es el error más común, que molesta a innumerables novedades, a menudo la estrategia es volver a revisar bien todo está bien, ¿por qué el disco real funciona durante un tiempo (puede desencadenar en cualquier momento) y el disco real se cuelga ~

        img

        Cuando se escribe una política, se necesita una verificación de los datos que devuelve la interfaz, por ejemplo, para obtener la transacción en la plataforma de intercambio cuantificado del inventor (lo mismo ocurre cuando se escribe un programa para acceder directamente a la interfaz de intercambio):var ticker = exchange.GetTicker()Si necesitamos usar esto,tickerLas variables (véase la estructura que devuelve la función GetTicker)Last(Precios recientes) es la información que necesitamos para usar.var newPrice = ticker.LastAsí se obtienen los datos ((newPrice es???new: más reciente,Price: precio, sí! combinado!) en este momento, siGetTicker()Las funciones devuelven datos normales, pero si ocurre un retraso en la solicitud, un error de red, un cambio de línea, un cable cortado, un niño que tira de la llave, etc.GetTicker()La función regresa.nullEn este momento.tickerEl valor esnull¿Qué es lo que está pasando?LastSi el proceso se detiene, puede ocurrir una anomalía en el proceso que puede causar que el proceso de la política se detenga. Por lo tanto, parece que el fallo de la llamada a la interfaz (el fallo de la llamada GetTicker devuelve null) no es la causa directa de la interrupción de la política de disco real (la causa directa es acceder a un servidor).nullLas propiedades de las variables), las llamadas de interfaz no terminan sin que el disco real se detenga. Entonces, ¿qué podemos hacer para evitar que el disco se pare de forma inusual? Y la respuesta es que es muy sencillo hacer errores con los datos que regresa la interfaz, simplemente juzgar si los datos que regresa son correctos o no.null(El ejemplo del lenguaje JavaScript, otros lenguajes son prácticamente) Escribe un pequeño fragmento de código para explicarlo. (Esto es solo una explicación, ¡el ejecutar directamente es una locura!)

        var ticker = exchange.GetTicker()
        if (ticker) {
            var newPrice = ticker.Last
            Log("打印最新价格:", newPrice)
        } else {
            // 数据为null,不做操作就不会出问题
        }
        

        No sóloGetTickerLas interfaces que tienen una solicitud de red necesitan una respuesta errónea a los valores de retorno (si utilizas el valor de retorno de una función) Hay muchas maneras en las que se puede usar la tolerancia._C()Las funciones (ver la documentación de la API de FMZ), escriben sus propias funciones tolerantes a errores, diseñan sus propios mecanismos de tolerancia a errores, y su propia lógica. ¿Qué es esto?_C()El uso de las funciones, muchos de los estudiantes de primer año probablemente también lo hacen mal._C()Los parámetros de las funciones son referencias de funciones, no llamadas de funciones._C(funcName, param1, param2), llamada correctamente, funcName sin paréntesis, param1, param2 es el parámetro que se debe pasar a la función funcName._C(funcName(param1, param2))En la mayoría de los casos, los usuarios de FMZ tienen que tener en cuenta que la API de FMZ no es la única que se puede utilizar para hacer una llamada.

      • Menor cantidad de pedidos de compra a precio de mercado El volumen de los pedidos de compra al mercado al instante es también muy fácil de confundir, ya que en el artículo anterior se habló de que el volumen de compra al mercado al instante es generalmente una cantidad (los intercambios muy diferentes pueden ser otros, generalmente en FMZ estos establecimientos especiales se explican en la documentación de la API de FMZ). El par de transacciones está configurado para:LTC_USDT

        function main() {
            exchange.IO("simulate", true)   // 切换为OKEX交易所的模拟盘
            exchange.Buy(-1, 1)             // 价格是-1,表示下的订单为市价单,数量为1表示下单量是1USDT
        }
        

        Debido a que los intercambios generalmente tienen un límite de cantidad de pedido, los pedidos menores al límite no se anuncian (por ejemplo, el Binance Cash requiere que cada pedido mayor a 5 USDT sea exitoso).

        错误	Buy(-1, 1): map[code:1 data:[map[clOrdId: ordId: sCode:51020 sMsg:Order amount should be greater than the min available amount. tag:]] msg:]
        
      • Dirección de los futuros La dirección negativa en la estrategia de futuros también es una de las cosas que los novatos a menudo cometen errores que causan problemas, por ejemplo, escribir estrategias en plataformas de negociación cuantitativas de inventores. Para empezar, veamos la descripción en el documento de la API:https://www.fmz.com/api#exchange.setdirection...

        img

        La función de orden inferior tiene que serBuy,SellNo obstante, si los futuros (claro que no hay problema, los futuros solo compran y venden) tienen direcciones abiertas, bajas, abiertas y vacías, entonces obviamente Buy/Sell no representa operaciones de tantas direcciones, entonces se necesita introducir la función para configurar la dirección de negociación de futuros.exchange.SetDirection()¿Qué es esto? En FMZexchange.SetDirection("buy")(Dirección predeterminada) yexchange.BuySi se usa en conjunto, se indica que el siguiente número es el de la orden de más posiciones. ¿Qué es lo que está sucediendo?exchange.SetDirection("sell")yexchange.SellSi se usa en conjunto, se indica que el siguiente orden es una orden para un almacén vacío.exchange.SetDirection("closebuy")yexchange.SellSi se usa en conjunto, se indica que el siguiente orden es una orden de compra en bolsa.exchange.SetDirection("closesell")yexchange.BuySi se usa en conjunto, se indica que el siguiente número es el orden de un almacén vacío. Las reuniones son muy regulares.exchange.SetDirection("sell")yexchange.BuyEl uso combinado, o cualquier otra combinación de errores. Entonces se reportan errores (la reevaluación puede no reportarse, pero esto es obviamente un error de lógica, el obsesivo no puede soportar...). Otro error que comete Liu Xiaobo

        function main() {
            exchange.SetContractType("quarter")   // 设置当前合约为季度合约
            exchange.SetDirection("sell")
            var id = exchange.Sell(-1, 1)    
            Log("看我市价单下单了,成交了,就有持仓了", exchange.GetPosition())    
            exchange.SetDirection("closebuy")   // closebuy 和Sell 搭配使用,嗯没错~
            exchange.Sell(-1, 1)
        }
        

        img
        Ver aquí te preguntará: ¿por qué tengo una posición y Closebuy y Sell también se usan en conjunto, cómo se puede reportar un error, no se puede equilibrar? Una de las situaciones en las que puede aparecer este error es: la dirección de la posición de equilibrio es correcta, el uso de la función de orden inferior también es correcto, también se mantiene la posición de esta dirección, pero aún así se informa el error. La razón es que es posible que su programa haya realizado varios pedidos, que los pedidos iniciales no se hayan completado, que el pedido de liquidación esté pendiente de transacción en la cuenta, y que el programa continúe para liquidar, lo que indicará un error más allá de la posición de liquidación.

      • Exportación de registros, visualización de información de transacciones El diseño de la programación, la programación de diseño, la cuantificación de la estrategia de transacción y el diseño de la interacción de máquinas, entre otras cosas, que muestran los parámetros de datos sin abrir, los registros de operaciones de los parámetros, la salida de los parámetros. Por ejemplo: con pythonprint¿Qué es esto? JavaScript también funcionaconsole.log¿Qué es esto? El Golangfmt.Println()¿Qué es esto? En C++cout

        La información en la plataforma FMZ muestra que hay dos lugares principales donde se muestra la información en la plataforma de comercio cuantitativo de los inventores.

        • Bar de estado Una vez que el disco está en marcha, la página del disco se ve así.

          img

          La barra de estado se muestra en parte como información de la barra de estado, la barra de estado es principalmente para mostrar algunos datos de cambios en tiempo real (ya que los cambios en tiempo real requieren observación en tiempo real y no se pueden imprimir en un registro cada vez, por lo que este tipo de datos se pueden mostrar en la barra de estado, si se imprime cada registro, se repetirá mucho datos sin sentido, lo que afectará a las consultas). Usos de datos en la barra de estadoLogStatusEn el caso de FMZ, la función es una función que se puede ver en la documentación de la API de FMZ.

        • Los diarios También en la página de disco real, como se muestra en el gráfico:

          img

          La parte que se muestra es la barra de registro, que se utiliza principalmente para registrar permanentemente ciertos datos en un momento determinado o para registrar una operación de una política en un momento determinado. Los diarios se dividen en varios tipos: 1, Registros normales, la política de FMZ utiliza la función Log para la salida, la impresión en el registro de la política.

          img

          2, el siguiente registro, usado en la estrategia de FMZexchange.Sell/exchange.BuyLos registros se exportan automáticamente en el registro.

          img

          3, registro de desinscripciones, uso en la estrategia de FMZexchange.CancelOrderEn la actualidad, la mayoría de los registros están en línea con el sitio web de la empresa.

          img

          4, Registros de errores, la política de FMZ se ejecuta cuando la interfaz que realiza las solicitudes de red tiene un error de llamada, cuando se lanza una excepción (por ejemplo, una frase como "throw"), se produce automáticamente un registro de errores en el registro.

          img

        Las funciones de la API de FMZ, que pueden generar funciones de salida de registro como Log (...), exchange.Buy ((Price, Amount), exchange.CancelOrder ((Id) etc. pueden ser enviadas con algunos parámetros de salida adjuntos después de los parámetros necesarios, por ejemplo: exchange.CancelOrder ((orders[j].Id, orders[j]) así que cuando se cancela el pedido, la información del pedido se incluye.

        function main() {
            Log("数据1", "数据2", "数据3", "...")
            var data2 = 200
            var id = exchange.Sell(100000, 0.1, "附带数据1", data2, "...")
            exchange.CancelOrder(id, "附带数据1", data2, "...")
            LogProfit(100, "附带数据1", data2, "...")
        }
        
      • Uso de las funciones indicadoras Antes de hablar de las funciones de indicadores, primero debemos entender qué son los indicadores, simplemente líneas como las líneas ecuatoriales, MACD, ATR, etc. Pregunta: ¿De dónde vienen estos indicadores? A: Por supuesto que sí. Pregunta: ¿En qué se basa el cálculo? Respuesta: Basado en datos de la línea K. P: ¿Cuál es el ejemplo? R: En el ejemplo más simple de indicadores de línea recta, si usamos la línea K del día (es decir, una línea solar o una línea cinética que representa un día) como fuente de datos para calcular el indicador. El parámetro del indicador de línea recta es 10, entonces el indicador de línea recta calculado es la línea recta de 10 días. Pregunta: ¿Se puede calcular el indicador de la línea media si el número de BAR de la línea K es inferior a 10 bits? R: No solo los indicadores de la línea media no se pueden calcular, ningún indicador puede calcular valores de indicadores válidos cuando el número de datos BAR de la línea K no satisface los parámetros del ciclo del indicador.JavaScriptLa política de lenguaje muestra los datos de los indicadores cuando se imprimen.null

        Un ejemplo de enseñanza está en la Plaza de la Estrategia:https://www.fmz.com/strategy/125770Para analizar esta estrategia de ejemplo de enseñanza, se puede ver el gráfico generado por el sistema de analizar y la línea media de 10 ciclos:

        img

        La estrategia es hacer gráficos personalizados, K-lines y gráficos de línea recta:

        img

        Pregunta: ¿Qué pasa si quiero una línea media de 10 horas? Respuesta: Los datos de línea K pueden usarse para el ciclo de horas.

        En la práctica, la línea K que vemos, y que luego la digitalizamos, es una matriz (el concepto de matriz no se entiende, se puede leer en Bauda), en la que cada elemento es un pilar de K, ordenado en orden, el primer elemento de la matriz es el más alejado del tiempo actual, y el último elemento de la matriz es el más cercano al tiempo actual. Por lo general, la última columna de datos de la línea K es la columna de la línea del ciclo actual, que cambia en tiempo real y no está terminada. Los indicadores calculados también se corresponden a la columna de la línea K. El ejemplo anterior muestra que el valor de un indicador corresponde a una columna de la línea K. Tenga en cuenta que la última columna de la línea K cambia en tiempo real y que los indicadores calculados también cambian con el cambio de la columna de la línea K.

        En las plataformas de comercio cuantificado de los inventores, se puede usar la biblioteca TA (la biblioteca implementada en la plataforma FMZ, integrada en el administrador y disponible directamente en varios idiomas) o utilizar la biblioteca talib (la biblioteca de indicadores antiguos de talib, la integración de JS, C ++, Python requiere una instalación automática). Por ejemplo, en el ejemplo anterior se calcula la línea media: Utilizando la biblioteca TA:

        function main() {
            var records = exchange.GetRecords()
            var ma = TA.MA(records, 10)
            Log(ma)       // 打印均线
        }
        

        Usando el archivo de talib:

        function main() {
            var records = exchange.GetRecords()
            var ma = talib.MA(records, 10)
            Log(ma)       // 打印均线
        }      
        

        Los datos indicadores calculados ma es un conjunto de elementos que corresponden a una matriz de K líneas (records), es decir,ma[ma.length -1]Encuentrarecords[records.length - 1]En este sentido, el gobierno de los Estados Unidos ha tomado medidas para evitar que los ataques se produzcan.

        También hay otros indicadores más complejos que requieren atención, como MACD.

        var macd = TA.MACD(records)   // 这样只传入K线数据,不传入指标参数,指标参数采用的就是默认值,其它指标函数也是同理
        

        En este momento, la variable macd es una matriz bidimensional (no entiendo el concepto, puede ser una variedad), una matriz bidimensional es simplemente una matriz, y cada elemento es también una matriz. Pregunta: ¿Por qué los datos del indicador MACD son un conjunto de dos dimensiones? R: Como el indicador macd se compone de dos líneas (línea dif, línea deea) y un conjunto de columnas de cantidad (columna de cantidad macd, en realidad, los datos de esta columna de cantidad también se pueden ver como una línea), la variable macd se puede dividir en:

        var dif = macd[0]
        var dea = macd[1]
        var macdColumn = macd[2]
        

        Aquí también hay un ejemplo de enseñanza ya hecho, un estudio interesante:https://www.fmz.com/strategy/151972

        img


Relacionados

Más.