Robot estratégico de alta frecuencia de Bitcoin en 2014

El autor:Las hierbas, Fecha: 21-10-2014 22:58:44
Las etiquetas:De alta frecuencia

Introducción a las estrategias

La estrategia para compartir la dirección:https://www.fmz.com/strategy/1088Esta estrategia es mi principal estrategia desde que hice la moneda virtual, después de ser perfeccionada y modificada continuamente, se ha complicado mucho, pero la idea principal no ha cambiado. Esta versión que comparto es la versión original sin errores evidentes, la más simple y clara, sin administración de posiciones, cada operación está llena, sin reinicio de tarjetas muertas, etc., pero también es suficiente para explicar el problema. La estrategia funcionó desde agosto de 2014 hasta que el mercado cobró las tarifas de transacción a principios de este año.El blog Sina de la hierba pequeñaEn elEl camino hacia la automatización de las transacciones de moneda virtualEn la serie de artículos.

Por qué compartir esta estrategia

1. los intercambios han matado a casi todas las estrategias de alta frecuencia después de cobrar las tarifas, y yo no soy la excepción. 2. Hace tiempo que no comparto nada, este artículo es lo que quería escribir. 3. Compartir y aprender con todos.

Principios de la estrategia

Este principio de estrategia es extremadamente simple, puede ser entendido como una estrategia de mercado de casi alta frecuencia, después de ver que usted puede querer golpear a alguien, que puede ganar dinero, entonces casi todo el mundo puede escribir. No esperaba que fuera tan eficaz, por lo que parece que hay una idea en la mente para poner en práctica rápidamente, no hay que tener sorpresas. Como todas las estrategias de alta frecuencia, esta estrategia está basada en el libro de órdenes, y el siguiente gráfico es una distribución de órdenes de un intercambio de Bitcoin típico.imgSe puede ver a la izquierda el pago, que muestra el número de pedidos colgados de diferentes precios, y a la derecha el pago. Se puede imaginar que si una persona quiere comprar Bitcoin, si no quiere esperar el pago, solo puede elegir comer el pago, si tiene un número mayor de unidades, esto hará que se realicen una gran cantidad de transacciones de pedidos de venta, causando un impacto en el precio, pero este impacto generalmente continúa, y alguien no quiere comer el pago, el precio probablemente se recuperará en muy poco tiempo, y a la inversa, alguien entiende que vender monedas es similar. Por ejemplo, en el gráfico, si se compra directamente 5 monedas, el precio se eleva a 10.377, mientras que si se vende directamente 5 monedas, el precio se eleva a 10.348, el espacio es el espacio de ganancia. La estrategia se eleva a un precio ligeramente inferior a 10.377, como 10.376.99, y se compra a un precio ligeramente superior a 10.348, como 10.348.01, lo que obviamente da lugar a una diferencia si ocurre lo que acaba de suceder. Para explicar las operaciones concretas con los parámetros de la estrategia ahora, este parámetro, por supuesto, no se puede utilizar, sólo como una explicación. Buscará un precio de venta acumulado de 8 monedas, aquí es 10377, por lo que el precio de venta en este momento es este precio menos 0.01 (menos cuánto puede ser aleatorio), de la misma manera, buscará un precio de compra acumulado de 8 monedas, aquí es 10348, por lo que el precio de venta en este momento es 10348.01, por lo que la diferencia del precio de venta es 10376.99-10348.01 = 28.98, mayor que el precio previsto por la estrategia de 1.5, para que si los dos precios de venta se entregan, el precio es menor que 1.5, también se busque un precio para suspender el pedido, como el precio de venta de 10, más el precio de espera de 10.

