Je ne suis pas d'accord avec cette idée.

Auteur:Jason_MJ est là., Date: 12 avril 2021 à 10h35
Les étiquettes:PythonUn iceberg

1. Prémisse:Pour commencer à apprendre à écrire des stratégies, nous avons commandé: L'article se réfère principalement à la stratégie de Daeng:https://www.fmz.com/strategy/188435En général, les stratégies ne sont pas très différentes de celles de Daegu, mais l'écriture est plus grossière.

2.前因Lors de l'achat et de la vente de crypto-monnaies en vrac, il est possible que le prix du marché de la monnaie que vous souhaitez acheter/vendre soit affecté par un montant de transaction plus élevé.Le tirageJe ne peux pas vous demander de vendre.Le disqueJe ne sais pas. Le tirage au sort: augmenter le prix, augmenter le prix de la monnaie 2 - Le panier: la vente directe des pièces, peu importe le prix, fait baisser le prix. 3 monnaie de trading Stocks: les devises utilisées pour le trading, par exemple les paires de transactions BTC/USDT.BTC est une monnaie de transaction.4 Balance de devises: les devises cotées par l'utilisateur, par exemple les paires de transactions BTC/USDT, et les devises utilisées par les utilisateurs.L'USDT est une monnaie à prix.

Il y a aussi une autre photo de l'homme.L'opération consiste à décomposer automatiquement les commandes enPlusieurs mandatsLes commandes sont effectuées automatiquement en fonction des prix actuels d'achat/vente et des stratégies de prix définies par le client.Retour automatique des commandes si la dernière commande a été entièrement négociée ou si le prix le plus récent s'est nettement éloigné de la commande en coursEffect: Réduire l'impact des ordres de vente/achat en gros sur les prix du marché, et permettre aux acheteurs en gros d'acheter plus facilement.Pour éviter d'augmenter les coûts de vos achats en raison d'une augmentation des prix due à des paiements importantsIl y a aussi des produits qui sont vendus en gros.Prévenir la réduction de vos bénéfices de vente en raison de la réduction des prix des commandes en gros

Les paramètres de données sont comparés:

  1. Le prix d'achat = le dernier achat à 1 prix X ((1- profondeur de l'achat)
  2. La profondeur d'engagement du marché réel = (prix de transaction final - prix d'engagement précédent) / prix d'engagement précédent
  3. Le nombre de achats uniques aléatoires = le nombre moyen de achats uniques X ((100 - nombre de points flottants uniques) % + (nombre de points flottants uniques X2) % X Le nombre moyen de achats uniques X Le nombre aléatoire 0 à 1
  4. Le montant disponible = la devise de prise de compte, le nombre aléatoire d'achats à la fois, le minimum du montant total restant à acheter
  5. Nombre d'achats = montant disponible / prix de commande
  6. Total des achats restants = Total des achats - ((monnaie de mise sur le compte initial - monnaie de mise sur le compte)

Les règles:

  1. Retrait automatique lorsque le prix de la transaction la plus récente dépasse la profondeur de la commande X2 (indique une écartation trop grande)
  2. Arrêtez le mandat lorsque le total des transactions de la stratégie est égal au nombre total de mandats
  3. Le prix de la dernière transaction est supérieur à la limite maximale de prix d'achat
  4. Retour des commandes au prix de transaction le plus récent inférieur à la limite maximale de prix d'achat

Les principaux paramètres:

  1. Le montant à acheter
  2. Nombre d'achats effectués
  3. La profondeur de la mission
  4. Le prix le plus élevé
  5. Intervalle de demande de prix
  6. Nombre moyen de points flottants pour un achat unique
  7. Moins de transactions effectuées

Je me suis dit:

  1. Obtenez toutes les commandes en suspens et les annuler
  2. Obtenir le solde du compte d'initialisation pour déterminer si le montant total des achats est supérieur
  3. Calculer le prix de la commande
  4. Calculer le nombre d'achats
  5. Calculer le montant disponible
  6. Calculer le nombre d'achats
  7. Exécution des achats
  8. Temps de repos
  9. Déterminez si votre dernière commande a été un succès
  10. Exportation réussie du journal
  11. L'échec à déterminer si l'écart est trop grand, trop grand pour être annulé

Des conseils

  1. Il est recommandé d'utiliser ETH_USDT

La stratégie n'est pas parfaite, les tortues qui veulent passer montrent un ou deux.


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


Relationnée

Plus de