এফএমজেড কোয়ান্ট ব্যাকটেস্টে কৌশল প্রোগ্রামটি একটি সম্পূর্ণ নিয়ন্ত্রণ প্রবাহ, এবং প্রোগ্রামটি একটি নির্দিষ্ট ফ্রিকোয়েন্সি অনুসারে ক্রমাগত পোল করা হয়। প্ল্যাটফর্ম এপিআই দ্বারা প্রত্যাবর্তিত প্রতিটি বাজার কোট এবং ডেটা কলের সময় অনুসারে প্রকৃত রানটাইম পরিস্থিতি সিমুলেট করে। ব্যাকটেস্টটি অন্যান্য ব্যাকটেস্ট সিস্টেমের অনবার স্তরের নয়, অনটিক স্তরের অন্তর্গত। এটি টিকার ডেটা (উচ্চ অপারেটিং ফ্রিকোয়েন্সি সহ কৌশল) এর উপর ভিত্তি করে কৌশলগুলির ব্যাকটেস্টকে আরও ভাল সমর্থন করে।
সিমুলেশন লেভেল ব্যাকটেস্ট ব্যাকটেস্ট সিস্টেমের আন্ডারলেয়ার K-লাইন ডেটা উপর ভিত্তি করে; এটি একটি নির্দিষ্ট অ্যালগরিদম অনুযায়ী, প্রদত্ত সর্বোচ্চ মূল্য, সর্বনিম্ন মূল্য, খোলা মূল্য এবং অন্তর্নিহিত K-লাইন বারের বন্ধ মূল্যের কাঠামোর মধ্যে, এই বারের সময় সিরিজে টিকার ডেটা অন্তর্ভুক্তির অনুকরণ করে।
বাস্তব বাজার স্তরের ব্যাকটেস্ট হল বারের সময় সিরিজের বাস্তব টিকার স্তরের ডেটা। টিকার-স্তরের ডেটা ভিত্তিক কৌশলগুলির জন্য, বাস্তব বাজার স্তরের ব্যাকটেস্ট ব্যবহার করা বাস্তবতার কাছাকাছি। বাস্তব বাজারের স্তরের ব্যাকটেস্টে, টিকারটি প্রকৃতপক্ষে রেকর্ড করা ডেটা, সিমুলেটেড নয়।
প্রকৃত বাজারের স্তরের ব্যাকটেস্টের জন্য কোন আন্ডারলেয়ার কে-লাইন বিকল্প নেই (কারণ টিকার ডেটা বাস্তব, আন্ডারলেয়ার কে-লাইন সিমুলেশনের জন্য ব্যবহার করা হবে না) । সিমুলেশন স্তরের ব্যাকটেস্টে, টিকার ডেটা সিমুলেট করা হয় এবং কে-লাইন ডেটার ভিত্তিতে উত্পন্ন হয়। এই কে-লাইন ডেটা হল আন্ডারলেয়ার কে-লাইন। সিমুলেশন স্তরের ব্যাকটেস্টের প্রকৃত ক্রিয়াকলাপে, কৌশলটি চলাকালীন, কে-লাইন পেতে এপিআই কল করার সময়ের চেয়ে আন্ডারলেয়ার কে-লাইনের সময়কাল কম হতে হবে। অন্যথায়, আন্ডারলেয়ার কে-লাইনের বড় সময়কাল এবং উত্পন্ন টিকারগুলির অপর্যাপ্ত সংখ্যার কারণে, যখন নির্দিষ্ট সময়ের কে-লাইন পেতে এপিআইকে বলা হয়, তখন ডেটা বিকৃত হবে। যখন একটি বড়-অবধি কে-লাইন ব্যাকটেস্ট ব্যবহার করা হয়, তখন আপনি যথাযথভাবে আন্ডারলেয়ার কে-লাইন সময়কাল বড় সেট করতে পারেন।
আন্ডারলেয়ার K-লাইন সিমুলেটেড টিকার তৈরির প্রক্রিয়াটি MT4 এর মতোইঃসম্পর্কিত লিঙ্ক
আন্ডারলেয়ার কে-লাইন ডেটা সিমুলেটেড টিক ডেটাতে রূপান্তর করার জন্য নির্দিষ্ট অ্যালগরিদমঃ
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
}
সুতরাং, যখন সিমুলেশন স্তরের ব্যাকটেস্ট চালানো হবে তখন সময় সিরিজে মূল্যের গতি থাকবে।