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

Encomendado por el iceberg (comprado) - Jason

El autor:¿ Qué haces?, Fecha: 2021-04-12 10:00:35
Las etiquetas:PythonMontañas de hielo

1. Propuesta:El primer curso de escritura estratégica fue encargado por Zhu Yixing: En este artículo se hace referencia principalmente a la estrategia de Daeng:https://www.fmz.com/strategy/188435En general, la estrategia no es muy diferente a la de la escuela, pero la escritura es un poco más grosera.

2.前因En el caso de la compra y venta masiva de monedas digitales, el precio de mercado de las monedas que se desean comprar / vender puede verse afectado por el mayor monto de la transacción.El tiradorEn la actualidad, la mayor parte de las ventas se realizan en línea.El plato¿Qué es esto? 1 tirador: eleva el precio, sube el precio de la moneda 2 Discos: Vender monedas directamente, sin importar el precio, lo que hace que caigan. 3 Monedas de comercio: las monedas que se utilizan para el comercio, como el par de operaciones BTC/USDT.BTC es una moneda de intercambio.4 Balance de la moneda de facturación: la moneda de facturación del usuario, por ejemplo, el par de transacciones BTC/USDT.El USDT es una moneda de facturación

La montaña de hielo fue encargada:Operación: se trata de desglosar automáticamente el encargo de un gran pedido enEncargos múltiplesEn la actualidad, el servicio de compra y venta de compras en línea ofrece servicios de compra y venta de compras en línea, así como servicios de compra y venta en línea.Reemplazo automático de la última orden cuando se ha negociado en su totalidad o cuando el precio más reciente se desvía significativamente de la orden actual.Efectos: Reducir el impacto de la compra/venta masiva en el precio del mercado, lo que permite comprar en grandes cantidades.Prevenir el aumento de los costos de sus compras debido a la subida de los precios de los grandes pagosEn el caso de las ventas masivas, se puede comprar.Para evitar que los precios bajos causados por la gran cantidad de pedidos reduzcan sus ganancias de venta.

