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

آپ کو مرحلہ وار سکھائیں کہ Python سنگل پروڈکٹ حکمت عملی کو ملٹی پروڈکٹ حکمت عملی میں کیسے تبدیل کیا جائے۔

میں تخلیق کیا: 2020-01-20 17:33:36, تازہ کاری: 2023-10-17 21:18:46
comments   14
hits   4485

آپ کو مرحلہ وار سکھائیں کہ Python سنگل پروڈکٹ حکمت عملی کو ملٹی پروڈکٹ حکمت عملی میں کیسے تبدیل کیا جائے۔

1. آپ کو سکھائیں کہ Python سنگل پروڈکٹ حکمت عملی کو ملٹی پروڈکٹ حکمت عملی میں کیسے تبدیل کیا جائے۔

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

تبدیل شدہ حکمت عملی سورس کوڈ:

'''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": ["账户信息"], 
            "rows": []
        }        

        tblTick = {
            "type" : "table",
            "title": "ticker",
            "cols": ["行情信息"], 
            "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)

2. فرق تلاش کریں۔

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

آپ کو مرحلہ وار سکھائیں کہ Python سنگل پروڈکٹ حکمت عملی کو ملٹی پروڈکٹ حکمت عملی میں کیسے تبدیل کیا جائے۔

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

  • #### تکرار (ٹراوورسل) کال:
  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":[]
  }

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

  • #### تمام فنکشن منسوخ کریں۔

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

  • #### اسٹیٹس بار چارٹ ڈیٹا

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

مندرجہ بالا ڈیزائن آئیڈیاز پر عبور حاصل کرنے کے بعد، کیا ازگر کی حکمت عملی کو کثیر النوع حکمت عملی میں تبدیل کرنا بہت آسان نہیں ہے؟

3. بیک ٹیسٹنگ

آپ کو مرحلہ وار سکھائیں کہ Python سنگل پروڈکٹ حکمت عملی کو ملٹی پروڈکٹ حکمت عملی میں کیسے تبدیل کیا جائے۔

آپ کو مرحلہ وار سکھائیں کہ Python سنگل پروڈکٹ حکمت عملی کو ملٹی پروڈکٹ حکمت عملی میں کیسے تبدیل کیا جائے۔

آپ کو مرحلہ وار سکھائیں کہ Python سنگل پروڈکٹ حکمت عملی کو ملٹی پروڈکٹ حکمت عملی میں کیسے تبدیل کیا جائے۔

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