एफएमजेड क्वांट सिमुलेशन लेवल बैकटेस्ट तंत्र विवरण

लेखक:निनाबादास, बनाया गयाः 2022-03-23 10:07:18, अद्यतन किया गयाः 2022-03-28 14:31:37

एफएमजेड क्वांट सिमुलेशन लेवल बैकटेस्ट तंत्र विवरण


  • 1.बैकटेस्ट फ्रेमवर्क

    एफएमजेड क्वांट बैकटेस्ट में रणनीति कार्यक्रम, रणनीति कार्यक्रम एक पूर्ण नियंत्रण प्रवाह है, और कार्यक्रम को एक निश्चित आवृत्ति के अनुसार लगातार पोल किया जाता है। प्लेटफॉर्म एपीआई द्वारा लौटाए गए प्रत्येक बाजार उद्धरण और डेटा वास्तविक रनटाइम स्थितियों का अनुकरण करते हैं, कॉल समय के अनुसार। बैकटेस्ट अन्य बैकटेस्ट सिस्टम के ऑनबार स्तर के बजाय ऑनटिक स्तर से संबंधित है। यह टिकर डेटा (उच्च परिचालन आवृत्ति वाली रणनीतियों) के आधार पर रणनीतियों के बैकटेस्ट का बेहतर समर्थन करता है।

  • 2. सिमुलेशन स्तर और वास्तविक बाजार स्तर के बीच अंतर

    • सिमुलेशन स्तर

      सिमुलेशन स्तर का बैकटेस्ट बैकटेस्ट सिस्टम के अंडरलेयर के-लाइन डेटा पर आधारित है; यह एक निश्चित एल्गोरिथ्म के अनुसार, अंतर्निहित के-लाइन बार के दिए गए उच्चतम मूल्य, निम्नतम मूल्य, खुले मूल्य और बंद मूल्य से बने ढांचे के भीतर, इस बार की समय श्रृंखला में टिकर डेटा के अंतर्निहित होने का अनुकरण करता है।

    • वास्तविक बाजार स्तर

      वास्तविक बाजार स्तर का बैकटेस्ट बार की समय श्रृंखला में वास्तविक टिकर स्तर का डेटा है। टिकर स्तर के डेटा पर आधारित रणनीतियों के लिए, वास्तविक बाजार स्तर के बैकटेस्ट का उपयोग वास्तविकता के करीब है। वास्तविक बाजार स्तर के बैकटेस्ट में, टिकर वास्तव में दर्ज किए गए डेटा हैं, न कि अनुकरण किए गए।

  • 3.सिमुलेशन स्तर बैकटेस्ट तंत्र अंडरलेयर K-लाइन

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

  • 4.Howक्या अंडरलेयर के-लाइन टिकर डेटा उत्पन्न करती है?

    अंडरलेयर के-लाइन जनरेटिंग सिमुलेटेड टिकर का तंत्र MT4 के समान है:सम्बंधित लिंक

    img img img img

  • 5. अंकगणितीय कोड जो टिकर डेटा उत्पन्न करते हैं

    अंडरलेयर के-लाइन डेटा को सिमुलेटेड टिक डेटा में परिवर्तित करने के लिए विशिष्ट एल्गोरिथ्मः

function recordsToTicks(period, num_digits, records) {
    // http://www.metatrader5.com/en/terminal/help/tick_generation
    if (records.length == 0) {
        return []
    }
    var ticks = []
    var steps = [0, 2, 4, 6, 10, 12, 16, 18, 23, 25, 27, 29]
    var pown = Math.pow(10, num_digits)

    function pushTick(t, price, vol) {
        ticks.push([Math.floor(t), Math.floor(price * pown) / pown, vol])
    }

    for (var i = 0; i < records.length; i++) {
        var T = records[i][0]
        var O = records[i][1]
        var H = records[i][2]
        var L = records[i][3]
        var C = records[i][4]
        var V = records[i][5]
        if (V > 1) {
            V = V - 1
        }
        if ((O == H) && (L == C) && (H == L)) {
            pushTick(T, O, V)
        } else if (((O == H) && (L == C)) || ((O == L) && (H == C))) {
            pushTick(T, O, V)
        } else if ((O == C) && ((O == L) || (O == H))) {
            pushTick(T, O, V / 2)
            pushTick(T + (period / 2), (O == L ? H : L), V / 2)
        } else if ((C == H) || (C == L)) {
            pushTick(T, O, V / 2)
            pushTick(T + (period * 0.382), (C == L ? H : L), V / 2)
        } else if ((O == H) || (O == L)) {
            pushTick(T, O, V / 2)
            pushTick(T + (period * 0.618), (O == L ? H : L), V / 2)
        } else {
            var dots = []
            var amount = V / 11
            pushTick(T, O, amount)
            if (C > O) {
                dots = [
                    O - (O - L) * 0.75,
                    O - (O - L) * 0.5,
                    L,
                    L + (H - L) / 3.0,
                    L + (H - L) * (4 / 15.0),
                    H - (H - L) / 3.0,
                    H - (H - L) * (6 / 15.0),
                    H,
                    H - (H - C) * 0.75,
                    H - (H - C) * 0.5,
                ]
            } else {
                dots = [
                    O + (H - O) * 0.75,
                    O + (H - O) * 0.5,
                    H,
                    H - (H - L) / 3.0,
                    H - (H - L) * (4 / 15.0),
                    H - (H - L) * (2 / 3.0),
                    H - (H - L) * (9 / 15.0),
                    L,
                    L + (C - L) * 0.75,
                    L + (C - L) * 0.5,
                ]
            }
            for (var j = 0; j < dots.length; j++) {
                pushTick(T + period * (steps[j + 1] / 30.0), dots[j], amount)
            }
        }
        pushTick(T + (period * 0.98), C, 1)
    }
    return ticks
}

इसलिए, जब सिमुलेशन स्तर का बैकटेस्ट चलाया जाता है, तो समय श्रृंखला में मूल्य में बदलाव होगा।


अधिक