Type/to search
8
Follow
1363
Followers
¡Herramienta de mejora visual! Usa gráficos de bloques y velas promedio para comprender las tendencias del mercado en FMZ.
Discussions
Created 2025-06-06 09:27:29  Updated 2025-06-06 17:34:58
 2
 959

img

En el trading cuantitativo, el gráfico de velas tradicional es una de las formas de representación de datos más utilizadas, pero también presenta ciertas limitaciones, como su insensibilidad a las fluctuaciones o al ruido excesivo. Para observar las tendencias de precios con mayor claridad, los operadores suelen utilizar gráficos mejorados, como:

  • Renko: realiza sorteos basados ​​en cambios de precios en lugar de tiempo, filtrando eficazmente el ruido del mercado.
  • Heikin Ashi: suaviza los datos de precios para mostrar la dirección de la tendencia de forma más intuitiva.

Este artículo presentará cómo calcular gráficos de ladrillos y datos de línea K promedio basados ​​en la línea K ordinaria en la plataforma de comercio cuantitativo FMZ, y mostrará el efecto de dibujo para ayudar a los desarrolladores de estrategias a analizar las tendencias del mercado de manera más intuitiva.

Gráfico de ladrillos (Renko)

El gráfico Renko utiliza "ladrillos" como unidades, y solo se dibuja un nuevo ladrillo cuando el precio fluctúa más allá de un rango fijo (como $100).

  • Ventajas: Basándose en los cambios de precios, filtra pequeñas fluctuaciones en el mercado y destaca las principales tendencias.
  • Escenarios aplicables: Adecuado para identificar tendencias a mediano y largo plazo y reducir la interferencia de ruido en las transacciones.

Interpretación de señales comerciales

  • Confirmación de tendencia: los ladrillos en ascenso continuo indican una tendencia fuerte y puedes mantener una posición; la aparición de ladrillos inversos es una señal de inversión de tendencia.
  • Operaciones de ruptura: cuando aparece un nuevo ladrillo, especialmente cuando rompe el máximo o mínimo anterior, considere ingresar al mercado.
  • Filtrado de rupturas falsas: dado que el gráfico de ladrillo ignora las pequeñas fluctuaciones, ayuda a filtrar pequeñas rupturas falsas durante el período de oscilación.

Lógica de cálculo básica:

  • Establecer el tamaño del ladrillo brickSize
  • Con base en el precio inicial, compare constantemente si el último precio se desvía del precio del ladrillo anterior en más de brickSize
  • Si el precio sube más allá del límite, se dibuja un ladrillo ascendente; lo mismo se aplica al precio descendente.

Calcula el diagrama de ladrillos (Renko) y dibuja el código:

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) } }

Prueba retrospectiva

img

Heikin Ashi

Heikin Ashi es un proceso de suavizado de la línea K tradicional.

  • Ventajas: Proporciona una dirección de tendencia más clara y reduce las señales falsas al suavizar los datos de precios.
  • Escenarios aplicables: Aplicable a estrategias de seguimiento de tendencias, ayudando a los traders a mantener posiciones durante más tiempo en las tendencias.

El método de cálculo es el siguiente:

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

Juicio de tendencias y reconocimiento de señales

  • Una vela alcista con un cuerpo grande y casi sin sombras superiores o inferiores indica una fuerte tendencia alcista.
  • Una línea negativa con un cuerpo grande y casi sin sombras superiores o inferiores indica una fuerte tendencia a la baja.
  • Las sombras superiores e inferiores se están alargando, y el cuerpo real se está reduciendo. La tendencia se está debilitando, así que cuidado con las reversiones.
  • El cuerpo es muy corto y la sombra es larga. El mercado es volátil, así que no operes por ahora.

Código de implementación y dibujo:

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) } }

Prueba retrospectiva

img

END

Los gráficos Renko y Heikin Ashi son herramientas poderosas para los traders de tendencias:

  • El gráfico Renko se centra en el desplazamiento de precios y es adecuado para avances y confirmaciones de tendencias.
  • Heikin Ashi se centra en la suavización de precios y es adecuado para el control de posiciones de tendencia.
  • El uso complementario de ambos puede mejorar la estabilidad y la capacidad antichoque de las señales de estrategia de tendencia.

Se recomienda combinar backtesting y verificación en tiempo real, elegir una solución de gráficos que se adapte a sus propios productos y ciclos comerciales y crear un sistema comercial cuantitativo personalizado.

Comment
All comments (2)

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

    10 months ago

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

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