Más información

  1. ¿Qué hacer sin dinero o monedas? Esta situación es muy común cuando tengo menos dinero, y la mayoría de las veces solo hay una sola cuenta colgada, pero no es un gran problema. De hecho, se puede incorporar la lógica del equilibrio monetario, pero en el proceso de equilibrio inevitablemente hay pérdidas, después de todo, cada transacción es un espejismo de probabilidad, y opto por mantenerme unilateral esperando la transacción, por supuesto, también desperdiciando la oportunidad de transacción del otro lado.
  2. ¿Cómo se gestiona el puesto? Al principio, se compran y se venden en grandes cantidades, y luego se dividen en diferentes grupos según diferentes parámetros, no se completan completamente a la vez.
  3. ¿No hay una parada? La estrategia tiene toda la lógica de un listado de compras y ventas, creo que no hay necesidad de un stop loss (puede ser discutido), y también hay una especulación de probabilidades, la transacción es una oportunidad, el stop loss es lamentable.
  4. ¿Cómo adaptar la estrategia a las monedas? Los parámetros son simétricos, es decir, la venta acumulada de 8 monedas arriba y la pago acumulado de 8 monedas abajo, un poco desequilibrado, por ejemplo, la venta acumulada de 15 monedas arriba, hace que sea más difícil vender monedas, hay una mayor probabilidad de que vuelva a un precio más bajo, así que la moneda se quita y, a su vez, gana dinero.

Descripción del código

El código completo se puede ver en www.fmz.com, donde solo se explica la función lógica central. Sin cambios, el disco de botvs funciona perfectamente, una estrategia que fue desarrollada hace más de 3 años y que la plataforma sigue apoyando. La primera es obtener la función GetPrice, que requiere obtener información sobre la profundidad de la orden, tener en cuenta que la profundidad de la información de la orden varía en la longitud de las diferentes plataformas, y que incluso después de recorrer todos los pedidos todavía no hay la cantidad requerida.

function GetPrice(Type) {
   //_C()是平台的容错函数
    var depth=_C(exchange.GetDepth);
    var amountBids=0;
    var amountAsks=0;
    //计算买价,获取累计深度达到预设的价格
    if(Type=="Buy"){
       for(var i=0;i<20;i++){
           amountBids+=depth.Bids[i].Amount;
           //参数floatamountbuy是预设的累计深度
           if (amountBids>floatamountbuy){
               //稍微加0.01,使得订单排在前面
              return depth.Bids[i].Price+0.01;}
        }
    }
    //同理计算卖价
    if(Type=="Sell"){
       for(var j=0; j<20; j++){
    	   amountAsks+=depth.Asks[j].Amount;
            if (amountAsks>floatamountsell){
            return depth.Asks[j].Price-0.01;}
        }
    }
    //遍历了全部深度仍未满足需求,就返回一个价格,以免出现bug
    return depth.Asks[0].Price
}

La función principal de cada ciclo es onTick (), donde el tiempo de ciclo determinado es de 3.5 s, y cada ciclo anula y vuelve a enumerar los elementos originales, por lo que es más fácil evitar errores.

function onTick() {
    var buyPrice = GetPrice("Buy");
    var sellPrice= GetPrice("Sell");
    //diffprice是预设差价,买卖价差如果小于预设差价,就会挂一个相对更深的价格
    if ((sellPrice - buyPrice) <= diffprice){
            buyPrice-=10;
            sellPrice+=10;}
    //把原有的单子全部撤销,实际上经常出现新的价格和已挂单价格相同的情况,此时不需要撤销
    CancelPendingOrders() 
    //获取账户信息,确定目前账户存在多少钱和多少币
    var account=_C(exchange.GetAccount);
    //可买的比特币量,_N()是平台的精度函数
    var amountBuy = _N((account.Balance / buyPrice-0.1),2); 
    //可卖的比特币量,注意到没有仓位的限制,有多少就买卖多少,因为我当时的钱很少
    var amountSell = _N((account.Stocks),2); 
    if (amountSell > 0.02) {
        exchange.Sell(sellPrice,amountSell);}
    if (amountBuy > 0.02) {
        exchange.Buy(buyPrice, amountBuy);}
    //休眠,进入下一轮循环
    Sleep(sleeptime);
}

La cola

