গত নিবন্ধে, একটি খুব সহজ পাইথন কৌশল বাস্তবায়ন করা হয়েছেঃ"পাইথন সংস্করণ হ্যাকিং এবং ড্রপিং কৌশল"এই কৌশলটি একটি অ্যাকাউন্টকে একটি ট্রেডিং জোড়ার উপর পদ্ধতিগত ট্রেডিং পরিচালনা করতে পরিচালিত করে, নীতিটি সহজ, এটি হ'ল হ্রাস-ডাউন অনুসরণ করা। কখনও কখনও আমরা একই ট্রেডিং লজিক ব্যবহার করে বিভিন্ন ট্রেডিং জোড়া পরিচালনা করতে চাই। একাধিক রোবট তৈরি করতে পারি, বিভিন্ন মুদ্রার জন্য বিভিন্ন ট্রেডিং জোড়া সেট আপ করতে পারি। যদি কৌশলটি খুব বেশি জটিল না হয় তবে উদ্ভাবকরা ট্রেডিং প্ল্যাটফর্মের শক্তিশালী নমনীয়তাকে বিবেচনা করে। এটি সহজেই একটি কৌশলকে একাধিক কৌশলতে রূপান্তরিত করতে পারে, যাতে কেবলমাত্র একটি রোবট তৈরি করে একাধিক ট্রেড করা যায়।
এই নীতির মূল কোডটি পরিবর্তন করা হয়েছেঃ
'''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":[]
}
এইভাবে ডিজাইন করা হয়েছে যাতে প্রতিটি লেনদেনের জোড়ার নিজস্ব প্যারামিটার থাকে, কারণ প্রতিটি লেনদেনের সম্ভাব্য মূল্যের মধ্যে বিশাল পার্থক্য রয়েছে, যা প্যারামিটারেও আলাদা হতে পারে এবং কখনও কখনও বৈষম্য সেটিংয়ের প্রয়োজন হয়।
এর বিপরীতে, এই ফাংশনটির পরিবর্তনের সাথে তুলনা করা যেতে পারে। ফাংশনটি কেবলমাত্র কোডের একটি বিট পরিবর্তন করে এবং তারপরে এটির উদ্দেশ্য সম্পর্কে চিন্তা করে।
স্ট্যাটাস বারে বাজারের তথ্য এবং অ্যাকাউন্টের সম্পদ তথ্য প্রদর্শনের জন্য একটি চার্ট যুক্ত করা হয়েছে, যা প্রতিটি এক্সচেঞ্জের জন্য সংশ্লিষ্ট সম্পদ এবং বাজারের বাস্তব সময়ে প্রদর্শন করতে পারে।
এই সমস্ত ডিজাইনের ধারণাগুলির সাথে, একটি পাইথন কৌশলকে একাধিক প্রজাতিতে রূপান্তর করা কি এত সহজ নয়?
এই কৌশলটি শুধুমাত্র রেফারেন্স লার্নিং, রি-টেস্টিং এবং আপগ্রেড অপ্টিমাইজ করার জন্য আগ্রহীদের জন্য।কৌশলগত ঠিকানা
বিবিডব্লিউড ২০০৯মেং, আপনি কি জানতে চান যে কেন আপনি এই কৌশলটি সেট করবেন না exchange.SetDirection (("buy") দিকনির্দেশনা, এবং একটি 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 কিভাবে এটি সমাধান করবেন
মুদ্রাচক্রের বড় কালো ঘোড়ারোবট কে লাইন চক্র কত সেট
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নএই কৌশলটি শিক্ষার কৌশল, মূলত শেখার জন্য, যা আপনি নিজেরাই পরিবর্তন, প্রসারিত, অনুকূলিত করতে পারেন।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নআপনি এই কৌশলটির উত্স কোডটি নির্দিষ্টভাবে দেখতে পারেন, কৌশলটি উন্মুক্ত, কৌশলগত যুক্তিটি খুব সহজ, এটি হ'ল হ্রাস এবং পতন অনুসরণ করা। নোট করুন, এটি একটি ডিজিটাল মুদ্রা তাত্ক্ষণিক কৌশল, এটি ভবিষ্যতের জন্য চালানো যায় না, এটি ভবিষ্যতের জন্য নিজের দ্বারা সংশোধন করা যেতে পারে।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নAPI KEY অনুরোধ করার সময়, IP ঠিকানাটি হোয়াইট লিস্টের ঠিকানা হিসাবে সেট করা হয় যা অ্যাক্সেসের অনুমতি দেয়। আপনি এটি সেট করার পরে, কেবলমাত্র এই আইপি ঠিকানাটি আপনার API KEY ব্যবহার করে API ইন্টারফেস অ্যাক্সেস করতে পারে। আপনি কি আপনার হোস্টের IP ঠিকানা সেট করেছেন?
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নহোস্টের সার্ভারে পাইথন ইনস্টল করুন।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নএই কৌশলটি K-line-কে ছাড়িয়ে যায়, যে কোনও সেটিং-এ কাজ করে, পুনরাবৃত্তি শব্দটি টিক গ্রানুলাইজেশানকে প্রভাবিত করে, তাই এটি 1 মিনিটের জন্য সেট করা হয়।