एफएमजेड प्लेटफॉर्म बैकटेस्ट प्रोग्राम एक पूर्ण नियंत्रण प्रक्रिया है, और कार्यक्रम एक निश्चित आवृत्ति के अनुसार नॉन-स्टॉप पोलिंग कर रहा है। प्रत्येक बाजार और ट्रेडिंग एपीआई द्वारा लौटाए गए डेटा कॉल समय के अनुसार वास्तविक चलने के समय का भी अनुकरण करता है। यहonTick
स्तर, नहींonBar
अन्य बैकटेस्ट सिस्टम के स्तर पर।Ticker
डेटा (अधिक परिचालन आवृत्ति वाली रणनीतियाँ) ।
सिमुलेशन स्तर बैकटेस्ट बैकटेस्ट सिस्टम के निचले K-लाइन डेटा पर आधारित है, और एक निश्चित एल्गोरिथ्म के अनुसार, टिकर डेटा इंटरपोलेशन को दिए गए निचले K-लाइन बार के उच्चतम, निम्नतम, उद्घाटन और समापन कीमतों के मूल्यों के ढांचे के भीतर इस में अनुकरण किया जाता है।Bar
समय श्रृंखला।
वास्तविक बाजार स्तर बैकटेस्ट वास्तविक टिकर स्तर डेटा हैBar
वास्तविक बाजार स्तर पर बैकटेस्ट वास्तविक बाजार स्तर पर बैकटेस्ट वास्तविक रिकॉर्ड किए गए डेटा हैं, सिमुलेटेड नहीं।
वास्तविक बाजार बैकटेस्ट के लिए कोई निचला K-लाइन विकल्प नहीं है (क्योंकि टिकर डेटा वास्तविक है, उत्पादन का अनुकरण करने के लिए किसी निचले K-लाइन की आवश्यकता नहीं है) ।
सिमुलेशन स्तर बैकटेस्ट में, उत्पन्नticker
K-लाइन डेटा के आधार पर अनुकरण किया जाता है। यह K-लाइन डेटा निचली K-लाइन है। सिमुलेशन स्तर बैकटेस्ट के वास्तविक उपयोग में, रणनीति चल रही है जब K-लाइन प्राप्त करने के लिए एपीआई को कॉल करने की अवधि से निचली K-लाइन की अवधि कम होनी चाहिए। अन्यथा, निचली K-लाइन के बड़े चक्र और उत्पन्न टिकर्स की अपर्याप्त संख्या के कारण, निर्दिष्ट अवधि की K-लाइन प्राप्त करने के लिए एपीआई को कॉल करते समय डेटा विकृत हो जाएगा। जब बड़े-अवधि K-लाइन बैकटेस्ट का उपयोग करते हैं, तो आप उचित रूप से निचली K-लाइन चक्र बढ़ा सकते हैं।
निचले K लाइन पर अनुकरणीय टिकर उत्पन्न करने का तंत्र प्रसिद्ध ट्रेडिंग सॉफ्टवेयर मेटाट्रेडर 4 के समान है
नीचे के-लाइन डेटा से टिक डेटा का अनुकरण करने के लिए विशिष्ट एल्गोरिथ्मः
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
}
इसलिए, सिमुलेशन स्तर बैकटेस्ट का उपयोग करते समय, समय श्रृंखला में मूल्य कूदेंगे।