वास्तव में, इस उदाहरण कोड बनाने से पहले, FMZ क्वांट ट्रेडिंग प्लेटफॉर्म के रणनीति वर्ग पर पहले से ही MACD संकेतक ड्राइंग उदाहरण का एक जावास्क्रिप्ट संस्करण हैःhttps://www.fmz.com/strategy/151972हालांकि, उपयोगकर्ता की आवश्यकताओं के अनुसार, हम अभी भी पायथन संस्करण का एक उदाहरण लिखते हैं, जिसका उपयोग रणनीति विकास डिजाइन ड्राइंग में संदर्भ कोड के रूप में किया जा सकता है।
कोड बहुत सरल हैः
'''backtest
start: 2020-01-28 00:00:00
end: 2020-02-26 00:00:00
period: 1d
exchanges: [{"eid":"OKEX","currency":"BTC_USDT"}]
'''
ChartCfg = {
'__isStock': True,
'title': {
'text': 'Python drawing'
},
'yAxis': [{
'title': {'text': 'K-line'},
'style': {'color': '#4572A7'},
'opposite': False
}, {
'title': {'text': 'index axis'},
'opposite': True
}],
'series': [{
'type': 'candlestick',
'name': 'current period',
'id': 'primary',
'data': []
}, {
'type': 'line',
'id': 'dif',
'name': 'DIF',
"yAxis" : 1,
'data': []
}, {
'type': 'line',
'id': 'dea',
'name': 'DEA',
"yAxis" : 1,
'data': []
}, {
'type': 'line',
'id': 'macd',
'name': 'MACD',
"yAxis" : 1,
'data': []
}]
}
def main():
global ChartCfg
preTime = 0
chart = Chart(ChartCfg)
chart.reset()
while True:
while True:
r = _C(exchange.GetRecords)
if len(r) > 50:
break
# calculate the indicator
macd = TA.MACD(r)
LogStatus(_D(), len(r))
# drawing
for i in range(len(r)):
if r[i]["Time"] == preTime:
chart.add(0, [r[i]["Time"], r[i]["Open"], r[i]["High"], r[i]["Low"], r[i]["Close"]], -1)
chart.add(1, [r[i]["Time"], macd[0][i]], -1)
chart.add(2, [r[i]["Time"], macd[1][i]], -1)
chart.add(3, [r[i]["Time"], macd[2][i]], -1)
elif r[i]["Time"] > preTime:
chart.add(0, [r[i]["Time"], r[i]["Open"], r[i]["High"], r[i]["Low"], r[i]["Close"]])
chart.add(1, [r[i]["Time"], macd[0][i]])
chart.add(2, [r[i]["Time"], macd[1][i]])
chart.add(3, [r[i]["Time"], macd[2][i]])
preTime = r[i]["Time"]
Sleep(500)
..ChartCfg
शब्दकोश चर चार्ट विन्यास जानकारी स्टोर करता है, जैसेः
इस चार्ट में कितनी पंक्तियाँ हैं? (तीन सूचक पंक्तियाँ, क्रमशः डीआईएफ, डीईए और एमएसीडी)
क्या चार्ट में एक K-लाइन है? (
इस उदाहरण रणनीति में, मुख्य फ़ंक्शन चार्ट को आरंभ करना शुरू करता है, यह चार्ट फ़ंक्शन को कॉल करता है, और चार्ट ऑब्जेक्ट उत्पन्न करने के लिए चार्ट कॉन्फ़िगरेशन ChartCfg को पैरामीटर के रूप में पास करता है। फिर यह एक लूप में प्रवेश करता है, लगातार K-लाइन डेटा प्राप्त करता है, यह तय करता है कि K-लाइन डेटा में BAR की संख्या 50 से अधिक है, और फिर MACD संकेतकों की गणना करता है (बहुत कम BAR प्रभावी संकेतकों की गणना नहीं कर सकता है) । फिर हम चार्ट में K-लाइन डेटा और संकेतक डेटा लिख सकते हैं। हम इसे चार्ट ऑब्जेक्ट के जोड़ फ़ंक्शन का उपयोग करके चार्ट में लिखते हैं। लिखने के समय, यदि add फ़ंक्शन का अंतिम पैरामीटर -1 निर्दिष्ट है, तो यह वर्तमान डेटा बिंदु को अद्यतन करने का मान है. यदि -1 स्थानांतरित नहीं किया जाता है, तो एक नया डेटा बिंदु जोड़ा जाता है. जब K-लाइन BAR नया उत्पन्न होता है, तो एक नया डेटा बिंदु जोड़ा जाता है। जब K-लाइन BAR उत्पन्न नहीं होता है, तो अंतिम BAR और संबंधित संकेतक अपडेट किए जाते हैं। (K-लाइन BAR के टाइमस्टैम्प की तुलना करके निर्धारित किया जाता है)
यह एक असली बॉट पर भी चल सकता हैः
रणनीति उदाहरण पताःhttps://www.fmz.com/strategy/187379
यदि आप किसी भी प्रश्न है, कृपया एक संदेश छोड़ दें. धन्यवाद ~