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

مصنف:چھوٹا سا خواب, تخلیق: 2020-01-20 17:33:36, تازہ کاری: 2023-10-17 21:18:46

img

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

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

اس کے بعد سے ، ہم نے اس کے بارے میں مزید معلومات حاصل کیں۔

'''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)

دو، مختلف تلاش کریں

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

img

اور پھر آپ کو ایک فنکشن میں ٹرانزیکشن منطق کے اس حصے کوڈ کو لپیٹ.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":[]
    }
    

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

  • CancelAll فنکشن

    اس کے مقابلے میں، اس فنکشن کی تبدیلی. اس فنکشن کو صرف کوڈ میں تھوڑا سا تبدیل کر دیا گیا ہے، اور اس کے بعد سوچنے کے بعد، اس طرح کی تبدیلی کا ارادہ.

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

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

اگر آپ کو یہ سب ڈیزائننگ کے خیالات مل گئے ہیں تو کیا یہ آسان نہیں ہوگا کہ آپ ایک پائیٹن حکمت عملی کو مختلف قسم کی حکمت عملی میں تبدیل کر دیں؟

تیسرا، دوبارہ ٹیسٹ

img

img

img

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


متعلقہ

مزید

بی بی ڈبلیو 2009مںگ مںگ، آپ کی حکمت عملی کے لئے صرف ایک سیٹ نہیں ہے exchange.SetDirection (("خریداری") سمت، اور ایک e. نہیں exchange.

بلیک ہارساس حکمت عملی میں کم از کم سرمایہ کتنا ہے؟

بلیک ہارسمیں نے اس کے بارے میں کچھ نہیں کہا۔ میں نے اس کے بارے میں کچھ نہیں کہا۔ میں نے اس کے بارے میں کچھ نہیں کہا۔

بلیک ہارسٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے، ٹھیک ہے.

بلیک ہارس/upload/asset/164f3fe6e84331d800583.png اب ٹھیک ہے، لیکن میرے اکاؤنٹ میں پیسہ ہے، آپ کی حکمت عملی میں کم سے کم سرمایہ کاری کتنی ہے، کیا میرے اکاؤنٹ میں پیسہ کافی نہیں ہے؟

بلیک ہارس/upload/asset/16495fcb1185338f8af27.png شامل کردہ منتظم آئی پی ہے، ٹھیک ہے

بلیک ہارسGetAccount: 400: {"error_message":"Invalid IP","code":30011,"error_code":"30011","message:"Invalid IP"} آئی پی میں نے بھی اے پی آئی میں شامل کیا ہے، لیکن یہ غلط ہے.

بلیک ہارس/upload/asset/164330beccf32fc55e7b6.png اس کو کیسے حل کیا جائے

بلیک ہارسروبوٹ K لائن سائیکل کتنی سیٹ کریں

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

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

چھوٹا سا خوابجب آپ API KEY کی درخواست کرتے ہیں تو ، آپ کا IP ایڈریس وہائٹ لسٹ ایڈریس ہے جس تک رسائی کی اجازت ہے۔ جب آپ اسے ترتیب دیتے ہیں تو ، صرف یہ IP ایڈریس آپ کے API KEY کو API انٹرفیس تک رسائی حاصل کرنے کے لئے استعمال کرسکتا ہے۔ کیا آپ نے اپنے میزبان کا IP ایڈریس ترتیب دیا ہے؟

چھوٹا سا خواباگر آپ کے پاس کوئی ویب سائٹ ہے تو ، آپ کو اس سائٹ کو انسٹال کرنے کی ضرورت ہے۔

چھوٹا سا خوابیہ حکمت عملی K لائن کی پرواہ نہیں کرتی ہے ، کسی بھی ترتیب کے مطابق ، دوبارہ جانچ پڑتال کی بات 1 منٹ پر طے کی گئی ہے کیونکہ یہ ٹک کے ذرات کو متاثر کرتی ہے۔