
En tant que stratégie d’enseignement, il est bien sûr préférable de prendre en compte certaines performances pratiques. La « Stratégie Martin pour les contrats à terme sur crypto-monnaies » est affichée dans la section Watch de FMZ.COM depuis près de six mois. Après avoir traversé de nombreux hauts et bas, on constate que les stratégies de Martin et de grille comportent leurs risques et leurs défauts, et les paramètres conservateurs ne signifient pas qu’ils ne peuvent pas être utilisés.


M. Meng garantit qu’il n’y a absolument aucune recharge pour « fabriquer » la courbe de rendement (tête de chien manuelle).
Cependant, la première version de la stratégie était plutôt rudimentaire. L’interface ne comportait qu’une seule sortie de données sur les positions et les capitaux propres totaux, et la courbe de rendement n’imprimait que les profits et pertes réalisés, sans tenir compte de la perte flottante. De nombreux nouveaux étudiants s’en sont plaints et ont demandé que l’affichage soit optimisé.
Dans cet article, nous allons mettre à niveau cette stratégie qui est utilisée dans la pratique depuis six mois.
La version de la politique avant la mise à niveau est enregistrée dans la page Notes de la politique.

C’est aussi mon habitude de développement personnel. Il est très pratique d’enregistrer chaque détail du développement et de l’itération de la stratégie sur FMZ.COM.
Commencez la mise à niveau !
Tout d’abord, optimisons l’affichage de la « barre d’état ». Les étudiants qui connaissent les documents de développement FMZ savent que les données de la barre d’état sont affichées sur FMZ à l’aide deLogStatusfonction. Ensuite, nous trouvons ce point d’entrée et commençons à concevoir le code.

Ensuite, ajoutez un gros morceau de code ici :
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) + "`")
Remplacer le brut précédentLogStatusSortir
LogStatus(_D(), "当前总权益:", currTotalEq, "持仓:", pos)
La stratégie ajoute 2 paramètres :

Paramètres de showLine Si cette case est cochée, vous pouvez utiliser la bibliothèque de dessins au trait pour dessiner sur la page de trading réelle, en dessinant le prix de la position, le prix de l’ordre en attente et la courbe de prix actuelle.
Paramètre SpecifyPosField Il est utilisé pour définir les champs d’origine des informations de position qui doivent être affichées, car les noms des champs de données d’origine des positions sont différents pour chaque bourse. Nous concevons donc ici un paramètre personnalisé pour spécifier le nom du champ à afficher. Par exemple, mon compte réel Binance :

Je souhaite afficher le champ Info des données d’informations de position (les données d’origine de l’interface d’échange)unRealizedProfitAttribut, c’est-à-dire le profit et la perte non réalisés de la position. Vous pouvez définir le paramètre SpecifyPosField sur unRealizedProfit. Il sera affiché dans la barre d’état.
Une conception aussi similaire permet à la stratégie d’adapter la sortie à des données non uniformes, donnant aux utilisateurs la possibilité de personnaliser le contenu de la sortie.


Vous pouvez voir que les données à afficher sont claires en un coup d’œil. Il est beaucoup plus pratique d’observer la progression des échanges de la stratégie, le prix de la position actuelle, les profits et les pertes et le prix de l’ordre en attente. Cette stratégie comporte certains risques. Veuillez définir des paramètres spécifiques en fonction de votre propre contrôle des risques et assumer vos propres profits et pertes. La stratégie est divulguée uniquement à des fins de communication et d’apprentissage.