
वास्तव में, इस नमूना कोड को बनाने से पहले, मुझे इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म स्ट्रैटेजी स्क्वायर मिला: https://www.fmz.com/strategy/151972. MACD सूचक ड्राइंग उदाहरण का एक जावास्क्रिप्ट संस्करण पहले से ही मौजूद है। हालाँकि, उपयोगकर्ता की मांग के जवाब में, रणनीतियों को विकसित और डिज़ाइन करते समय संदर्भ कोड के रूप में काम करने के लिए उदाहरण का एक पायथन संस्करण लिखा गया है।
कोड बहुत सरल है:
'''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)
क्या इस चार्ट में कोई कैंडलस्टिक्स हैं? (‘type’: ‘कैंडलस्टिक’ का अर्थ है इसे कैंडलस्टिक डेटा के रूप में सेट करना)
MACD मान अपेक्षाकृत छोटे हैं। यदि ट्रेडिंग जोड़ी BTC_USDT है, तो चार्ट बनाते समय संकेतक एक साथ संपीड़ित हो जाएंगे, जो पढ़ने के लिए बहुत असुविधाजनक है। इसलिए, चार्ट को दो Y अक्षों के साथ कॉन्फ़िगर किया जाना चाहिए। (अतः ‘yAxis’ में दो Y-अक्ष विन्यास हैं, एक सूचक अक्ष है और दूसरा K-रेखा अक्ष है)
इस उदाहरण रणनीति में, मुख्य फ़ंक्शन चार्ट आरंभीकरण को निष्पादित करना शुरू करता है, चार्ट फ़ंक्शन को कॉल करता है, चार्ट कॉन्फ़िगरेशन ChartCfg को पैरामीटर के रूप में पास करता है, और एक चार्ट ऑब्जेक्ट चार्ट उत्पन्न करता है। फिर यह लगातार K-लाइन डेटा प्राप्त करने के लिए एक लूप में प्रवेश करता है। जब तक K-लाइन डेटा BAR की संख्या 50 से अधिक है, तब तक MACD संकेतक की गणना की जा सकती है (यदि बहुत कम BAR हैं, तो कोई प्रभावी संकेतक की गणना नहीं की जा सकती है) . फिर आप के-लाइन डेटा और संकेतक डेटा को चार्ट में लिख सकते हैं। चार्ट में लिखने के लिए, चार्ट ऑब्जेक्ट की add विधि का उपयोग करें। लिखते समय, यदि add फ़ंक्शन का अंतिम पैरामीटर -1 है, तो वर्तमान डेटा बिंदु का मान अपडेट हो जाएगा। यदि -1 पास नहीं किया जाता है, तो एक नया डेटा बिंदु जोड़ा जाएगा। जब K-लाइन BAR नया जनरेट किया जाता है, तो एक नया डेटा पॉइंट जोड़ा जाता है। जब K-लाइन BAR जनरेट नहीं किया जाता है, तो अंतिम BAR और संबंधित संकेतक को अपडेट किया जाता है। (के-लाइन बीएआर के टाइमस्टैम्प की तुलना करके निर्णय लिया गया)

आप इसे वास्तविक समय में भी चला सकते हैं:

नीति उदाहरण पता: https://www.fmz.com/strategy/187379
यदि आपके कोई प्रश्न हों तो संदेश छोड़ने के लिए धन्यवाद।