Как я могу заставить этот скрипт Python добавить ограничение для сделок, совершаемых с помощью API?

1

Я собираю скрипт python для совершения сделок с poloniex с API, и до сих пор у меня есть возможность совершать сделки, когда выполняются определенные условия, но мне все еще нужно, чтобы они не размещали больше сделок до конца этого дня (У меня есть весь цикл цикла каждые 60 секунд).

Пока у меня есть этот скрипт:

import requests
import urllib.request
import urllib.parse
import http.client
import hashlib
import hmac
import time
import json
from urllib.request import urlopen

The_Currency_Pair = input('Which Currency Pair?\nPAIRS TO CHOOSE FROM:\nUSDT_BTC\nUSDT_XRP\nUSDT_ETH\nUSDT_BCH\nUSDT_STR\nUSDT_LTC\nUSDT_ETC\nUSDT_XMR\n')


api = 'https://poloniex.com/tradingApi'
key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
secret = 'XXXXXXXXXXXXXXXXXXXXXXXXX'


def main():
    poloniexPrices = urlopen('https://poloniex.com/public?command=returnTicker').read()
    poloniexjson = json.loads(poloniexPrices)
    poloniexlastP = poloniexjson[The_Currency_Pair]['last']


    poloniexOCHL = urlopen('https://poloniex.com/public?command=returnChartData&currencyPair=USDT_BCH&start=1538352000&period=86400').read()
    poloniexOCHLjson = json.loads(poloniexOCHL)
    poloniexlasthigh = poloniexOCHLjson[-2]['high']


    print ('Last Price')
    print (poloniexlastP)
    print ('----------------------------------------')
    print ('Last Day High')
    print (poloniexlasthigh)
    print ('----------------------------------------')



    data = {
        'command': 'returnBalances',
        'nonce'  : int(time.time() * 1000)
    }
    data = urllib.parse.urlencode(data).encode()

    signature = hmac.new(secret.encode(), data, hashlib.sha512)

    headers = {
        'Key' : key,
        'Sign': signature.hexdigest()
    }

    request = urllib.request.Request(
        url=api, data=data, headers=headers, method='POST'
    )

    text = urllib.request.urlopen(request).read().decode()

    print ('MY ACCOUNT BALANCE')
    try:
        print(json.loads(text)['USDT'])
    except:
        print(text)
    print ('-----------------------------------------')



    if float(poloniexlastP) > 0:
        print ('PLACING TRADE')
        print ('-----------------------------------------------')

        parms = {"command":"buy",
             "currencyPair":The_Currency_Pair,
             "rate":100,
             "immediateOrCancel":1,
             "amount":0.01,
             "nonce":int(time.time() * 1000)}

        parms = urllib.parse.urlencode(parms).encode()

        signature = hmac.new(secret.encode(), parms, hashlib.sha512)

        headers = {'Key' : key,
                   'Sign': signature.hexdigest()}

        request = urllib.request.Request(
        url=api, data=parms, headers=headers, method='POST')

        text = urllib.request.urlopen(request).read().decode()

        ordernumber = (json.loads(text)['orderNumber'])

        print ('Order Number:')
        print (ordernumber)




while True:
    main()
    time.sleep(60)

Во всяком случае, после того, как была помещена торговля, мне нужно, чтобы после 60 секундного сна она не совершала вторую сделку, если это не новый день/на следующий день после совершения сделки. (Могу ли я использовать время сервера poloniex для этого?)

Итак, если он добрался до print (ordernumber) что означает, что он разместил сделку. Но как я могу пометить его как помещенную сделку на день или что-то еще и использовать ее в if float(poloniexlastP) > 0: для следующего цикла, чтобы убедиться, что он не помещает другой?

Теги:
python-3.x
poloniex

2 ответа

0

Вероятно, вы хотите сбросить какой-либо флаг. Возможно, что-то вроде этого:

        print ('Order Number:')
        print (ordernumber)
        return True # You've made a trade
    return False # You've didn't make a trade


have_traded = False
while True:
    if not have_traded:
        have_traded = main()
        time.sleep(60)

    if new_date_function():
        have_traded = False
0

Если вы используете сервер приложений, такой как Flask, вы можете легко настроить ограничитель

from flask_limiter import Limiter

app = Flask(__name__)
limiter = Limiter(app, global_limits=["100 per hour", "20 per minute"])

и затем вы можете украсить каждую конечную точку определенным ограничителем:

@app.route("/slow")
@limiter.limit("1 per day")
def slow():
    return "24"

@app.route("/fast")
def fast():
    return "42"

@app.route("/ping")
@limiter.exempt
def ping():
    return 'PONG'

Подробнее здесь: https://github.com/alisaifee/flask-limiter

Ещё вопросы

Сообщество Overcoder
Наверх
Меню