گزشتہ مضمون میں، ایک بہت سادہ پائیٹون حکمت عملی لاگو کیا گیا تھا:
تبدیلی کے بعد حکمت عملی کا ماخذ کوڈ:
'''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)
کیا آپ نے اس کوڈ کا موازنہ کیا ہے؟ کیا آپ کو معلوم ہے کہ یہ پچھلے مضمون کے کوڈ سے بہت مختلف ہے؟
اصل میں ، تجارتی منطق بالکل ایک جیسی ہے ، بغیر کسی تبدیلی کے۔ ہم صرف حکمت عملی کو ایک سے زیادہ اقسام میں تبدیل کرتے ہیں ، ہم
اس کے بعد ایک تقریب میں ٹریڈنگ منطق کے کوڈ کو 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":[]
}
یہ ڈیزائن ہر ٹریڈنگ جوڑی کو اپنے پیرامیٹرز رکھنے کی اجازت دیتا ہے، کیونکہ ہر ٹریڈنگ جوڑی میں بڑی قیمت کا فرق ہوسکتا ہے، اور پیرامیٹرز بھی مختلف ہوسکتے ہیں، کبھی کبھی مختلف ترتیبات کی ضرورت ہوتی ہے.
منسوخ کریںتمام فنکشن آپ اس فنکشن کی تبدیلی کا موازنہ کر سکتے ہیں۔ یہ فنکشن صرف ایک چھوٹا سا کوڈ تبدیل کرتا ہے، اور پھر اس طرح کی تبدیلی کے ارادے کے بارے میں سوچتے ہیں۔
اسٹیٹس بار چارٹ ڈیٹا اسٹیٹس بار میں مارکیٹ کے اعداد و شمار اور اکاؤنٹ کے اثاثوں کے اعداد و شمار کو ظاہر کرنے کے لئے ایک چارٹ شامل کیا جاتا ہے ، تاکہ ہر ایکسچینج آبجیکٹ کے متعلقہ اثاثوں اور مارکیٹ کو حقیقی وقت میں ظاہر کیا جاسکے۔ کیا مندرجہ بالا ڈیزائن کے خیالات پر قابو پانے کے بعد پیتھون کی حکمت عملی کو کثیر اقسام کی حکمت عملی میں تبدیل کرنا آسان ہے؟
یہ حکمت عملی صرف سیکھنے اور بیک ٹسٹنگ کے مقاصد کے لئے ہے، اور اگر آپ دلچسپی رکھتے ہیں تو آپ اسے بہتر بناسکتے ہیں اور اپ گریڈ کرسکتے ہیں۔حکمت عملی کا خطاب