
Como estrategia de enseñanza, por supuesto, lo mejor es tener en cuenta ciertos resultados prácticos. La “Estrategia de Martin para futuros de criptomonedas” se ha mostrado en la sección Watch de FMZ.COM durante casi medio año. Después de pasar por muchos altibajos, se descubre que las estrategias de Martin y de cuadrícula tienen sus riesgos y deficiencias, y los parámetros conservadores no significan que no se puedan utilizar.


El señor Meng garantiza que no hay absolutamente ningún recargo para “fabricar” la curva de rendimiento (cabeza de perro manual).
Sin embargo, la primera versión del diseño de la estrategia era bastante rudimentaria. En la interfaz solo se mostraban los datos de una posición y del capital total, y la curva de rendimiento solo mostraba las ganancias y pérdidas realizadas, sin tener en cuenta la pérdida flotante. Muchos estudiantes nuevos se quejaron y pidieron que se optimizara la visualización.
En este artículo actualizaremos esta estrategia que se viene utilizando en la práctica desde hace medio año.
La versión de la política antes de la actualización se registra en la página Notas de la política.

Este también es mi hábito de desarrollo personal. Es muy conveniente registrar cada detalle del desarrollo y la iteración de la estrategia en FMZ.COM.
¡Empieza a actualizar!
Primero, optimicemos la visualización de la “barra de estado”. Los estudiantes que están familiarizados con los documentos de desarrollo de FMZ saben que los datos de la barra de estado se muestran en FMZ medianteLogStatusfunción. Luego encontramos este punto de entrada y comenzamos a diseñar el código.

A continuación, agregue un gran fragmento de código aquí:
var tblPos = {
"type" : "table",
"title" : "持仓",
"cols" : ["持仓数量", "持仓方向", "持仓均价", "持仓盈亏", "合约代码", "自定义字段 / " + SpecifyPosField],
"rows" : []
}
var descType = ["多头仓位", "空头仓位"]
for (var posIndex = 0 ; posIndex < pos.length ; posIndex++) {
tblPos.rows.push([pos[posIndex].Amount, descType[pos[posIndex].Type], pos[posIndex].Price, pos[posIndex].Profit, pos[posIndex].ContractType, SpecifyPosField == "" ? "--" : pos[posIndex].Info[SpecifyPosField]])
}
var tbl = {
"type" : "table",
"title" : "数据",
"cols" : ["当前总权益", "实际盈亏", "当前价格", "买单价格/数量", "卖单价格/数量"],
"rows" : []
}
var buyOrder = null
var sellOrder = null
for (var orderIndex = 0 ; orderIndex < orders.length ; orderIndex++) {
if (orders[orderIndex].Type == ORDER_TYPE_BUY) {
buyOrder = orders[orderIndex]
} else {
sellOrder = orders[orderIndex]
}
}
var realProfit = currTotalEq - totalEq
if (exchange.GetName() == "Futures_Binance") {
_.each(pos, function(p) {
realProfit += parseFloat(p.Info.unRealizedProfit)
})
}
var t = exchange.GetTicker()
tbl.rows.push([currTotalEq, realProfit, t ? t.Last : "--", (buyOrder.Price + "/" + buyOrder.Amount), (sellOrder.Price + "/" + sellOrder.Amount)])
// 更新图表数据
if (t && showLine) {
_.each(pos, function(p) {
$.PlotLine(descType[p.Type] + "持仓价格", p.Price)
})
$.PlotLine("买单挂单价格", buyOrder.Price)
$.PlotLine("卖单挂单价格", sellOrder.Price)
$.PlotLine("当前价格", t.Last)
}
// 更新状态栏数据
LogStatus("时间:" + _D() + "\n" + "`" + JSON.stringify(tblPos) + "`" + "\n" + "`" + JSON.stringify(tbl) + "`")
Reemplazar el crudo anteriorLogStatusProducción
LogStatus(_D(), "当前总权益:", currTotalEq, "持仓:", pos)
La estrategia añade 2 parámetros:

Parámetros de showLine Si está marcada, puede usar la biblioteca de dibujo de líneas para dibujar en la página de negociación real, dibujando el precio de la posición, el precio de la orden pendiente y la curva de precio actual.
Parámetro SpecifyPosField Se utiliza para establecer los campos originales de la información de posición que debe mostrarse, porque los nombres de los campos de datos originales de las posiciones son diferentes para cada intercambio. Aquí diseñamos un parámetro personalizado para especificar el nombre del campo que se mostrará. Por ejemplo, mi cuenta real de Binance:

Quiero mostrar el campo de información de los datos de posición (los datos originales de la interfaz de intercambio)unRealizedProfitAtributo, es decir, la ganancia y pérdida no realizada de la posición. Puede establecer el parámetro SpecifyPosField en unRealizedProfit. Se mostrará en la barra de estado.
Un diseño similar permite que la estrategia adapte la salida a datos no uniformes, brindando a los usuarios la opción de personalizar el contenido de salida.


De un vistazo se puede ver claramente que los datos que deben mostrarse son claros. Es mucho más conveniente observar el progreso comercial de la estrategia, el precio de la posición actual, las ganancias y pérdidas y el precio de la orden pendiente. Esta estrategia conlleva ciertos riesgos. Establezca parámetros específicos según su propio control de riesgos y asuma sus propias ganancias y pérdidas. La estrategia se divulga únicamente para la comunicación y el aprendizaje.