[TOC]

مقداری تجارت میں، روایتی کینڈل سٹک چارٹ سب سے زیادہ استعمال ہونے والے ڈیٹا کی نمائندگی کی شکلوں میں سے ایک ہے، لیکن اس کی کچھ حدود بھی ہیں، جیسے اتار چڑھاؤ یا ضرورت سے زیادہ شور کے لیے غیر حساسیت۔ قیمت کے رجحانات کو زیادہ واضح طور پر دیکھنے کے لیے، تاجر اکثر کچھ بہتر چارٹ استعمال کرتے ہیں، جیسے:
یہ مضمون متعارف کرائے گا کہ FMZ مقداری تجارتی پلیٹ فارم پر عام K-line کی بنیاد پر اینٹوں کے چارٹس اور اوسط 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)
}
}
بیک ٹیسٹنگ

Heikin Ashi روایتی K-line کا ایک ہموار عمل ہے۔
حساب کتاب کا طریقہ درج ذیل ہے:
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)
}
}
بیک ٹیسٹنگ

رینکو چارٹ اور ہیکن ایشی ٹرینڈ ٹریڈرز کے لیے طاقتور ٹولز ہیں:
بیک ٹیسٹنگ اور ریئل ٹائم تصدیق کو یکجا کرنے، ایک ایسا چارٹ حل منتخب کرنے کی سفارش کی جاتی ہے جو آپ کی اپنی تجارتی مصنوعات اور سائیکلوں کے مطابق ہو، اور ایک ذاتی نوعیت کا مقداری تجارتی نظام بنائیں۔