Реализовать идею с помощью 60 строк кода - Контрактная рыболовная стратегия

Автор:Лидия., Создано: 2022-11-08 15:30:01, Обновлено: 2023-09-20 09:05:08

img

Стратегия сетки, Мартингейл стратегия, которые предпочитают рыночные колебания, имеют свои недостатки, и они были протестированы в течение некоторого времени на рынке контрактов ETH.FMZ.COMОдна вещь об этой стратегии я очень согласен с другом, это то, что, как и для контрактов, идти долго имеет меньший риск, чем идти коротко на рынке цифровой валюты.

Итак, Мартингейл, Грид и другие стратегии просто будут длинными, а не короткими, и распределить риск рыболовства в длинном диапазоне будет лучше, чем двусторонняя позиция? Эта идея звучит очень хорошо, но никто не знает, может ли она быть реализована на практике. Но, по крайней мере, мы можем просто проверить ее. Итак, у нас сегодня тема статьи разработать контрактную стратегию рыболовства в дно.

Быстрое развитие на основе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)
    }
}

Дизайн параметров также очень прост:

img

Только с этими 6 параметрами.

Посмотрите на результаты обратных тестов.

Установите временной диапазон обратного тестирования случайным образом:

img

Проверка на обратном пути:

img

img

img

Это похоже на стратегию сетки, стратегию Мартингейла очень ~. Студенты, которые начинают, обычно боятся стратегии с длинным кодом, который легко отговорить. Короткая и лаконичная стратегия для начала легче и более уместно понять идеи стратегии и изучить логический дизайн.

Код стратегии предназначен только для исследований и исследований.


Связанные

Больше