আপনাকে ধাপে ধাপে শেখান কিভাবে একটি স্থানীয় ফাইলে একটি পাইথন কৌশল এনক্যাপসুলেট করতে হয়
এই নিবন্ধটি দুটি সমাধান সম্পর্কে কথা বলে, এবং নিবন্ধের শেষে অন্য সমাধানটি সহজ (প্রস্তাবিত)।
অনেক ডেভেলপার যারা পলিসি লেখার জন্য পাইথন ভাষা ব্যবহার করেন তারা স্থানীয়ভাবে পলিসি কোড ফাইল সংরক্ষণ করতে চান এবং নীতি নিরাপত্তা নিয়ে চিন্তিত। হিসাবেFMZ APIনথিতে প্রস্তাবিত একটি সমাধান:
নীতি নিরাপত্তা
উদ্ভাবক পরিমাণগত ট্রেডিং প্ল্যাটফর্মে কৌশলগুলি বিকাশ করুন শুধুমাত্র উদ্ভাবক পরিমাণগত অ্যাকাউন্ট হোল্ডারদের কাছে দৃশ্যমান। এবং কৌশল কোড সম্পূর্ণরূপে উদ্ভাবক পরিমাণগত ট্রেডিং প্ল্যাটফর্মে স্থানীয়করণ করা যেতে পারে, উদাহরণস্বরূপ, কৌশলটি একটি পাইথন প্যাকেজে অন্তর্ভুক্ত করা যেতে পারে এবং কৌশল কোডে লোড করা যেতে পারে, এইভাবে কৌশল স্থানীয়করণ অর্জন করা যায়।
https://www.fmz.com/api#策略安全性
আসলে, এই সম্পর্কে চিন্তা করার কোন প্রয়োজন নেই, কিন্তু যেহেতু এই ধরনের একটি সমাধান আছে, একটি সম্পূর্ণ বাস্তবায়ন উদাহরণ প্রদান করা হবে।
একটি কৌশল এনক্যাপসুলেট করুন
আসুন ক্লাসিক ব্যবহার করে একটি প্রদর্শন হিসাবে একটি সাধারণ পাইথন কৌশল খুঁজে বের করিDual Thrustকৌশল, কৌশল ঠিকানা: https://www.fmz.com/strategy/21856
আমরা কৌশল কোডের কোনো অংশ পরিবর্তন না করার চেষ্টা করি, এবং FMZ প্ল্যাটফর্মে কৌশল কোড দ্বারা কল করা যেতে পারে এমন একটি ফাইলে কৌশলটিকে এনক্যাপসুলেট করি এবং কার্যকরী ফলাফলগুলি সরাসরি কৌশলটি চালানোর মতোই। এনক্যাপসুলেশনের সবচেয়ে বড় সমস্যা হল যে গ্লোবাল অবজেক্ট, গ্লোবাল ফাংশন এবং স্ট্র্যাটেজি কোড দ্বারা এফএমজেড প্ল্যাটফর্মের ধ্রুবক মানগুলি আমরা এনক্যাপসুলেট করা ফাইলগুলিতে অ্যাক্সেসযোগ্য নয়, তাই আমাদের অবশ্যই এই অবজেক্ট, ফাংশন, ভেরিয়েবলগুলি পাস করার উপায় খুঁজে বের করতে হবে। , এবং এনক্যাপসুলেটেড ফাইলের ধ্রুবক। তারপরে আমরা ধাপে ধাপে এটি মোকাবেলা করব।
-
অনুলিপিপাইথন সংস্করণ ডুয়াল থ্রাস্ট OKCoin ফিউচারস্থানীয় পাইথন ফাইলে কৌশল কোড পেস্ট করুন।
স্থানীয় সম্পাদকে খোলা testA ফাইলে আটকান।
-
কপি এবং পেস্ট করা কৌশল কোড অক্ষত রেখে কিছু কোড যোগ করুন।
python# 函数、对象 exchanges = None exchange = None Log = None Sleep = None TA = None Chart = None LogProfitReset = None LogStatus = None _N = None _C = None LogProfit = None # 策略参数 ContractTypeIdx = None MarginLevelIdx = None NPeriod = None Ks = None Kx = None AmountOP = None Interval = None LoopInterval = None PeriodShow = None # 常量 ORDER_STATE_PENDING = 0 ORDER_STATE_CLOSED = 1 ORDER_STATE_CANCELED = 2 ORDER_STATE_UNKNOWN = 3 ORDER_TYPE_BUY = 0 ORDER_TYPE_SELL = 1 PD_LONG = 0 PD_SHORT = 1 def SetExchanges(es): global exchanges, exchange exchanges = es exchange = es[0] def SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit): global Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit Log = pLog Sleep = pSleep TA = pTA Chart = pChart LogStatus = pLogStatus LogProfitReset = pLogProfitReset _N = p_N _C = p_C LogProfit = pLogProfit def SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow): global ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow ContractTypeIdx = pContractTypeIdx MarginLevelIdx = pMarginLevelIdx NPeriod = pNPeriod Ks = pKs Kx = pKx AmountOP = pAmountOP Interval = pInterval LoopInterval = pLoopInterval PeriodShow = pPeriodShowউপরের কোডের প্রধান কাজ হল বর্তমান ফাইলে ব্যবহৃত গ্লোবাল ফাংশন এবং ভেরিয়েবল ঘোষণা করা। তারপর এই ফাংশনগুলি আমদানি করার জন্য ইন্টারফেসটি সংরক্ষণ করুন
SetExchanges,SetParams,SetFunc. FMZ প্ল্যাটফর্মের কৌশল এই ফাংশনগুলিকে কল করে এবং কিছু ব্যবহৃত ফাংশন, বস্তু ইত্যাদি পাস করে।
FMZ প্ল্যাটফর্মে কৌশল চালু করুন
স্টার্টআপ কৌশলটি খুবই সহজ, নিম্নরূপ:
FMZ প্ল্যাটফর্মে কোডের এই কয়েকটি লাইন লেখা আছে এটা লক্ষ করা উচিত যে এই স্টার্টআপ স্ট্র্যাটেজির প্যারামিটারগুলো আমাদের স্ট্র্যাটেজির সাথে এনক্যাপসুলেট করা উচিত।পাইথন সংস্করণ ডুয়াল থ্রাস্ট OKCoin ফিউচারএগুলি আসলে একই রকম, আপনি সরাসরি "ডুয়াল থ্রাস্ট ওকেকয়েন ফিউচারের পাইথন সংস্করণ" কৌশলটি অনুলিপি করতে পারেন, তারপরে কৌশল কোডটি সাফ করে পেস্ট করতে পারেন৷
python
import sys
# 这里我写的是自己放置testA文件的路径,具体我替换为xxx了,简单说就是设置自己的testA文件路径就可以了
sys.path.append("/Users/xxx/Desktop/pythonPlayground/")
import testA
def main():
# 传递交易所对象
testA.SetExchanges(exchanges)
# 传递全局函数 SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit)
testA.SetFunc(Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit)
# 传递策略参数 SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow)
testA.SetParams(ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow)
# 执行封装的testA文件中的策略主函数
testA.main()
এইভাবে, আমরা testA ফাইলে পলিসি লজিকের মূল অংশকে এনক্যাপসুলেট করি এবং এটিকে হোস্টের ডিভাইসে রাখি স্থানীয় ফাইল এবং হোস্টে স্থানীয়ভাবে চালান।
ব্যাকটেস্ট তুলনা
-
ব্যাকটেস্টিংয়ের জন্য স্থানীয়ভাবে testA ফাইল লোড করুন
-
আসল কৌশল, একটি পাবলিক সার্ভারে ব্যাকটেস্ট করা হয়েছে
আরেকটি সহজ উপায়
সরাসরি ফাইলটি লোড করুন এবং এটি চালান।
এইবার আমরা "ডুয়াল থ্রাস্ট OKCoin ফিউচারের পাইথন সংস্করণ" কৌশলটির কোড রাখার জন্য একটি testB ফাইল প্রস্তুত করি।
python
import time
class Error_noSupport(BaseException):
def __init__(self):
Log("只支持OKCoin期货!#FF0000")
class Error_AtBeginHasPosition(BaseException):
def __init__(self):
Log("启动时有期货持仓! #FF0000")
ChartCfg = {
'__isStock': True,
'title': {
'text': 'Dual Thrust 上下轨图'
},
'yAxis': {
...
যদি কৌশলটি খুব দীর্ঘ হয় তবে এটি বাদ দেওয়া হবে এবং কৌশল কোডটি পরিবর্তন করার প্রয়োজন নেই।
তারপর "Dual Thrust OKCoin Futures এর Python সংস্করণ (কৌশল শুরু করুন এবং সরাসরি testB ফাইলটি কার্যকর করুন)" প্রস্তুত করুন, যা FMZ প্ল্যাটফর্মে আমাদের কৌশল, একটি রোবট তৈরি করুন, সরাসরি testB ফাইলটি লোড করুন এবং সরাসরি এটি কার্যকর করুন। এটি লক্ষ্য করা উচিত যে স্টার্টআপ কৌশলটিতে "পাইথন সংস্করণ ডুয়াল থ্রাস্ট ওকেকয়েন ফিউচারস" এর মূল সংস্করণের মতো একই কৌশল প্যারামিটার সেটিংস (কৌশল ইন্টারফেস প্যারামিটার) থাকতে হবে।
python
if __name__ == '__main__':
Log("run...")
try:
# 文件路径做了处理,可以写入自己testB文件放置的实际路径
f = open("/Users/xxx/Desktop/pythonPlayground/testB.py", "r")
code = f.read()
exec(code)
except Exception as e:
Log(e)
ব্যাকটেস্ট ফলাফল উপরের পরীক্ষার সাথে সামঞ্জস্যপূর্ণ।
স্পষ্টতই উপরের দ্বিতীয় পদ্ধতিটি সহজ এবং যদি একটি ভাল পদ্ধতি থাকে তবে দয়া করে একটি বার্তা দিন৷








