avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

ایک گیجٹ کو شروع کرنے یا روکنے کے لیے ایک مقداری تجارتی روبوٹ کو لاگو کرنے کے لیے ازگر کا استعمال کریں۔

میں تخلیق کیا: 2020-02-14 21:56:58, تازہ کاری: 2023-10-10 21:13:38
comments   4
hits   3047

ایک گیجٹ کو شروع کرنے یا روکنے کے لیے ایک مقداری تجارتی روبوٹ کو لاگو کرنے کے لیے ازگر کا استعمال کریں۔

ایک گیجٹ کو شروع کرنے یا روکنے کے لیے ایک مقداری تجارتی روبوٹ کو لاگو کرنے کے لیے ازگر کا استعمال کریں۔

پورے نیٹ ورک پر ایک طاقتور، لچکدار اور استعمال میں آسان مقداری تجارتی پلیٹ فارم کے طور پر، انوینٹر کوانٹیٹیو ٹریڈنگ پلیٹ فارم کے استعمال کے لیے بہت کم حد ہے اور روبوٹ پروگرام بہت کم وسائل لیتا ہے۔ لیکن ہم اب بھی امید کرتے ہیں کہ روبوٹ کو اس وقت شروع کیا جا سکتا ہے جب اسے چلانے کی ضرورت ہو اور جب اسے چلانے کی ضرورت نہ ہو تو اسے روکا جا سکے۔ مثال کے طور پر، کموڈٹی فیوچرز کی پروگرام شدہ اور مقداری تجارت کرتے وقت، دن کے بیشتر حصے میں غیر منڈی کھلنے کا وقت ہوتا ہے۔ اس طرح، ہم بہت زیادہ امید کرتے ہیں کہ روبوٹ کو صرف مارکیٹ کھلنے کے اوقات میں ہی چلنے دیا جائے گا، یہ سوچنا بہت دلچسپ ہے کہ اسے روزانہ کھلنے کے اوقات میں چلانے سے کتنی قیمت بچائی جا سکتی ہے۔ اس ضرورت کو پورا کرنے کے لیے، ہم ایک حکمت عملی روبوٹ لکھنے کے لیے Python کا استعمال کر سکتے ہیں جو FMZ مقداری تجارتی پلیٹ فارم پر چلتا ہے۔ موجد کے مقداری تجارتی پلیٹ فارم کا توسیعی API انٹرفیس ایک مقررہ وقت پر روبوٹ کے آغاز اور رکنے کو کنٹرول کرتا ہے۔

جب کوئی مطالبہ ہو تو بس کرو!

درحقیقت، پورا کوڈ بہت آسان ہے موجد کے مقداری تجارتی پلیٹ فارم کے توسیع شدہ API انٹرفیس کو کال کرنے کی مثال براہ راست استعمال کی جا سکتی ہے۔

پتہ: https://www.fmz.com/api#%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90

مثال میں فنکشن کو براہ راست استعمال کریں:def api(method, *args) ہمیں جس انٹرفیس کو کال کرنے کی ضرورت ہے وہ بھی بہت آسان ہے، درج ذیل دو انٹرفیس کا استعمال کرتے ہوئے (FMZ دستاویز میں پایا جا سکتا ہے)

  • RestartRobot روبوٹ انٹرفیس کو دوبارہ شروع کریں اور پیرامیٹر کے طور پر روبوٹ ID میں پاس کریں۔ مخصوص استعمال کریں۔id، آپ اسے اس طرح کہہ سکتے ہیں:api('RestartRobot', id)

  • StopRobot روبوٹ انٹرفیس کو روکیں، پیرامیٹرز بھی روبوٹ ہیں۔ID

روبوٹIDدیکھیں، حاصل کریں، اسکرین شاٹ: ایک گیجٹ کو شروع کرنے یا روکنے کے لیے ایک مقداری تجارتی روبوٹ کو لاگو کرنے کے لیے ازگر کا استعمال کریں۔

Inventor Quantitative Trading Platform extension API کو کال کرنے کے لیے، آپ کو Inventor Quantitative Trading Platform استعمال کرنے کی ضرورت ہے۔API KEY。 آپ اکاؤنٹ مینجمنٹ میں اپنا خود بنا سکتے ہیں۔API KEY。 ہم نے ڈال دیا۔API KEYحکمت عملی کے پیرامیٹر کے طور پر پاس کیا گیا۔ موجد مقداری تجارتی پلیٹ فارم اکاؤنٹ حاصل کریں۔API KEYاسکرین شاٹ: ایک گیجٹ کو شروع کرنے یا روکنے کے لیے ایک مقداری تجارتی روبوٹ کو لاگو کرنے کے لیے ازگر کا استعمال کریں۔

