গত নিবন্ধে, একটি খুব সহজ পাইথন কৌশল বাস্তবায়িত হয়েছেঃ
রূপান্তরের পর কৌশল উৎস কোডঃ
'''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
. মূল কৌশল লুপে, যোগ করা ট্রেডিং জোড়া অনুযায়ী এই ফাংশনটি পুনরাবৃত্তিভাবে কল করুন, এবং প্রতিটি ট্রেডিং জোড়া একবার ট্রেডিং লজিক কোডটি কার্যকর করতে দিন।
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":[]
}
এই নকশা প্রতিটি ট্রেডিং জোড়ার নিজস্ব পরামিতি থাকতে দেয়, কারণ প্রতিটি ট্রেডিং জোড়ার দামের পার্থক্য বড় হতে পারে এবং পরামিতিগুলিও আলাদা হতে পারে, কখনও কখনও ডিফারেনশিয়াল সেটিংয়ের প্রয়োজন হয়।
সমস্ত ফাংশন বাতিল করুন আপনি এই ফাংশনের পরিবর্তনের তুলনা করতে পারেন। এই ফাংশন শুধুমাত্র একটি সামান্য কোড পরিবর্তন করে, এবং তারপর এই ধরনের পরিবর্তন উদ্দেশ্য সম্পর্কে চিন্তা।
স্ট্যাটাস বার চার্টের তথ্য স্ট্যাটাস বারে বাজার তথ্য এবং অ্যাকাউন্টের সম্পদ তথ্য প্রদর্শনের জন্য একটি চার্ট যুক্ত করা হয়, যাতে প্রতিটি এক্সচেঞ্জ অবজেক্টের সংশ্লিষ্ট সম্পদ এবং বাজার রিয়েল টাইমে প্রদর্শিত হতে পারে। উপরের ডিজাইন আইডিয়াগুলি আয়ত্ত করার পরে কি পাইথন কৌশলটিকে মাল্টি-প্রজাতির কৌশলতে পরিবর্তন করা সহজ?
কৌশলটি শুধুমাত্র শেখার এবং ব্যাকটেস্টিংয়ের উদ্দেশ্যে এবং আপনি যদি আগ্রহী হন তবে এটিকে অপ্টিমাইজ এবং আপগ্রেড করতে পারেন।কৌশলগত ঠিকানা