संसाधन लोड हो रहा है... लोड करना...

पायथन MACD ड्राइंग का उदाहरण

लेखक:FMZ~Lydia, बनाया गयाः 2022-12-01 16:54:01, अद्यतन किया गयाः 2023-09-11 08:59:21

img

वास्तव में, इस उदाहरण कोड बनाने से पहले, 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)

चार्टCfg चार्ट विन्यास शब्दकोश

..ChartCfgशब्दकोश चर चार्ट विन्यास जानकारी स्टोर करता है, जैसेः इस चार्ट में कितनी पंक्तियाँ हैं? (तीन सूचक पंक्तियाँ, क्रमशः डीआईएफ, डीईए और एमएसीडी) क्या चार्ट में एक K-लाइन है? (type: candlestick K-लाइन डेटा के रूप में सेट प्रकार को संदर्भित करता है) एमएसीडी मान अपेक्षाकृत छोटे हैं। यदि ट्रेडिंग जोड़ी बीटीसी_यूएसडीटी है, तो ड्राइंग करते समय, संकेतक एक साथ संपीड़ित होंगे, जो देखने के लिए बहुत असुविधाजनक है, इसलिए चार्ट को दो वाई अक्षों के रूप में भी कॉन्फ़िगर किया जाना चाहिए। (इसलिए, yAxis में दो वाई-अक्ष कॉन्फ़िगरेशन हैं, एक संकेतक अक्ष है और दूसरा K-लाइन अक्ष है)

भार डेटा

इस उदाहरण रणनीति में, मुख्य फ़ंक्शन चार्ट को आरंभ करना शुरू करता है, यह चार्ट फ़ंक्शन को कॉल करता है, और चार्ट ऑब्जेक्ट उत्पन्न करने के लिए चार्ट कॉन्फ़िगरेशन ChartCfg को पैरामीटर के रूप में पास करता है। फिर यह एक लूप में प्रवेश करता है, लगातार K-लाइन डेटा प्राप्त करता है, यह तय करता है कि K-लाइन डेटा में BAR की संख्या 50 से अधिक है, और फिर MACD संकेतकों की गणना करता है (बहुत कम BAR प्रभावी संकेतकों की गणना नहीं कर सकता है) । फिर हम चार्ट में K-लाइन डेटा और संकेतक डेटा लिख सकते हैं। हम इसे चार्ट ऑब्जेक्ट के जोड़ फ़ंक्शन का उपयोग करके चार्ट में लिखते हैं। लिखने के समय, यदि add फ़ंक्शन का अंतिम पैरामीटर -1 निर्दिष्ट है, तो यह वर्तमान डेटा बिंदु को अद्यतन करने का मान है. यदि -1 स्थानांतरित नहीं किया जाता है, तो एक नया डेटा बिंदु जोड़ा जाता है. जब K-लाइन BAR नया उत्पन्न होता है, तो एक नया डेटा बिंदु जोड़ा जाता है। जब K-लाइन BAR उत्पन्न नहीं होता है, तो अंतिम BAR और संबंधित संकेतक अपडेट किए जाते हैं। (K-लाइन BAR के टाइमस्टैम्प की तुलना करके निर्धारित किया जाता है)

यह सीधे बैकटेस्ट किया जा सकता है

img

यह एक असली बॉट पर भी चल सकता हैः

img

रणनीति उदाहरण पताःhttps://www.fmz.com/strategy/187379

यदि आप किसी भी प्रश्न है, कृपया एक संदेश छोड़ दें. धन्यवाद ~


संबंधित

अधिक