Los parámetros de datos comparados:1. el precio de la comisión = el precio de compra más reciente 1 X ((1- profundidad de la comisión) 2. Profundidad del encargo en el mercado real = (precio final de la transacción - precio del último encargo) / precio del último encargo 3. Número de compras al azar = número de compras al azar media X ((100 - número de puntos flotantes al azar) % + (número de puntos flotantes al azar X2) % X número de compras al azar media X número al azar 0~1 4. Cantidad disponible = moneda de facturación de la cuenta, cantidad de compras al azar en una sola compra, mínimo de la cantidad total restante de compras 5. Número de compras = cantidad disponible / precio de la comisión 6. Total de las compras restantes = Total de las compras - (moneda de la cuenta inicial - moneda de la cuenta)

Las reglas:1. Se retira automáticamente cuando el precio de la transacción más reciente excede la profundidad de la comisión X2 (indique que la desviación es demasiado grande) 2. Detener el encargo cuando el total de transacciones de la estrategia es igual al número total de encargos 3. el precio de la transacción más reciente es superior al límite máximo. 4. Restitución de la adquisición en el precio más reciente de transacción por debajo del límite máximo.

Los principales parámetros:1. El importe de las compras 2. Número de compras realizadas 3. Profundidad de la comisión 4. El precio más alto 5. Intervalos de consulta de precios 6. Número de compras de una sola vez 7. El volumen mínimo de operaciones

¿Qué es lo que está pasando?1. Obtener todos los pedidos pendientes y cancelarlos 2. Obtener el saldo de la cuenta inicial para determinar si es mayor que el total de las compras 3. Calcular el precio del encargo 4. Cálcule el número de compras únicas 5. Calcular el monto disponible 6. Calcular el número de compras 7. Ejecutar las compras 8. Tiempo de descanso 9. Juzgar si el último pedido fue un éxito 10. Logos exportados con éxito 11. Fracaso en determinar si el desvío es demasiado grande y si es demasiado grande para ser revocado

Sugerencias1. Se recomienda usar el ETH_USDT para la retrospección

La estrategia no es perfecta, los ladrones que quieren pasar apuntan uno o dos.


import random


def main():
    # 获取账户所有未成交订单
    Log("取消所有未成交订单")
    orders = _C(exchange.GetOrders)
    if len(orders) > 0:
        for i in range(len(orders)):
            exchange.CancelOrder(orders[i]["Id"])
            Sleep(priceInterval*1000)

    # 对比账户余额
    Log("获取用户初始化账户")
    initAccount = _C(exchange.GetAccount)
    if initAccount["Balance"] < buyAmount:
        Log("账户余额不足")
        return
    
    #比较单笔购买数量均值*市场买一价是否大于账户余额
    ticker = _C(exchange.GetTicker)
    if (ticker['Last'] * buyNum) > initAccount['Balance']:
        Log("单次购买均值价格大于账户余额,请调整参数")
        return

    lastBuyPrice = 0

    while (True):
        Sleep(priceInterval*1000)
        #获取账户信息
        account = _C(exchange.GetAccount)
        #获取当下行情
        ticker = _C(exchange.GetTicker)
        # 上次购买价格不为空,查看订单是否完成,没有完成则取消
        if lastBuyPrice > 0:
            orders1 = exchange.GetOrders()
            if len(orders1) > 0:
                for j in range(len(orders1)):
                    #计算实际市场委托深度
                    if ticker["Last"] > lastBuyPrice and ((ticker["Last"] - lastBuyPrice)/lastBuyPrice) > (2* (depthStatus/100)):
                        Log("委托价格偏离过多,最新成交价:",ticker["Last"],"委托价",lastBuyPrice)
                        exchange.CancelOrder(orders1[j]["Id"])
                        lastBuyPrice = 0
                continue
            else:
                Log("买单完成, 累计花费:", _N(initAccount["Balance"] - account["Balance"]), "平均买入价:", _N((initAccount["Balance"] - account["Balance"]) / (account["Stocks"] - initAccount["Stocks"])))
                lastBuyPrice = 0
                continue     
        else:
            Log("剩余余额:",account["Balance"])
            #委托价格 = 最新买一价*(1-委托深度/100)
            entrustPrice = _N(ticker["Buy"]*(1-depthStatus/100))
            Log("委托价格:",entrustPrice)
            #判断委托价格是否大于最高价格限定
            if entrustPrice > highPrice:
                continue
            #随机购买数量 = 单次购买数量均值 * ((100-单次均值浮点数)/100)+(单次均值浮点数*2 /100* 单次购买数量均值 *随机数0~1)  
            randomBuyNum = (buyNum*((100-buyOncePoint)/100))+(buyOncePoint*2/100 *buyNum*random.random())
            #可用数量金额 
            useMoney = min(account["Balance"],randomBuyNum,buyAmount - (initAccount["Balance"] - account["Balance"]))
            #购买数量
            orderBuyNum = _N(useMoney/entrustPrice)
            Log("交易数量:",orderBuyNum)
            #判断是否小于最小交易量
            if orderBuyNum < minBuyNum:
                break
            #因为要扣手续费,所以大概为账户99.7%
            if (entrustPrice*orderBuyNum)>(account["Balance"]*0.997):
                Log("金额为",(entrustPrice*orderBuyNum))
                Log("账户余额为",(account["Balance"]))
                continue
            #更新上次购买价格
            lastBuyPrice = entrustPrice
            #下单
            exchange.Buy(entrustPrice,orderBuyNum)
            
    account = _C(exchange.GetAccount)  
    Log("冰山委托买单完成,共计花费:",_N(initAccount["Balance"]-account["Balance"]),"平均单价为:",_N((initAccount["Balance"]-account["Balance"])/(account["Stocks"]-initAccount["Stocks"])))        


Contenido relacionado

Más contenido