Type/to search
8
Follow
1363
Followers
Outil d'amélioration visuelle ! Utilisez les graphiques en briques et les chandeliers moyens pour comprendre les tendances du marché sur FMZ.
Discussions
Created 2025-06-06 09:27:29  Updated 2025-06-06 17:34:58
 2
 959

img

En trading quantitatif, le graphique en chandeliers traditionnel est l'une des formes de représentation des données les plus couramment utilisées, mais il présente certaines limites, comme une insensibilité aux fluctuations ou un bruit excessif. Afin d'observer plus clairement les tendances des prix, les traders utilisent souvent des graphiques améliorés, tels que :

  • Renko : tirages basés sur les variations de prix plutôt que sur le temps, filtrant efficacement le bruit du marché.
  • Heikin Ashi : Il lisse les données de prix pour montrer la direction de la tendance de manière plus intuitive.

Cet article présentera comment calculer les graphiques en briques et les données moyennes de la ligne K basées sur la ligne K ordinaire sur la plateforme de trading quantitative FMZ, et montrera l'effet de dessin pour aider les développeurs de stratégies à analyser les tendances du marché de manière plus intuitive.

Graphique en briques (Renko)

Le graphique Renko utilise des « briques » comme unités, et une nouvelle brique n'est dessinée que lorsque le prix fluctue au-delà d'une plage fixe (par exemple 100 $).

  • Avantages : Basé sur les variations de prix, il filtre les petites fluctuations du marché et met en évidence les principales tendances.
  • Scénarios applicables : Convient pour identifier les tendances à moyen et long terme et réduire les interférences sonores dans les transactions.

Interprétation des signaux de trading

  • Confirmation de tendance : des briques en hausse continue indiquent une tendance forte et vous pouvez maintenir une position ; l'apparition de briques inversées est un signal d'inversion de tendance.
  • Trading de rupture : lorsqu'une nouvelle brique apparaît, en particulier lorsqu'elle dépasse le précédent plus haut/plus bas, envisagez d'entrer sur le marché.
  • Filtrage des fausses cassures : Étant donné que le graphique en briques ignore les petites fluctuations, il permet de filtrer les petites fausses cassures pendant la période d'oscillation.

Logique de calcul de base :

  • Définir la taille de la brique brickSize
  • En fonction du prix initial, comparez constamment si le dernier prix s'écarte du prix de la brique précédente de plus de brickSize
  • Si le prix monte au-delà de la limite, une brique montante est tirée ; il en va de même pour le prix descendant.

Calculez le schéma de briques (Renko) et dessinez le code :

javascript
/*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) } }

Backtesting

img

Heikin Ashi

Heikin Ashi est un processus de lissage de la ligne K traditionnelle

  • Avantages : Fournit une direction de tendance plus claire et réduit les faux signaux en lissant les données de prix.
  • Scénarios applicables : Applicable aux stratégies de suivi des tendances, aidant les traders à conserver leurs positions plus longtemps dans les tendances.

La méthode de calcul est la suivante :

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 线,具有趋势持续性更强的特点。

Jugement de tendance et reconnaissance des signaux

  • Une bougie haussière avec un grand corps et presque aucune ombre supérieure ou inférieure indique une forte tendance à la hausse
  • Une ligne négative avec un grand corps et presque aucune ombre supérieure ou inférieure indique une forte tendance à la baisse
  • Les ombres supérieures et inférieures s'allongent, et le corps réel rétrécit. La tendance s'affaiblit, alors attention aux retournements de situation.
  • Le corps est très court, l'ombre est longue. Le marché est volatil, donc n'opérez pas pour l'instant.

Code d'implémentation et dessin :

javascript
/*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) } }

Backtesting

img

END

Le graphique Renko et le Heikin Ashi sont des outils puissants pour les traders de tendances :

  • Le graphique Renko se concentre sur le déplacement des prix et convient aux percées et à la confirmation des tendances.
  • Heikin Ashi se concentre sur le lissage des prix et convient au contrôle des positions de tendance.
  • L’utilisation complémentaire des deux peut améliorer la stabilité et la capacité antichoc des signaux de stratégie de tendance.

Il est recommandé de combiner le backtesting et la vérification en temps réel, de choisir une solution graphique adaptée à vos propres produits et cycles de trading et de créer un système de trading quantitatif personnalisé.

Comment
All comments (2)

    砖块图和平均k线做测试数据都对不上,纯纯智商税,真搞不懂为啥很多图标支持这个图而且还是收费

    10 months ago

    砖图和平均K线的行情数据统计方式和普通K线本身就不一样。例如砖图,关注的是价格变化,而非时间周期统计。本身就是不同的统计方式。

    10 months ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)