作为一个教学策略,兼顾一定的实战性能当然是最好的。「数字货币期货类马丁策略」在FMZ.COM围观板块也已经展示了小半年了。经历了好几拨风吹雨打,马丁、网格策略有其风险硬伤,参数保守一点也不是不能用。
Le cours réel des contrats à terme
Disque dYdX
Il y a une grande différence entre les deux types de produits, mais il y a une différence entre les deux types de produits.
Cependant, la première version de la stratégie est relativement simple, l'interface ne contient qu'un seul stock, une sortie de données sur les droits d'auteur et les avantages, et la courbe des bénéfices n'est imprimée que pour réaliser des gains et des pertes, sans compter les pertes et les pertes.
Ce billet nous aide à mettre à niveau cette stratégie de stabilité de six mois.
Les versions de la politique avant la mise à niveau sont enregistrées sur la page "Notes" de la politique.
这个也是我的个人开发习惯,在FMZ.COM上很方便记录策略开发、迭代的点点滴滴。
Commencez la mise à niveau!
Tout d'abord, nous avons optimisé la barre d'état pour montrer que les élèves qui connaissent la documentation de développement FMZ savent que les données de la barre d'état sont utilisées pour afficher les données de la barre d'état sur FMZ.LogStatus
Donc, nous avons trouvé ce point d'entrée et nous avons commencé à concevoir le code.
Il y a une grande partie de code qui est ajoutée 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) + "`")
Il a remplacé le simpleLogStatus
Produit
LogStatus(_D(), "当前总权益:", currTotalEq, "持仓:", pos)
La stratégie a ajouté deux paramètres:
Paramètres showLine Si vous le souhaitez, vous pouvez utiliser la bibliothèque de lignes graphiques pour dessiner sur la page du disque dur des prix de détention, des prix de soumission, des courbes de prix actuelles.
Indiquez le champ PosField Pour définir les champs de données de base de l'information de détention qui doivent être affichés, car les noms des champs de données de base de détention de chaque échange sont différents. Par exemple, mon disque de Bitcoin:
Je veux afficher les données d'information de stockage dans le champ Info.unRealizedProfit
Propriété, le détenteur n'a pas réalisé de profit ou de perte. Vous pouvez définir le paramètre SpecifyPosField comme unRealizedProfit.
Une conception similaire permettrait aux stratégies d'adapter les sorties à des données non uniformes, en donnant aux utilisateurs la possibilité de personnaliser le contenu des sorties.
Vous pouvez voir les données à afficher en un coup d'œil. Il est beaucoup plus facile d'observer l'évolution des transactions, les prix actuels, les gains, les pertes et les prix des ordres de vente. Les stratégies comportent un certain risque, le disque réel définit des paramètres de contrôle spécifiques en fonction de ses propres risques, et prend en charge les gains et les pertes.
AAA386En somme, n = 1 dans le code source ne semble pas avoir de sens?
Un ermiteJe pense que c'est bien de faire de l'or XAUUSD relativement en plein essor en plein essor il n'y a pas de cercle aussi fort
Je vous en prie.Il y a une variété de devises, le rêve est de faire fonctionner plusieurs monnaies en même temps.
L'inventeur de la quantification - un petit rêveIl est possible de le concevoir, mais le risque est plus important, alors on écrit n = 1.
L'inventeur de la quantification - un petit rêveOui, parce que les prix des différentes paires de transactions sont si différents qu'il est impossible de les représenter intuitivement, il faut les concevoir en pourcentage. Si vous voulez continuer à représenter les prix, vous devez définir un paramètre d'arithmétique pour définir les différences de prix de ces différentes variétés séparément.