[TOC]

পরিমাণগত ট্রেডিংয়ে, ঐতিহ্যবাহী ক্যান্ডেলস্টিক চার্ট হল সবচেয়ে বেশি ব্যবহৃত ডেটা উপস্থাপনা ফর্মগুলির মধ্যে একটি, তবে এর কিছু সীমাবদ্ধতাও রয়েছে, যেমন ওঠানামার প্রতি সংবেদনশীলতা বা অতিরিক্ত শব্দ। দামের প্রবণতা আরও স্পষ্টভাবে পর্যবেক্ষণ করার জন্য, ব্যবসায়ীরা প্রায়শই কিছু উন্নত চার্ট ব্যবহার করেন, যেমন:
এই প্রবন্ধে FMZ পরিমাণগত ট্রেডিং প্ল্যাটফর্মে সাধারণ K-লাইনের উপর ভিত্তি করে ইটের চার্ট এবং গড় K-লাইন ডেটা কীভাবে গণনা করা যায় তা উপস্থাপন করা হবে এবং কৌশল বিকাশকারীদের বাজারের প্রবণতা আরও স্বজ্ঞাতভাবে বিশ্লেষণ করতে সহায়তা করার জন্য অঙ্কনের প্রভাব দেখানো হবে।
রেনকো চার্টে “ইট” কে ইউনিট হিসেবে ব্যবহার করা হয় এবং একটি নতুন ইট তখনই টানা হয় যখন দাম একটি নির্দিষ্ট সীমার (যেমন $100) বাইরে ওঠানামা করে।
ট্রেডিং সিগন্যালের ব্যাখ্যা
মূল গণনার যুক্তি:
ইটের চিত্র (রেনকো) গণনা করুন এবং কোডটি আঁকুন:
/*backtest
start: 2025-05-01 00:00:00
end: 2025-06-06 00:00:00
period: 1h
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT","balance":1000,"stocks":0.5}]
*/
let globalbricks = []
let lastBarTime = 0
function getBricks(r, brickSize, sourceAttribute, lastPrice) {
for (let i = 1; i < r.length; i++) {
let bar = r[i]
let price = bar[sourceAttribute]
let time = bar.Time
if (time < lastBarTime) {
continue
}
// 遍历原始K线数据
while (Math.abs(price - lastPrice) >= brickSize) {
if (globalbricks.length > 0 && time == globalbricks[globalbricks.length - 1].Time) {
time = globalbricks[globalbricks.length - 1].Time + 1000
}
// 构造砖块
let brick = {
Time: time,
Open: lastPrice,
Close: 0,
High: 0,
Low: 0
}
if (price > lastPrice) {
// 上涨砖块
lastPrice += brickSize
brick.Close = lastPrice
brick.High = lastPrice
brick.Low = brick.Open
} else {
// 下跌砖块
lastPrice -= brickSize
brick.Close = lastPrice
brick.High = brick.Open
brick.Low = lastPrice
}
// 放入数组
globalbricks.push(brick)
// time 累加1秒,防止一根BAR分成多块brick时断开
time += 1000
}
lastBarTime = bar.Time
}
return globalbricks
}
function getRenko(r, brickSize, sourceAttribute) {
// 原始K线数据如果不符合计算要求,直接返回
if (!r || r.length <= 0) {
return null
}
if (globalbricks.length == 0) {
return getBricks(r, brickSize, sourceAttribute, r[0][sourceAttribute])
} else {
return getBricks(r, brickSize, sourceAttribute, globalbricks[globalbricks.length - 1].Close)
}
}
function main() {
let c = KLineChart({
overlay: true
})
while (true) {
let r = _C(exchange.GetRecords)
let bricks = getRenko(r, 100, "Close")
bricks.forEach(function (brick, index) {
c.begin(brick)
c.close()
})
Sleep(1000)
}
}
ব্যাকটেস্ট টেস্টিং

হাইকিন আশি হল ঐতিহ্যবাহী কে-লাইনের একটি মসৃণকরণ প্রক্রিয়া
গণনা পদ্ধতিটি নিম্নরূপ:
HA_Close = (Open + High + Low + Close) / 4
HA_Open = (前一根 HA_Open + 前一根 HA_Close) / 2
HA_High = max(High, HA_Open, HA_Close)
HA_Low = min(Low, HA_Open, HA_Close)
Heikin Ashi 本质上是一种移动平均滤波的 K 线,具有趋势持续性更强的特点。
ট্রেন্ড বিচার এবং সংকেত স্বীকৃতি
বাস্তবায়ন কোড এবং অঙ্কন:
/*backtest
start: 2025-05-01 00:00:00
end: 2025-06-06 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT","balance":1000,"stocks":0.5}]
*/
function toHeikinAshi(records) {
if (!records || records.length == 0) {
return null
}
let haRecords = []
for (let i = 0; i < records.length; i++) {
let r = records[i]
let ha = {}
ha.Time = r.Time
ha.Close = (r.Open + r.High + r.Low + r.Close) / 4
if (i === 0) {
// 第一根 Heikin Ashi 的开盘价用普通K线的开盘价和收盘价的均值
ha.Open = (r.Open + r.Close) / 2
} else {
// 后续每根的开盘价 = 上一根Heikin Ashi开盘价和收盘价均值
ha.Open = (haRecords[i - 1].Open + haRecords[i - 1].Close) / 2
}
ha.High = Math.max(r.High, ha.Open, ha.Close)
ha.Low = Math.min(r.Low, ha.Open, ha.Close)
haRecords.push(ha)
}
return haRecords
}
function main() {
let c = KLineChart({
overlay: true
})
while (true) {
let r = _C(exchange.GetRecords)
let heikinAshiRecords = toHeikinAshi(r)
heikinAshiRecords.forEach(function (bar, index) {
c.begin(bar)
c.close()
})
Sleep(1000)
}
}
ব্যাকটেস্ট টেস্টিং

ট্রেন্ড ট্রেডারদের জন্য রেনকো চার্ট এবং হাইকিন আশি শক্তিশালী হাতিয়ার:
ব্যাকটেস্টিং এবং রিয়েল-টাইম যাচাইকরণ একত্রিত করার পরামর্শ দেওয়া হচ্ছে, আপনার নিজস্ব ট্রেডিং পণ্য এবং চক্রের জন্য উপযুক্ত একটি চার্ট সমাধান বেছে নিন এবং একটি ব্যক্তিগতকৃত পরিমাণগত ট্রেডিং সিস্টেম তৈরি করুন।