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