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