पायथन का उपयोग करके एक मात्रात्मक ट्रेडिंग रोबोट टाइम्ड स्टार्ट या स्टॉप गैजेट लागू करें

लेखक:लिडिया, बनाया गयाः 2022-12-20 14:35:09, अद्यतन किया गयाः 2023-09-20 10:21:21

img

पायथन का उपयोग करके एक मात्रात्मक ट्रेडिंग रोबोट टाइम्ड स्टार्ट या स्टॉप गैजेट लागू करें

पूरे नेटवर्क के लिए एक शक्तिशाली, लचीला और उपयोग करने में आसान मात्रात्मक ट्रेडिंग प्लेटफॉर्म के रूप में, एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म का उपयोग करने के लिए बहुत कम बाधाएं हैं, और रोबोट प्रोग्राम कम संसाधन लेता है। लेकिन हम अभी भी उम्मीद करते हैं कि रोबोट को चलाने की आवश्यकता होने पर शुरू कर सकता है और जब उसे चलाने की आवश्यकता नहीं होती है तो रोक सकता है। उदाहरण के लिए, कमोडिटी वायदा के कार्यक्रम और मात्रात्मक ट्रेडिंग के संचालन के दौरान पूरे दिन के अधिकांश भाग के लिए गैर-खोलने का समय होता है। इस तरह, हम उम्मीद करते हैं कि रोबोट केवल खुलने के समय पर चलेगा, और यह केवल पैसे बचाने के लिए हर दिन खुलने के समय पर चलेगा। क्या यह रोमांचक नहीं है? इस आवश्यकता को पूरा करने के लिए, हम एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म पर चलने वाले रणनीति रोबोट को लिखने के लिए पायथन भाषा का उपयोग कर सकते हैं, और रोबोट को एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म के विस्तारित एपीआई इंटरफ़ेस के माध्यम से नियमित अंतराल पर रोबोट की शुरुआत और रोक को नियंत्रित करने दें।

अगर कोई जरूरत है, तो चलो करते हैं!

वास्तव में, पूरा कोड बहुत सरल है. एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म एक्सटेंशन एपीआई इंटरफ़ेस को कॉल करने का उदाहरण सीधे इस्तेमाल किया जा सकता है।

पता:https://www.fmz.com/api#simpleउदाहरण

उदाहरण में फ़ंक्शन का सीधे उपयोग करेंःdef api (method, *args)इंटरफेस हम कॉल करने की जरूरत भी बहुत सरल है. निम्नलिखित दो इंटरफेस का उपयोग किया जाता है (एफएमजेड दस्तावेज़ में पाया जा सकता है)

  • पुनः आरंभ करेंरोबोट रोबोट इंटरफेस को पुनरारंभ करें और रोबोट आईडी में पैरामीटर पास करें। विशिष्ट उपयोगidकॉल करने के लिएःapi ('RestartRobot', id)

  • रोकोरोबोट रोबोट इंटरफ़ेस को रोकने के लिए, मापदंडों भी रोबोट हैंID. रोबोटID:

img

एफएमजेड क्वांट ट्रेडिंग प्लेटफ़ॉर्म एक्सटेंशन एपीआई को कॉल करने के लिए, आपकोAPI KEYएफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म का। आप अपने स्वयं के एपीआई कुंजी खाता प्रबंधन में उत्पन्न कर सकते हैं. हम गुजरते हैंAPI KEYएक रणनीति पैरामीटर के रूप में। एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म खाता प्राप्त करने का स्क्रीनशॉटAPI KEY:

img

बाकी समय तर्क लिखने के लिए है, जो भी बहुत सरल है। समय मापदंडों सेट करेंः

["175708,14:55:33-15:10:33", ...]

दीर्घवृत्त इंगित करता है कि अधिक सेटिंग्स जैसे"175708,14:55:33-15:10:33"सेट किया जा सकता है। समय पैरामीटर एक JSON स्ट्रिंग है, जिसे रणनीति कोड में एक सूची में पार्स किया जाएगा। सूची में प्रत्येक तत्व रोबोट प्रारंभ / रोक सेटिंग्स का एक सेट है। अर्थात्:

"175708,14:55:33-15:10:33"

वे अल्पविराम द्वारा अलग कर रहे हैं. अल्पविराम से पहले भाग175708रोबोट आईडी है, और अल्पविराम के बाद का हिस्सा प्रारंभ समय/रोक समय है। उपरोक्त उदाहरण में, आईडी 175708 वाला रोबोट 14:55:33 पर शुरू होता है और 15:10:33 पर रुकता है।

फिर, रणनीति में, रोबोट घूमना जारी रखेगा। प्रत्येक दौर का घूर्णन पहले वर्तमान समय प्राप्त करेगा, और फिर वर्तमान समय और टाइमिंग समय के बीच तुलना के अनुसार रोबोट के स्टार्ट या स्टॉप को ट्रिगर करने का निर्णय लेगा। यदि ट्रिगर किया जाता है, तो एपीआई ('RestartRobot', id) या एपीआई (StopRobot, id) को रोबोट को शुरू करने और रोकने के लिए कॉल करें।

पूर्ण रणनीति कोडः

# -*- coding: utf-8 -*-
import time
import json

try:
    import md5
    import urllib2
    from urllib import urlencode
