В качестве учебной стратегии лучше всего учитывать практику.FMZ.COMПосле нескольких трудностей, стратегии Мартингейла и сетки имеют свои риски и недостатки, и с консервативно установленными параметрами, они все еще могут быть полезны.
Бот Binance Futures
Бот dYdX
Я всегда гарантирую, что нет абсолютно никакой подзарядки для создания кривой доходности.
Это просто потому, что дизайн стратегии первой версии относительно простой и грубый. Есть только одна позиция и экспорт данных об общем капитале на интерфейсе. Кривая прибыли печатает только реализованную прибыль и убытки, и не считает плавающий убыток. Многие новые студенты жаловались и просили оптимизировать отображение.
В этой статье я буду работать с вами, чтобы обновить стратегию, которая была стабильной и практичной в течение полугода.
Версия стратегии до обновления записывается на странице "Примечание" к стратегии.
Это также моя личная привычка развития. Это очень удобно, чтобы записать каждый бит разработки стратегии и итерации наFMZ.COM.
Начинайте обновлять!
Во-первых, давайте оптимизируем дисплей LogStatus
Функция используется для отображения данных строки состояния на FMZ. Затем мы находим эту точку входа и начинаем проектировать код.
Далее добавьте большой кусок кода:
var tblPos = {
"type" : "table",
"title" : "position",
"cols" : ["position amount", "position direction", "position average price", "position profit and loss", "contract code", "custom feild / " + SpecifyPosField],
"rows" : []
}
var descType = ["long position", "short position"]
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" : "data",
"cols" : ["current total equity", "actual profit and loss", "current price", "buy order price/amount", "sell order price/amount"],
"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)])
// Update the chart data
if (t && showLine) {
_.each(pos, function(p) {
$.PlotLine(descType[p.Type] + "position price", p.Price)
})
$.PlotLine("buy order price", buyOrder.Price)
$.PlotLine("sell order price", sellOrder.Price)
$.PlotLine("current price", t.Last)
}
// Update the status bar data
LogStatus("time:" + _D() + "\n" + "`" + JSON.stringify(tblPos) + "`" + "\n" + "`" + JSON.stringify(tbl) + "`")
Заменить предыдущий грубыйLogStatus
export.
LogStatus(_D(), "Current total equity:", currTotalEq, "position:", pos)
В стратегию были добавлены два параметра:
показывай Проверьте это, и вы можете использовать библиотеку чертежей линий, чтобы нарисовать на странице бота, и нарисовать цену позиции, цену ожидания и текущие кривые цены.
УказатьПоле Он используется для настройки сырого поля информации о местоположении, которое необходимо отобразить, потому что название сырого поля данных о местоположении каждой платформы отличается. Например, мой бот Binance:
Я хочу показатьunRealizedProfit
Вы можете установить параметр SpecifyPosField на unRealizedProfit и отобразить его в строке состояния.
Такая аналогичная конструкция позволяет стратегии адаптивно экспортировать неравномерные данные, предоставляя пользователям возможность настраивать экспортный контент.
Вы можете увидеть данные, которые необходимо отобразить на один взгляд. гораздо удобнее наблюдать за ходом торговли стратегии, текущей ценой позиции, прибылью и убытком, и ценой ордера. Стратегия имеет определенные риски, и бот будет устанавливать конкретные параметры в соответствии со своим собственным контролем рисков, и нести ответственность за свои собственные прибыли и убытки.