Стратегия сетки, Мартингейл стратегия, которые предпочитают рыночные колебания, имеют свои недостатки, и они были протестированы в течение некоторого времени на рынке контрактов ETH.FMZ.COMОдна вещь об этой стратегии я очень согласен с другом, это то, что, как и для контрактов, идти долго имеет меньший риск, чем идти коротко на рынке цифровой валюты.
Итак, Мартингейл, Грид и другие стратегии просто будут длинными, а не короткими, и распределить риск рыболовства в длинном диапазоне будет лучше, чем двусторонняя позиция? Эта идея звучит очень хорошо, но никто не знает, может ли она быть реализована на практике. Но, по крайней мере, мы можем просто проверить ее. Итак, у нас сегодня
Код для реализации этой идеи действительно прост, благодаря гибкости платформы, инкапсуляции интерфейса, мощной системе бэкстестинга и так далее. Полный код имеет всего 60 строк (для спецификации написания кода многие из них не сокращены).
Идея дизайна стратегии очень проста. Положите ордер на покупку вниз с интервалами в соответствии с начальной ценой в начале логики, и если цена продолжает снижаться, мы продолжаем размещать ордер на покупку и продолжаем ловить рыбу на дне. Затем мы размещаем ордер на закрытие позиции на основе цены позиции, увеличивающей определенную маржу прибыли, и ждем закрытия позиции. Если позиция закрыта, вышеуказанная логика будет повторяться с текущей ценой в качестве начальной цены. Стратегия не будет короткой, чтобы удержать позицию, но будет длинной только.
Источник стратегии:
function cancelAll() {
while (true) {
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
break
}
for (var i = 0 ; i < orders.length ; i++) {
exchange.CancelOrder(orders[i].Id, orders[i])
Sleep(interval)
}
}
}
function getLong(arr, kind) {
var ret = null
for (var i = 0 ; i < arr.length ; i++) {
if (arr[i].Type == (kind == "pos" ? PD_LONG : ORDER_TYPE_BUY)) {
ret = arr[i]
}
}
return ret
}
function pendingBidOrders(firstPrice) {
var index = 0
var amount = baseAmount
while (true) {
var pos = _C(exchange.GetPosition)
var price = firstPrice - index * baseSpacing
amount *= ratio
index++
exchange.SetDirection("buy")
exchange.Buy(price, amount)
if (pos.length != 0) {
var longPos = getLong(pos, "pos")
if (longPos) {
exchange.SetDirection("closebuy")
exchange.Sell(longPos.Price + profitTarget, longPos.Amount)
}
}
while (true) {
Sleep(interval)
if (!getLong(_C(exchange.GetOrders), "orders")) {
cancelAll()
break
}
if (!getLong(_C(exchange.GetPosition), "pos")) {
cancelAll()
return
}
}
}
}
function main() {
exchange.SetContractType(symbol)
while (true) {
pendingBidOrders(_C(exchange.GetTicker).Last)
}
}
Дизайн параметров также очень прост:
Только с этими 6 параметрами.
Установите временной диапазон обратного тестирования случайным образом:
Проверка на обратном пути:
Это похоже на стратегию сетки, стратегию Мартингейла очень ~. Студенты, которые начинают, обычно боятся стратегии с длинным кодом, который легко отговорить. Короткая и лаконичная стратегия для начала легче и более уместно понять идеи стратегии и изучить логический дизайн.
Код стратегии предназначен только для исследований и исследований.