Estrategia de transacción de moneda digital cuantificada, detalles de configuración de la bolsa

El autor:Un sueño pequeño., Creado: 2019-09-02 09:39:59, Actualizado: 2023-10-19 21:07:41

img

Estrategia de transacción de moneda digital cuantificada, detalles de configuración de la bolsa

A menudo hay una gran variedad de necesidades estratégicas en el diseño de estrategias iniciales de transacción cuantitativa de criptomonedas, que se encuentran en diferentes situaciones independientemente del lenguaje y la plataforma. Por ejemplo, a veces se requiere una variedad de giros, a veces se requiere una variedad de cobertura de plataformas, a veces se requiere una variedad de operaciones simultáneas, etc. A continuación, compartimos algunas experiencias de diseño para la realización de las necesidades estratégicas. Las plataformas de aprendizaje siguen utilizando plataformas de intercambio cuantitativas de inventores.https://www.fmz.comEl mercado ha optado por el mercado de la moneda digital.

  • El diseño estratégico de la "multi-moneda"

    Este tipo de demandas requieren la redacción de una estrategia de tendencia multivariada, una estrategia de rejilla multivariada, etc., que debe ejecutarse con la lógica de la estrategia y la iteración del mercado con diferentes transacciones. La mayoría de las veces se diseñan así:

    function Process (symbol) {
        exchange.IO("currency", symbol)
        var ticker = _C(exchange.GetTicker)
        Log("已经切换交易对,按照策略逻辑处理交易对 :", symbol, "行情:", ticker)
        // ...
        // ..
        // .
    }  
    
    function main(){
        var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
        while (true) {
            for (var i = 0 ; i < symbols.length; i++) {
                Process(symbols[i])
                Sleep(500)
            }
        }
    }
    

    El robot está configurado para:img

    img

    Como se puede ver, esto permite configurar un objeto de intercambio en el robot, cambiar pares de transacciones, obtener mercados de diferentes pares de transacciones, realizar una variedad de mercados y ejecutarlos bajo una lógica estratégica. Como se puede ver, los tres pares de operaciones que definimos: BTC_USDT, LTC_USDT, ETH_USDT, se repiten en el ciclo para obtener mercados, y después de obtener mercados, se puede activar la lógica de negociación diseñada específicamente para la detección de mercados y el desencadenamiento de estrategias.

    Algunos de mis compañeros pueden decir: "No me gusta cambiar de par, me parece un poco complicado, la estrategia no está bien diseñada". En realidad, hay otras formas de diseño, como la siguiente.

  • Configurar varios objetos de intercambio para el mismo bot de la cuenta de intercambio

    Se obtienen datos de mercado de diferentes pares de transacciones a través de varios objetos de intercambio y se ejecutan en la lógica de la estrategia iterativa. Por ejemplo, configure el bot de esta manera: Configure tres objetos de intercambio para el robot, y los pares de transacción se configuran como BTC_USDT, LTC_USDT y ETH_USDT, respectivamente.img

    El nombre del objeto de intercambio es "OKEX Live V3 Test", en el centro de control, en la página de configuración de la bolsa:imgLa configuración está bien.

    Modifique el código, ya que esta vez le hemos añadido a nuestro robot varios objetos de intercambio, respectivamente, objetos de intercambio para BTC_USDT, LTC_USDT, ETH_USDT.

    function Process (e) {
        var ticker = _C(e.GetTicker)
        Log("交易所", e.GetName(), "按照策略逻辑处理交易对 :", e.GetCurrency(), "行情:", ticker)
        // ...
        // ..
        // .
    }  
    
    function main(){
        while (true) {
            for (var i = 0 ; i < exchanges.length; i++) {
                Process(exchanges[i])
                Sleep(500)
            }
        }
    }
    

    El robot está funcionando:img

    Los ejemplos mencionados anteriormente, ya sea para cambiar pares de transacciones o para agregar objetos de intercambio de varios pares de transacciones diferentes a una cuenta de configuración. Todo es solo configurar una cuenta de intercambio (usando una buena configuración de intercambio). Entonces, ¿cómo usar varias cuentas de intercambio en una estrategia?

  • Estrategias para usar varias cuentas de intercambio

    Algunas estrategias incluyen, por ejemplo, el hedge inter-mercado de varios intercambios, la estrategia de múltiples cuentas dentro de un solo intercambio, etc.

    • En la actualidad, la mayoría de los intercambios están configurados, pero son intercambios diferentes.imgPor ejemplo, configuro dos bolsas en el centro de control - > bolsas - > agregar bolsas en la página. En la estrategia, puedo acceder a la información de los activos de las cuentas configuradas en ambas bolsas.

      img

      function main(){
          Log(exchanges[0].GetAccount())    // 打印第一个 交易所对象的账户资产信息,即火币期货 这个交易所的资产信息。
          Log(exchanges[1].GetAccount())    // ... 打印Bit-Z这个交易所的资产信息
      }
      

      Por supuesto, también puedo configurar una segunda o tercera cuenta para un intercambio.

    • La configuración de varios intercambios es la misma.

      Por ejemplo, añadimos una cuenta de futuros de tokens.img

      Como se puede ver, así se configuran las cuentas de las dos bolsas de "futuros de tokens".

      img

      Cuando se crea la política, aparece un objeto de intercambio de futuros de tokens para elegir en la opción "modificar la configuración" del robot.

      img

      Por ejemplo, esto puede hacer que dos cuentas tengan una estrategia de compra y venta (hacia arriba) y una estrategia de compra y venta (hacia abajo).

      En los dos ejemplos anteriores,

      Aquí hay una diferencia entre configurar varios objetos de intercambio en un robot y configurar varios objetos de intercambio en un robot con la misma cuenta de intercambio:

      El ejemplo de "la misma cuenta de intercambio para configurar varios objetos de intercambio para un robot" es similar a un vistazo rápido, pero con una diferencia. La diferencia es que el ejemplo anterior es una configuración de intercambio, es decir:

      img

      Cuando se configuran objetos de intercambio de robots, siempre se utilizan:imgEste es el diseño.

      La transacción es diferente cuando se añade un objeto de intercambio. Si se llama a la función GetAccount, siempre se accede a la información de los activos de la misma cuenta.

      Sin embargo:imgLos dos objetos de los futuros de intercambio de tokens configurados de esta manera, aunque son futuros de tokens, se representan en diferentes cuentas de intercambio.

  • Con una configuración de intercambio hábil, el diseño de estrategias de futuros de monedas digitales es mucho más sencillo.

    A veces, en la estrategia de cobertura de contratos de moneda digital, muchos escenarios requieren que se envíen órdenes simultáneamente para aprovechar oportunidades de negociación instantáneas. Pero debido a que los contratos son diferentes, se requiere cambiar a un contrato correspondiente al momento de obtener el mercado y operar el pedido. Cuando se utiliza la función exchange.Go para ejecutar funciones simultáneas o obtener el mercado, no es rápido debido a problemas de sincronización. Y el diseño de este tipo de contrato de cambio no parece tan sencillo. ¿Hay una mejor manera?

    Por supuesto que hay una manera! Podemos agregar dos objetos de intercambio al robot, como se dijo anteriormente: "Configurar varios objetos de intercambio para el mismo robot con la misma cuenta de intercambio".imgLuego, usa esta configuración de intercambio para agregar un objeto de intercambio. ¡Ese es el momento en el que aparece un cuadro de sugerencias!imgLa configuración de una cuenta de intercambio no permite agregar objetos de intercambio de la misma moneda o par de transacciones.

    ¿Cómo se hace esto? ¿No parece posible que un robot estratégico use dos objetos de intercambio y tenga un código de cuenta de intercambio vinculado a los objetos de intercambio? ¡Todavía hay una solución!

    A continuación, añadimos una configuración de mercado de futuros OKEX en el centro de control - > "Exchange".

    img

    Para configurarlo, haga clic en Guardar.

    img

    Así que tenemos dos configuraciones de intercambio, pero usando la misma información de configuración de API KEY.

    img

    ¿Cuáles son las ventajas de esto? Por supuesto, cuando se trata de escribir estrategias, el diseño es muy simple.

    function main(){
        exchanges[0].SetContractType("quarter")        // 设置第一个添加的交易所对象 当前的合约为季度合约
        exchanges[1].SetContractType("this_week")      // 设置第二个添加的交易所对象,当前的合约为当周合约
        
        while (true) {
            var beginTime = new Date().getTime()       // 记录这次获取行情时起始的时间戳。
            var rA = exchanges[0].Go("GetTicker")      // 创建并发 线程去获取 第一个交易所对象,也就是季度合约的行情数据。
            var rB = exchanges[1].Go("GetTicker")      // 创建并发 线程去获取 第二个交易所对象,也就是当周合约的行情数据。
            
            var tickerA = rA.wait()                    // 并发的两个线程各自执行自己的任务,这里等待获取数据,A 等待时,B任务也在执行。
            var tickerB = rB.wait()                    // 所以这里看似是顺序执行,实际在底层是并发的。只不过获取的时候是顺序先获取A,在获取B。
            var endTime = new Date().getTime()         // 记录并发获取两个合约行情结束时的时间戳。
            
            if (tickerA && tickerB) {                  // 如果获取的数据没有问题,执行以下逻辑。
                var diff = tickerA.Last - tickerB.Last // 计算差价
                $.PlotLine("diff", diff)               // 使用画线类库把差价画在图表上。
                if (diff > 500) {                      // 如果差价大于500, 对冲套利(当然设置500 的差价是比较大的,很少见。)
                    // 对冲
                    rA = exchanges[0].Go("Sell", tickerA.Buy, 1)     // 并发线程创建 季度合约下卖单
                    rB = exchanges[1].Go("Buy", tickerB.Sell, 1)     // 并发线程创建 当周合约下买单
                    
                    var idA = rA.wait()           // 等待 返回下单结果,返回的是订单ID
                    var idB = rB.wait()           // ...
                }
                
                // ...
            }
            
            LogStatus(_D(), "并发获取两个合约行情耗时:", endTime - beginTime, "毫秒。")    // 显示在状态栏上时间,以便知道程序在执行。
            Sleep(500)
        }
    }
    

    La estrategia de diseño de este tipo no se siente muy simple, la idea es muy clara.

    Disco en marcha:img

    Como se puede ver, cada vez que se obtienen dos contratos simultáneamente, solo se tarda alrededor de 50 milisegundos.


Relacionados

Más.

El esfuerzo por cuantificarLa última opción es muy buena.

¿Qué es eso?¡Genial, esto es muy útil!