آپ کو ایک متعدد پرجاتیوں کی حکمت عملی میں ایک واحد پرجاتیوں کی حکمت عملی کو تبدیل کرنے کے لئے سیکھنے

مصنف:لیدیہ, تخلیق: 2022-12-20 17:26:27, تازہ کاری: 2023-09-20 09:45:28

img

آپ کو ایک کثیر کرنسی کی حکمت عملی میں ایک پیتھون واحد کرنسی کی حکمت عملی کو تبدیل کرنے کے لئے سکھانے کے

I. آپ کو ایک کثیر کرنسی کی حکمت عملی میں ایک واحد کرنسی کی حکمت عملی کو تبدیل کرنے کے لئے سیکھنے

گزشتہ مضمون میں، ایک بہت سادہ پائیٹون حکمت عملی لاگو کیا گیا تھا:پایتھون ورژن کے فاتح خریدنے کے لئے حکمت عملی، یہ حکمت عملی کسی خاص تجارتی جوڑی پر پروگرام ٹریڈنگ کرنے کے لئے اکاؤنٹ چلاسکتی ہے۔ اصول بہت آسان ہے ، یعنی ، بڑھنے کے بعد پیچھا کرنا اور کم ہونے کے بعد مارنا۔ بعض اوقات ہم مختلف تجارتی جوڑوں کو چلانے کے لئے ایک ہی تجارتی منطق استعمال کرنا چاہتے ہیں۔ آپ متعدد روبوٹ تشکیل دے سکتے ہیں اور مختلف کرنسیوں میں لین دین کرنے کے لئے مختلف تجارتی جوڑے ترتیب دے سکتے ہیں۔ اگر حکمت عملی بہت پیچیدہ نہیں ہے تو ، ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کی مضبوط لچک کے پیش نظر ، حکمت عملی کو کثیر نوعیت کی حکمت عملی میں تبدیل کرنا آسان ہے ، تاکہ آپ صرف ایک روبوٹ بنا کر متعدد تجارتی جوڑے چلاسکیں۔

تبدیلی کے بعد حکمت عملی کا ماخذ کوڈ:

'''backtest
start: 2019-02-20 00:00:00
end: 2020-01-10 00:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT"},{"eid":"OKEX","currency":"ETH_USDT","stocks":30},{"eid":"OKEX","currency":"LTC_USDT","stocks":100}]
'''

import time
import json

params = {
    "arrBasePrice": [-1, -1, -1],     # -1
    "arrRatio": [0.05, 0.05, 0.05],         # 0.05
    "arrAcc": [],           # _C(exchange.GetAccount)
    "arrLastCancelAll": [0, 0, 0], # 0
    "arrMinStocks": [0.01, 0.01, 0.01],     # 0.01
    "arrPricePrecision": [2, 2, 2], # 2
    "arrAmountPrecision": [3, 2, 2], # 2
    "arrTick":[]
}

def CancelAll(e):
    while True : 
        orders = _C(e.GetOrders)
        for i in range(len(orders)) :
            e.CancelOrder(orders[i]["Id"], orders[i])
        if len(orders) == 0 :
            break
        Sleep(1000)

def process(e, index):
    global params
    ticker = _C(e.GetTicker)
    params["arrTick"][index] = ticker
    if params["arrBasePrice"][index] == -1 :
        params["arrBasePrice"][index] = ticker.Last
    if ticker.Last - params["arrBasePrice"][index] > 0 and (ticker.Last - params["arrBasePrice"][index]) / params["arrBasePrice"][index] > params["arrRatio"][index]:
        params["arrAcc"][index] = _C(e.GetAccount)
        if params["arrAcc"][index].Balance * params["arrRatio"][index] / ticker.Last > params["arrMinStocks"][index]:
            e.Buy(ticker.Last, params["arrAcc"][index].Balance * params["arrRatio"][index] / ticker.Last)
            params["arrBasePrice"][index] = ticker.Last
    if ticker.Last - params["arrBasePrice"][index] < 0 and (params["arrBasePrice"][index] - ticker.Last) / params["arrBasePrice"][index] > params["arrRatio"][index]: 
        params["arrAcc"][index] = _C(e.GetAccount)
        if params["arrAcc"][index].Stocks * params["arrRatio"][index] > params["arrMinStocks"][index]:
            e.Sell(ticker.Last, params["arrAcc"][index].Stocks * params["arrRatio"][index])
            params["arrBasePrice"][index] = ticker.Last
    ts = time.time()
    if ts - params["arrLastCancelAll"][index] > 60 * 5 :
        CancelAll(e)
        params["arrLastCancelAll"][index] = ts 

