Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将python脚本限制为每天1次API交易?_Python_Json_Api_Cryptocurrency_Poloniex - Fatal编程技术网

如何将python脚本限制为每天1次API交易?

如何将python脚本限制为每天1次API交易?,python,json,api,cryptocurrency,poloniex,Python,Json,Api,Cryptocurrency,Poloniex,我正在编写一个python脚本,用API在poloniex上进行交易,到目前为止,我已经让它在满足某些条件时进行交易,但我仍然需要它在那天剩下的时间里不再进行交易(我让整个脚本每60秒循环一次) 到目前为止,我有以下脚本: import requests import urllib.request import urllib.parse import http.client import hashlib import hmac import time import json from urlli

我正在编写一个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服务器时间来做这个吗?)


因此,如果它已经达到了打印(订单号)的程度,这意味着它已经进行了交易。但是我如何将它标记为当天的已放置交易或其他东西,并在下一个循环的
if float(poloniexlastP)>0:
中使用它,以确保它不会放置另一个循环?

也许您可以使用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"))

哪里是
main()
?此代码不起作用。请生成一个main(),这是进一步向上的代码。我只提供了需要帮助的部分代码。请阅读我提供的链接。非常重要。谢谢。我已经编辑并包含了完整的脚本。当然,我已经用多个X替换了我的api密钥和密码。也许,但是有没有办法改用poloniex服务器时间呢?因为那是我需要的时间。我不想让它进行第二次交易,直到它正好达到午夜poloniex服务器时间。这可能提供了需要的东西:为了让事情更容易理解,我用完整的脚本更新了这个问题。