कई डेवलपर्स जो पायथन में रणनीति लिखते हैं, वे रणनीति कोड फ़ाइलों को स्थानीय रूप से रखना चाहते हैं, रणनीति की सुरक्षा के बारे में चिंता करते हैं। एफएमजेड एपीआई दस्तावेज़ में प्रस्तावित समाधान के रूप मेंः
रणनीतिक सुरक्षा
रणनीति को FMZ प्लेटफॉर्म पर विकसित किया जाता है, और रणनीति केवल FMZ खाते धारकों के लिए दिखाई देती है। और FMZ प्लेटफॉर्म पर, रणनीति कोड को पूरी तरह से स्थानीयकृत किया जा सकता है, उदाहरण के लिए, रणनीति को पायथन पैकेज में कैप्सूल किया जाता है और रणनीति कोड में लोड किया जाता है, ताकि रणनीति स्थानीयकरण महसूस किया जा सके।
अधिक जानकारी के लिए, कृपया इस पर जाएंःhttps://www.fmz.com/api
वास्तव में इस तरह की चिंता की कोई आवश्यकता नहीं है, लेकिन चूंकि ऐसी आवश्यकताएं हैं, इसलिए हम एक पूर्ण कार्यान्वयन उदाहरण प्रदान करेंगे।
चलो क्लासिक का उपयोग करके प्रदर्शन के लिए एक सरल पायथन रणनीति खोजनेDual Thrust
रणनीति, रणनीति का पता:https://www.fmz.com/strategy/21856हम रणनीति कोड के किसी भी हिस्से को नहीं बदलने का प्रयास करते हैं, रणनीति को एक ऐसी फ़ाइल में कैप्सूल करते हैं जिसे एफएमजेड प्लेटफॉर्म पर रणनीति कोड द्वारा बुलाया जा सकता है, और निष्पादन परिणाम सीधे रणनीति को चलाने के समान ही है। कैप्सूल के साथ सबसे बड़ी समस्या यह है कि एफएमजेड प्लेटफॉर्म पर रणनीति कोड द्वारा बुलाए गए वैश्विक ऑब्जेक्ट, वैश्विक फ़ंक्शन और निरंतर मानों तक हम कैप्सूल की गई फ़ाइलों में नहीं पहुंच सकते हैं, इसलिए हमें इन ऑब्जेक्ट, फ़ंक्शन, चर और स्थिरांक को कैप्सूल फ़ाइल में पास करने का एक तरीका खोजना होगा। चलो इसे कदम से कदम करते हैं।
testA
.फ़ाइल में चिपकाएँtestA
स्थानीय संपादक द्वारा खोला गया।
कुछ कोड जोड़ें, और रणनीति कोड भाग कॉपी और अछूता चिपका रखा
# Function, object
exchanges = None
exchange = None
Log = None
Sleep = None
TA = None
Chart = None
LogProfitReset = None
LogStatus = None
_N = None
_C = None
LogProfit = None
# Strategy parameters
ContractTypeIdx = None
MarginLevelIdx = None
NPeriod = None
Ks = None
Kx = None
AmountOP = None
Interval = None
LoopInterval = None
PeriodShow = None
# constant
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
इन कार्यों को आयात करने के लिए. एफएमजेड प्लेटफॉर्म पर रणनीतियाँ इन कार्यों को कॉल करती हैं और कुछ प्रयुक्त कार्यों और वस्तुओं को पास करती हैं.
स्टार्टअप रणनीति बहुत सरल है, इस प्रकार हैः
एफएमजेड प्लेटफॉर्म पर केवल कुछ पंक्तियों का कोड लिखा गया है। यह ध्यान दिया जाना चाहिए कि इस स्टार्टअप रणनीति के मापदंड हमारे पैक रणनीति के समान ही हैंड्यूल थ्रस्ट ओकेकोइन वायदा रणनीति कोड का पायथन संस्करणवास्तव में, आप सीधे कॉपी कर सकते हैंड्यूल थ्रस्ट ओकेकोइन वायदा रणनीति कोड का पायथन संस्करणरणनीति, तो बस रणनीति कोड को साफ करें, इसे चिपकाएं।
import sys
# Here I wrote the path where I put the testA file myself. I replaced it with xxx. To put it simply, I set the path of my testA file.
sys.path.append("/Users/xxx/Desktop/pythonPlayground/")
import testA
def main():
# Passing Exchange Object
testA.SetExchanges(exchanges)
# Pass global function SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit)
testA.SetFunc(Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit)
# Passing strategy parameters SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow)
testA.SetParams(ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow)
# Execute the main strategy function in the encapsulated testA file
testA.main()
इस प्रकार, हम रणनीति के मुख्य शरीर को संक्षेप में प्रस्तुत करते हैंtestA
फ़ाइल और इसे स्थानीय रूप से डिवाइस पर रखें जहां डॉकर स्थित है। एफएमजेड प्लेटफॉर्म पर, हमें केवल एक स्टार्टअप रणनीति को सहेजने की आवश्यकता है। यह स्टार्टअप रणनीति बनाने वाला रोबोट सीधे हमारी स्थानीय फ़ाइल लोड कर सकता है और इसे स्थानीय रूप से चला सकता है।
testA
बैकटेस्ट के लिए स्थानीय फ़ाइलनिष्पादन के लिए फ़ाइल को सीधे लोड करें.
इस बार हम एकtestB
के लिए कोड के साथ फ़ाइलड्यूल थ्रस्ट ओकेकोइन वायदा रणनीति कोड का पायथन संस्करण strategy.
import time
class Error_noSupport(BaseException):
def __init__(self):
Log("Only OKCoin futures are supported!#FF0000")
class Error_AtBeginHasPosition(BaseException):
def __init__(self):
Log("There is a futures position at startup!#FF0000")
ChartCfg = {
'__isStock': True,
'title': {
'text': 'Dual Thrust Top and bottom rail map'
},
'yAxis': {
...
यदि रणनीति बहुत लंबी है, तो इसे छोड़ दिया जाता है और रणनीति कोड को बिल्कुल भी बदलने की आवश्यकता नहीं होती है।
तो तैयार हो जाओड्यूल थ्रस्ट ओकेकोइन वायदा रणनीति कोड का पायथन संस्करण(स्ट्रैटेजी शुरू करें, सीधे निष्पादित करेंtestB
फाइल), जो कि एफएमजेड मंच पर हमारी रणनीति है, एक रोबोट बनाने, सीधे लोडtestB
यह ध्यान दिया जाना चाहिए कि स्टार्टअप रणनीति भी बिल्कुल एक ही रणनीति पैरामीटर सेटिंग्स (नीति इंटरफ़ेस पैरामीटर) के रूप में मूल संस्करण होना चाहिएड्यूल थ्रस्ट ओकेकोइन वायदा रणनीति कोड का पायथन संस्करण.
if __name__ == '__main__':
Log("run...")
try:
# The file path is processed, you can write the actual path of your testB file
f = open("/Users/xxx/Desktop/pythonPlayground/testB.py", "r")
code = f.read()
exec(code)
except Exception as e:
Log(e)
बैकटेस्ट करें:
बैकटेस्ट का परिणाम उपरोक्त परीक्षण के अनुरूप है।
जाहिर है उपरोक्त दूसरी विधि सरल है, इसका प्रयोग करने की सिफारिश की जाती है।