【问题标题】:How can I limit python script to 1 API trade per day?如何将 python 脚本限制为每天 1 次 API 交易?
【发布时间】:2018-10-12 02:37:07
【问题描述】:

我正在编写一个 python 脚本来使用 API 在 poloniex 上进行交易,到目前为止,我已经可以在满足某些条件时进行交易,但我仍然需要它不再为其余的交易进行交易那天(我让整个脚本每 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: 中使用它以确保它不会放置另一个?

【问题讨论】:

  • main() 在哪里?此代码不起作用。请生成MCVE
  • main() 在代码中更进一步。我只提供了需要帮助的部分代码。
  • 请阅读我提供的链接。超级重要。谢谢。
  • 我已经编辑并包含了完整的脚本。
  • 当然,我已经用多个 X 替换了我的 api 密钥和秘密。

标签: python json api cryptocurrency poloniex


【解决方案1】:

也许你可以用Python来获取日期,并创建一个全局变量,在print语句之后,你可以将变量设置为当前日期,咖啡会检查它是否已经发送,这样它一天执行不超过一次。

import datetime
# This Gets The Day Of The Month
todaysDateNumber = int(datetime.datetime.now().strftime("%d"))
dateNumberTradeSent = 0
if todaysDateNumber == dateNumberTradeSent:
    print("The API has already been used once today, try again tomorrow!")
    return
else:
    # Call Your Trade Sending Code Here
    # After The Print Statement That Shows That The Trade Was Sent:
    global dateNumberTradeSent
    dateNumberTradeSent = int(datetime.datetime.now().strftime("%d"))

【讨论】:

  • 也许可以,但是有没有办法使用 poloniex 服务器时间来代替?因为那是我需要它过去的时候。我不希望它进行第二次交易,直到它恰好到达午夜 poloniex 服务器时间。这可能会提供所需的内容:poloniex.com/support/api/#rest_public
  • 为了让事情更容易理解,我用完整的脚本更新了这个问题。
猜你喜欢
  • 2019-07-31
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多