Todo el proceso también tiene más de 40 líneas, parece muy simple, pero en ese momento también me tomó más de una semana, esto es en el caso de la plataforma botvs. La mayor ventaja es que comenzó temprano, en 2014, el mercado está dominado por el movimiento, la red y la alta frecuencia de los despliegues no son muchos, lo que hace que la estrategia sea como el agua, luego la competencia es inevitablemente cada vez más intensa, mi dinero también es cada vez más, los desafíos que enfrento son muchos, hay que hacer cambios más grandes cada cierto tiempo para hacer frente, pero en general, también es bien. Sin embargo, hay mucho espacio para una estrategia de cuantificación que no requiera altas frecuencias.


/*
就是我刚开始编写机器人的源代码,几乎没有改动,参数也是原来的参数。这个版本的程序有许多
需要改进的地方,但即使如此,它也当时表现除了惊人的盈利能力,在我本金不多时,不加杠杆平
均每天盈利在5%左右。当然无论从哪一方面,它都不适应今天的市场。
我同时也发了一篇文章在社区,大家可以看看。
by 小草
*/

//稍微改了一下,用了平台的容错函数_C(),和精度函数_N().
//取消全部订单
function CancelPendingOrders() {
    var orders = _C(exchange.GetOrders);
    for (var j = 0; j < orders.length; j++) {
          exchange.CancelOrder(orders[j].Id, orders[j]);}
}

//计算将要下单的价格
function GetPrice(Type,depth) {
    var amountBids=0;
    var amountAsks=0;
    //计算买价,获取累计深度达到预设的价格
    if(Type=="Buy"){
       for(var i=0;i<20;i++){
           amountBids+=depth.Bids[i].Amount;
           //floatamountbuy就是预设的累计买单深度
           if (amountBids>floatamountbuy){
               //稍微加0.01,使得订单排在前面
              return depth.Bids[i].Price+0.01;}
        }
    }
    //同理计算卖价
    if(Type=="Sell"){
       for(var j=0; j<20; j++){
    	   amountAsks+=depth.Asks[j].Amount;
            if (amountAsks>floatamountsell){
            return depth.Asks[j].Price-0.01;}
        }
    }
    //遍历了全部深度仍未满足需求,就返回一个价格,以免出现bug
    return depth.Asks[0].Price
}
 
function onTick() {
    var depth=_C(exchange.GetDepth);
    var buyPrice = GetPrice("Buy",depth);
    var sellPrice= GetPrice("Sell",depth);
    //买卖价差如果小于预设值diffprice,就会挂一个相对更深的价格
    if ((sellPrice - buyPrice) <= diffprice){
            buyPrice-=10;
            sellPrice+=10;}
    //把原有的单子全部撤销,实际上经常出现新的价格和已挂单价格相同的情况,此时不需要撤销
    CancelPendingOrders() 
    //获取账户信息,确定目前账户存在多少钱和多少币
    var account=_C(exchange.GetAccount);
    //可买的比特币量
    var amountBuy = _N((account.Balance / buyPrice-0.1),2); 
    //可卖的比特币量,注意到没有仓位的限制,有多少就买卖多少,因为我当时的钱很少
    var amountSell = _N((account.Stocks),2); 
    if (amountSell > 0.02) {
        exchange.Sell(sellPrice,amountSell);}
    if (amountBuy > 0.02) {
        exchange.Buy(buyPrice, amountBuy);}
    //休眠,进入下一轮循环
    Sleep(sleeptime);
}
    
function main() {
    while (true) {
        onTick();
    }
}

Relacionados

Más.

el guohwa¿Es una estrategia al contado? Ahora parece que algunas bolsas de valores están libres de pagos, ¿puede hacerse algo?

a624587332Si el Bitcoin está libre de transacciones en BTC, ¿se puede hacer otra vez?

¿Qué quieres decir con eso?¿Una transacción unilateral? He visto en el programa que después de comprar no se vende el código, después de vender no se compra.

el tiempo¿Por qué no funciona ahora? ¿Qué estrategias pueden ser útiles ahora?

¿Qué es eso?¿Qué es lo que está pasando?

- ¿ Qué?Muchas gracias por compartirlo, me ha ayudado mucho. Esperamos más intercambios de ideas tan profundos. ¡Gracias gracias!

LogaNo lo hagas.