Решетка стратегия и Мартингейл стратегия, которая любит колебаться рыночные котировки, имеют неотъемлемые недостатки, и аналогичные стратегии были протестированы на рынке контрактов ETH в течение определенного периода времени.FMZ.COMЕсть одна вещь, с которой я действительно согласен с другом по поводу этого типа стратегии. Это заключается в том, чтобы делать контракты в валютном круге, и риск делать длинный меньше, чем делать короткий. Или просто говоря, худшее падение - вернуться к нулю, но рост бесконечен.
Итак, такие стратегии, как Мартингейл и Грид, делают только длинные, но не короткие? Лучше ли распространять риск рыболовства в длинном диапазоне, чем делать двустороннее? Эта идея звучит очень хорошо, но никто не знает, выдержит ли она фактический бой. Но по крайней мере мы можем просто проверить эту идею. Поэтому у нас есть тема сегодняшней статьи - Разработка контрактной стратегии рыболовства внизу.
Код для реализации этой идеи очень прост, благодаря гибкости, инкапсуляции интерфейса и мощной системе бэкстеста платформы FMZ и так далее. Весь код составляет всего 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)
}
}
Конструкция параметров также очень проста:
Есть только несколько параметров.
Установите временной диапазон обратного тестирования случайным образом:
Проверка на обратном пути:
Это выглядит как стратегия сетки или Мартингейла. Новые учащиеся, которые только начинают, очень боятся такого рода длинных стратегий и легко убеждаются бросить?
Вышеперечисленные коды стратегии используются только для исследований и исследований.