वास्तव में, इस उदाहरण कोड को बनाने से पहले, आविष्कारक ने क्वांटिफाइड ट्रेडिंग प्लेटफॉर्म रणनीति स्क्वायर पर लिखा थाः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画图'
},
'yAxis': [{
'title': {'text': 'K线'},
'style': {'color': '#4572A7'},
'opposite': False
}, {
'title': {'text': '指标轴'},
'opposite': True
}],
'series': [{
'type': 'candlestick',
'name': '当前周期',
'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
# 计算指标
macd = TA.MACD(r)
LogStatus(_D(), len(r))
# 画图
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
शब्दकोश चर में चार्ट कॉन्फ़िगरेशन जानकारी संग्रहीत की जाती है, जैसेः
इस चार्ट में कितनी रेखाएं हैं? (तीन सूचक रेखाएँ, DIF, DEA, MACD)
क्या इस चार्ट में कोई K-लाइन है?
MACD का मान छोटा होता है, यदि ट्रेडिंग जोड़ी BTC_USDT है, तो चार्ट को संपीड़ित करना बहुत असुविधाजनक है, इसलिए चार्ट को 2 Y-अक्षों के रूप में भी कॉन्फ़िगर किया जाता है।
इस उदाहरण नीति में मुख्य फ़ंक्शन चार्ट के आरंभिकरण को शुरू करता है, चार्ट फ़ंक्शन को कॉल करता है, चार्ट को कॉन्फ़िगर करता है, चार्टCfg को पैरामीटर के रूप में भेजता है, चार्ट ऑब्जेक्ट चार्ट उत्पन्न करता है। फिर एक लूप में जाता है, लगातार K-लाइन डेटा प्राप्त करता है, यह तय करता है कि यदि K-लाइन डेटा BAR की संख्या 50 से अधिक है तो MACD संकेतक का गणना की जा सकती है। फिर K-लाइन डेटा और संकेतक डेटा को चार्ट में लिखा जा सकता है। चार्ट ऑब्जेक्ट्स का उपयोग करके चार्ट में विधि लिखने के लिए add फ़ंक्शन। लिखते समय, यदि add फ़ंक्शन का अंतिम पैरामीटर -1 निर्दिष्ट किया गया है, तो वर्तमान डेटा बिंदु को अद्यतन करने के लिए; यदि -1 नहीं भेजा गया है, तो एक नया डेटा बिंदु जोड़ने के लिए। एक नया डेटा बिंदु जोड़ा जाता है जब K-लाइन BAR उत्पन्न होती है, और अंतिम BAR और संबंधित मानकों को अपडेट किया जाता है जब K-लाइन BAR उत्पन्न नहीं होती है.
यह भी वास्तविक डिस्क पर चलाया जा सकता हैः
इस तरह की रणनीति के उदाहरण का पताःhttps://www.fmz.com/strategy/187379
यदि आपके कोई प्रश्न हैं, तो टिप्पणी के लिए धन्यवाद ।