아이스크림 위탁 (구매) - 제이슨

저자:제이슨 MJ, 날짜: 2021-04-12 10:00:35
태그:파이썬빙산

1. 전제:이 글은 이글산의 첫 번째 전략 학습입니다. 이 글은 대의 전략에 대한 언급을 주로 하고 있습니다:https://www.fmz.com/strategy/188435대담한 전략과 크게 다르지 않고, 글쓰기가 좀 더 거칠다.

2.前因대량 거래 시 거래 금액이 크기 때문에 구매/판매하려는 통화 시장 가격에 영향을 미칠 수 있습니다. 유동성이 낮은 디지털 통화에는 더 큰 지불이 가능합니다.추기그리고 그 다음에는접시ᅳ 1부: 가격을 끌어올리고 동전을 올립니다. 2 판: 가격에 상관없이 동전을 직접 팔아서 동전이 떨어집니다. 3 거래 화폐 주식: 거래에 사용되는 화폐, BTC/USDT 거래 쌍을 예로 들 수 있습니다.BTC는 거래 통화입니다.4 화폐 밸런스: BTC/USDT 거래 쌍을 예로 들어서 사용자가 화폐를 화폐로 하는 경우USDT는 요금화폐입니다.

아이스만 위탁:작업: 큰 주문을 자동으로 분할합니다.여러 위탁현재 최신 구매/판매 가격과 고객이 설정한 가격 전략에 따라 자동으로 소액 주문을 합니다.이전 위탁이 전체 거래 또는 최신 가격으로 현 위탁에서 크게 벗어난 경우 자동으로 다시 위탁합니다.효과: 대용량 구매/판매 주문이 시장 가격에 미치는 영향을 줄이고 대용량 구매를 할 때대가 지불으로 인해 가격 상승으로 인해 자신의 구매 비용을 높이는 것을 방지합니다.그리고 그 다음에는, "이것이 정말 좋은 방법입니다".많은 판매 주문으로 인해 낮은 가격으로 판매 수익을 줄이는 것을 방지합니다.

데이터 매개 변수 비교:

  1. 위탁 가격=최근 구매한 가격 1 X ((1-위탁 깊이)
  2. 실제 시장 위탁 깊이 = (결정 거래 가격 - 마지막 위탁 가격) / 마지막 위탁 가격
  3. 무작위 한 번의 구매 수 = 한 번의 구매 수의 평균 X ((100 - 한 번의 평균 플로팅 포인트 수) % + (한 번의 평균 플로팅 포인트 수 X2) % X 한 번의 구매 수의 평균 X 무작위 수 0 ~ 1
  4. 사용 가능한 금액 = 계정화폐, 무작위 한 번의 구매량, 잔여 총액 최소화
  5. 구매량 = 사용 가능한 금액 / 위탁 가격
  6. 매입 잔액 총액= 매입 총액- (초기 계정화폐-계정화폐)

규칙:

  1. 최신 거래 가격이 위탁으로부터 위탁 깊이 X2를 초과하면 자동 취소 (거리가 너무 크다는 것을 표시)
  2. 전략 전체 거래가 전체 위탁 수와 같을 때 위탁을 중지합니다.
  3. 최신 거래 가격은 최고 한계 구매 가격 중지 위탁
  4. 최신 거래 가격에서 최대 한계 구매 가격 아래에서 다시 주문

주요 매개 변수:

  1. 구매 금액
  2. 구매량
  3. 위탁 깊이
  4. 가장 높은 가격
  5. 가격 조회 간격
  6. 한 번에 구매한 매출의 평균 플로팅 포인트
  7. 최소 거래량

"이봐요, 이봐요.

  1. 모든 미수 주문을 받아 주문을 취소합니다.
  2. 초기화 계좌 잔액을 확보하고 전체 구매 금액보다 더 많은지 판단합니다.
  3. 위탁 가격을 계산합니다.
  4. 한 번의 구매를 계산합니다.
  5. 사용 가능한 금액을 계산합니다.
  6. 구매량 계산
  7. 구매를 실행
  8. 정해진 휴식시간
  9. 마지막 주문이 성공적 인지를 판단합니다
  10. 로그 출력 성공
  11. 부적절한 오차가 너무 크거나 너무 크면 취소해야하는지 판단하는 데 실패합니다.

추천

  1. ETH_USDT로 재검토하는 것이 좋습니다.

전략이 완벽하지 않아 지나가기를 바라는 개구리들은 1~2점을 가리키고 있습니다.


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


관련

더 많은