صرف وقت کی منطق لکھنا باقی ہے، جو کہ ٹائمنگ کے پیرامیٹرز کو سیٹ کرنا بھی بہت آسان ہے۔

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

بیضوی اشارہ کرتا ہے کہ زیادہ مماثلت ہے۔"175708,14:55:33-15:10:33"ترتیبات ٹائمنگ پیرامیٹر ایک JSON سٹرنگ ہے، جسے پالیسی کوڈ میں ایک فہرست میں پارس کیا جاتا ہے۔ فہرست میں موجود ہر عنصر روبوٹ اسٹارٹ/اسٹاپ سیٹنگز کا ایک سیٹ ہے۔ ابھی:

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

کوما ان کو الگ کرنے کے لیے استعمال ہوتے ہیں۔ کوما سے پہلے کا حصہ175708روبوٹ ID ہے، اور کوما کے بعد کا حصہ آغاز کا وقت/اسٹاپ ٹائم ہے۔ مندرجہ بالا مثال میں، ID 175708 والا روبوٹ 14:55:33 پر شروع ہوا اور 15:10:33 پر رک گیا۔

پھر حکمت عملی تلاش کرتی رہتی ہے، ہر بار اسے پہلے موجودہ وقت ملتا ہے، اور پھر موجودہ وقت کا مقررہ وقت کے ساتھ موازنہ کرتا ہے تاکہ یہ معلوم کیا جا سکے کہ آیا روبوٹ کے آغاز یا رکنے کو متحرک کرنا ضروری ہے۔ اگر ٹرگر ہو جائے تو روبوٹ کو شروع کرنے یا روکنے کے لیے api(‘RestartRobot’, id) یا api(‘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("字符串配置错误:分隔符号,")
        param["id"] = arr[0]
        param["isProcessOpenThisDay"] = False
        param["isProcessCloseThisDay"] = False

        arr = arr[1].split("-")
        if len(arr) != 2:
            raise Exception("字符串配置错误:分隔符号-")

        begin = arr[0]
        arrBegin = begin.split(":")
        if len(arrBegin) != 3:
            raise Exception("字符串配置错误:起始时间分隔符号:")
        
        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("字符串配置错误:结束时间分隔符号:")            
        
        param["end"] = {}
        param["end"]["hour"] = float(arrEnd[0])
        param["end"]["min"] = float(arrEnd[1])
        param["end"]["sec"] = float(arrEnd[2])
        arrParams.append(param)

    # 测试
    Log("输出参数", 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", "今天是否执行过启动", "今天是否执行过停止"],
            "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("机器人ID:", arrParams[i]["id"], "执行启动,请登录平台检查是否启动成功", "扩展API返回值:", 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("机器人ID:", arrParams[i]["id"], "执行停止,请登录平台检查是否停止成功", "扩展API返回值:", ret, strPush)
        
        if nowDay != nowTime.tm_mday:
            nowDay = nowTime.tm_mday

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

روبوٹ پیرامیٹر کی ترتیبات:

ایک گیجٹ کو شروع کرنے یا روکنے کے لیے ایک مقداری تجارتی روبوٹ کو لاگو کرنے کے لیے ازگر کا استعمال کریں۔

حکمت عملی آپریشن:

اسکرین شاٹ ایک گیجٹ کو شروع کرنے یا روکنے کے لیے ایک مقداری تجارتی روبوٹ کو لاگو کرنے کے لیے ازگر کا استعمال کریں۔

اس حکمت عملی سے چلنے والے روبوٹ: ایک گیجٹ کو شروع کرنے یا روکنے کے لیے ایک مقداری تجارتی روبوٹ کو لاگو کرنے کے لیے ازگر کا استعمال کریں۔

حکمت عملی کا پتہ: https://www.fmz.com/strategy/184600

نتیجہ

نقطہ آغاز کے طور پر، انوینٹر مقداری تجارتی پلیٹ فارم کا توسیعی API بہت طاقتور ہے FMZ پلیٹ فارم کی بنیاد پر اپنا مقداری تجارتی پلیٹ فارم بنانے کے لیے ان توسیع شدہ APIs کا استعمال کرنا مکمل طور پر ممکن ہے۔ اس ٹائمنگ روبوٹ کا ڈیزائن نسبتاً آسان ہے جب یہ وقت آتا ہے تو اس میں کوئی میکانزم شامل نہیں ہوتا ہے جیسے کہ سٹارٹ اپ کامیاب ہے، تصدیق، غیر معمولی دوبارہ کوشش وغیرہ۔ یہ حکمت عملی صرف حوالہ سیکھنے کے لیے ہے۔