def main():
    global params
    
    for i in range(len(exchanges)) :    
        params["arrAcc"].append(_C(exchanges[i].GetAccount))
        params["arrTick"].append(_C(exchanges[i].GetTicker))
        exchanges[i].SetPrecision(params["arrPricePrecision"][i], params["arrAmountPrecision"][i])

    for key in params :
        if len(params[key]) < len(exchanges):
            raise "params error!"

    while True:
        tblAcc = {
            "type" : "table",
            "title": "account",
            "cols": ["Account information"], 
            "rows": []
        }        

        tblTick = {
            "type" : "table",
            "title": "ticker",
            "cols": ["Market information"], 
            "rows": []
        }
        for i in range(len(exchanges)): 
            process(exchanges[i], i)

        for i in range(len(exchanges)):
            tblAcc["rows"].append([json.dumps(params["arrAcc"][i])])
            tblTick["rows"].append([json.dumps(params["arrTick"][i])])

        LogStatus(_D(), "\n`" + json.dumps([tblAcc, tblTick]) + "`")
        Sleep(500)

II. فرق تلاش کریں

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

img

اس کے بعد ایک تقریب میں ٹریڈنگ منطق کے کوڈ کو encapsulateprocess. اہم حکمت عملی لوپ پر، شامل ٹریڈنگ جوڑوں کے مطابق iteratively اس تقریب کو کال کریں، اور ہر ٹریڈنگ جوڑی ایک بار ٹریڈنگ منطق کوڈ کو چلانے دو.

  • تکرار (ٹرانسورس) کال:
for i in range(len(exchanges)): 
    process(exchanges[i], i)
  • حکمت عملی کے پیرامیٹرز:
params = {
    "arrBasePrice": [-1, -1, -1],           # -1
    "arrRatio": [0.05, 0.05, 0.05],         # 0.05
    "arrAcc": [],                           # _C(exchange.GetAccount)
    "arrLastCancelAll": [0, 0, 0],          # 0
    "arrMinStocks": [0.01, 0.01, 0.01],     # 0.01
    "arrPricePrecision": [2, 2, 2],         # 2
    "arrAmountPrecision": [3, 2, 2],        # 2
    "arrTick":[]
}

یہ ڈیزائن ہر ٹریڈنگ جوڑی کو اپنے پیرامیٹرز رکھنے کی اجازت دیتا ہے، کیونکہ ہر ٹریڈنگ جوڑی میں بڑی قیمت کا فرق ہوسکتا ہے، اور پیرامیٹرز بھی مختلف ہوسکتے ہیں، کبھی کبھی مختلف ترتیبات کی ضرورت ہوتی ہے.

  • منسوخ کریںتمام فنکشن آپ اس فنکشن کی تبدیلی کا موازنہ کر سکتے ہیں۔ یہ فنکشن صرف ایک چھوٹا سا کوڈ تبدیل کرتا ہے، اور پھر اس طرح کی تبدیلی کے ارادے کے بارے میں سوچتے ہیں۔

  • اسٹیٹس بار چارٹ ڈیٹا اسٹیٹس بار میں مارکیٹ کے اعداد و شمار اور اکاؤنٹ کے اثاثوں کے اعداد و شمار کو ظاہر کرنے کے لئے ایک چارٹ شامل کیا جاتا ہے ، تاکہ ہر ایکسچینج آبجیکٹ کے متعلقہ اثاثوں اور مارکیٹ کو حقیقی وقت میں ظاہر کیا جاسکے۔ کیا مندرجہ بالا ڈیزائن کے خیالات پر قابو پانے کے بعد پیتھون کی حکمت عملی کو کثیر اقسام کی حکمت عملی میں تبدیل کرنا آسان ہے؟

III. بیک ٹسٹ

img img img

یہ حکمت عملی صرف سیکھنے اور بیک ٹسٹنگ کے مقاصد کے لئے ہے، اور اگر آپ دلچسپی رکھتے ہیں تو آپ اسے بہتر بناسکتے ہیں اور اپ گریڈ کرسکتے ہیں۔حکمت عملی کا خطاب


متعلقہ

مزید