O iceberg foi encomendado (e comprado) por Jason

Autora:Jason_MJ, Data: 2021-04-12 10:00:35
Tags:PythonIceberg

1. Pré-requisitos:A primeira vez que aprendi a escrever estratégias, fui contratado por Ice Mountain: O artigo refere-se principalmente à estratégia de Daeng:https://www.fmz.com/strategy/188435Em geral, a estratégia não é muito diferente da da Big Bang, mas a escrita é um pouco mais grosseira.

2.前因Quando se compra e vende moedas digitais em grande quantidade, o preço de mercado das moedas que se deseja comprar / vender pode ser afetado pelo grande volume de transações.Tire o discoO que é que você está a fazer?Discos de barroNão, não é. 1o Disco: puxa o preço, eleva o preço da moeda 2 - A venda direta de moedas, independentemente do preço, faz com que o preço caia 3 Moedas de negociação: Moedas usadas para negociação, como o par de negociação BTC/USDT,BTC é uma moeda de troca.4 Balance de moeda de preço: moeda de preço do usuário, por exemplo, em um par de transações BTC/USDT.O USDT é uma moeda de preço

O iceberg foi encarregado de:Operação: consiste em subdividir automaticamente a encomenda de uma grande encomendaComissõesA partir de agora, o cliente pode fazer pedidos automáticos com base no preço de compra/venda mais recente e na estratégia de preços definida pelo cliente.Reencaminhamento automático de uma encomenda quando a encomenda anterior é totalmente negociada ou quando o preço mais recente se desvia significativamente da actual.Efeito: reduzir o impacto do pedido de compra/venda em grande quantidade no preço do mercado, permitindo a compra em grande quantidade.Prevenção de aumentar o seu próprio custo de compra por causa do aumento do preço de um grande pagamentoA maioria das pessoas não sabe o que fazer.Prevenção da redução do lucro da sua venda por causa de um grande volume de encomendas causando preços baixos

Contraste de parâmetros de dados:

  1. Preço de encomenda = 1 preço de compra mais recente X ((1- profundidade de encomenda)
  2. Profundidade de encomenda de mercado real = (preço final da transação - preço da última encomenda) / preço da última encomenda
  3. Número de compras individuais aleatórias = Número de compras individuais média X ((100 - número de pontos flutuantes individuais) % + (número de pontos flutuantes individuais X2) % X Número de compras individuais média X Número aleatório de 0 a 1
  4. A quantidade disponível = moeda de cobrança da conta, quantidade de compras aleatórias em uma única compra, o mínimo de quantidade total de compras restantes
  5. Quantidade de compras = quantidade disponível/preço da encomenda
  6. Total de compras restantes = Total de compras - ((Curso de contabilização inicial - Curso de contabilização)

Regras:

  1. Auto-retirada quando o preço da transação mais recente excede a profundidade da encomenda X2 (indica que o desvio é muito grande)
  2. Parar a encomenda quando o total de transações da estratégia for igual ao total de encomendas
  3. Preço de transação mais recente acima do limite máximo de compra preço de suspensão de encomendas
  4. Recomendação de retomada de preços de compra abaixo do limite máximo no último preço de transação

Os principais parâmetros:

  1. O valor da compra
  2. Quantidade de compras individuais
  3. Encomenda de profundidade
  4. Preço mais alto
  5. Intervalo de consulta de preços
  6. Número de compras médias de pontos flutuantes
  7. Menor volume de transações

O que é isso?

  1. Obter todos os pedidos pendentes e cancelar os pedidos
  2. Obter o saldo da conta de inicialização para determinar se é maior do que o valor total da compra
  3. Cálculo do preço da encomenda
  4. Calcular o número de compras únicas
  5. Cálculo de quantidade disponível
  6. Calcular o número de compras
  7. Execução de compras
  8. Horário de descanso
  9. Julgar se a última encomenda foi bem sucedida
  10. Exportar logs com sucesso
  11. A decisão de não determinar se o desvio é grande demais e se é grande demais precisa ser revogada

Sugestões

  1. Recomenda-se a reavaliação com ETH_USDT

A estratégia não é perfeita e os ladrões que querem passar apontam para um ou dois.


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"])))        


Relacionados

Mais.