except:
    import hashlib as md5
    import urllib.request as urllib2
    from urllib.parse import urlencode

def api(method, *args):
    d = {
        'version': '1.0',
        'access_key': accessKey,
        'method': method,
        'args': json.dumps(list(args)),
        'nonce': int(time.time() * 1000),
        }

    d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest()
    return json.loads(urllib2.urlopen('https://www.fmz.com/api/v1', urlencode(d).encode('utf-8')).read().decode('utf-8'))

RobotParams = json.loads(strRobotParams)

def main():
    global RobotParams 
    arrParams = []
    nowDay = 0
    strPush = ""
    if isPushMsg:
        strPush = "@"

    for i in range(len(RobotParams)):
        param = {}
        arr = RobotParams[i].split(",")
        if len(arr) != 2:
            raise Exception("String configuration error: delimiter,")
        param["id"] = arr[0]
        param["isProcessOpenThisDay"] = False
        param["isProcessCloseThisDay"] = False

        arr = arr[1].split("-")
        if len(arr) != 2:
            raise Exception("String configuration error: delimiter-")

        begin = arr[0]
        arrBegin = begin.split(":")
        if len(arrBegin) != 3:
            raise Exception("String configuration error: start time separator:")
        
        param["begin"] = {}
        param["begin"]["hour"] = float(arrBegin[0])
        param["begin"]["min"] = float(arrBegin[1])
        param["begin"]["sec"] = float(arrBegin[2])

        end = arr[1]
        arrEnd = end.split(":")
        if len(arrEnd) != 3:
            raise Exception("String configuration error: end time separator:")            
        
        param["end"] = {}
        param["end"]["hour"] = float(arrEnd[0])
        param["end"]["min"] = float(arrEnd[1])
        param["end"]["sec"] = float(arrEnd[2])
        arrParams.append(param)

    # Test
    Log("Output parameters", arrParams, "#FF0000")  

    while True:
        nowTime = time.localtime(time.time())
        nowHour = nowTime.tm_hour 
        nowMin = nowTime.tm_min
        nowSec = nowTime.tm_sec
        
        tbl = {
            "type" : "table", 
            "title" : "msg", 
            "cols" : ["id", "begin", "end", "Did you perform a start today", "Did you perform a stop today"],
            "rows" : []
        }

        for i in range(len(arrParams)):
            tbl["rows"].append([arrParams[i]["id"], json.dumps(arrParams[i]["begin"]), json.dumps(arrParams[i]["end"]), arrParams[i]["isProcessOpenThisDay"], arrParams[i]["isProcessCloseThisDay"]])
            if nowDay != nowTime.tm_mday:
                arrParams[i]["isProcessOpenThisDay"] = False
                arrParams[i]["isProcessCloseThisDay"] = False

            if arrParams[i]["isProcessOpenThisDay"] == False:
                if nowTime.tm_hour == arrParams[i]["begin"]["hour"] and nowTime.tm_min >= arrParams[i]["begin"]["min"] and nowTime.tm_sec >= arrParams[i]["begin"]["sec"]:
                    ret = api('RestartRobot', int(arrParams[i]["id"]))                    
                    arrParams[i]["isProcessOpenThisDay"] = True
                    Log("Robot ID:", arrParams[i]["id"], "Execution started, please log in to the platform to check if it started successfully", "Extended API return value:", ret, strPush)

            if arrParams[i]["isProcessCloseThisDay"] == False:
                if nowTime.tm_hour == arrParams[i]["end"]["hour"] and nowTime.tm_min >= arrParams[i]["end"]["min"] and nowTime.tm_sec >= arrParams[i]["end"]["sec"]:
                    ret = api('StopRobot', int(arrParams[i]["id"]))
                    arrParams[i]["isProcessCloseThisDay"] = True
                    Log("Robot ID:", arrParams[i]["id"], "Execution stopped, please log in to the platform to check if it stopped successfully", "Extended API return value:", ret, strPush)
        
        if nowDay != nowTime.tm_mday:
            nowDay = nowTime.tm_mday

        LogStatus(_D(), nowTime, "\n`" + json.dumps(tbl) + "`")
        Sleep(500)

रोबोट पैरामीटर सेटिंग्सः

img

रणनीति चल रही हैः

स्क्रीनशॉटः

img img

रणनीतिक पता:https://www.fmz.com/strategy/184600

समाप्ति

उदाहरण के लिए, एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म का विस्तारित एपीआई अभी भी बहुत शक्तिशाली है। इन विस्तारित एपीआई के साथ एफएमजेड प्लेटफॉर्म के आधार पर अपना स्वयं का मात्रात्मक ट्रेडिंग प्लेटफॉर्म बनाना कोई समस्या नहीं है। टाइमिंग रोबोट डिजाइन में सरल है, यह समय पर शुरू होता है और समय पर रुकता है। इसमें ऐसे तंत्र शामिल नहीं हैं जैसे कि स्टार्टअप सफल है या नहीं, निरीक्षण, अपवाद पुनः प्रयास, आदि। यदि आप रुचि रखते हैं, तो आप फ़ंक्शन जोड़ सकते हैं और उन्हें बढ़ा सकते हैं। यह रणनीति केवल संदर्भ के लिए है।


संबंधित

अधिक