Код из 60 строк, реализующий одну мысль - контрактная рыбалка

Автор:Нинабадасс., Создано: 2022-04-02 18:27:54, Обновлено: 2022-04-02 18:29:47

Код из 60 строк, реализующий одну мысль - контрактная рыбалка

Решетка стратегия и Мартингейл стратегия, которая любит колебаться рыночные котировки, имеют неотъемлемые недостатки, и аналогичные стратегии были протестированы на рынке контрактов ETH в течение определенного периода времени.FMZ.COMЕсть одна вещь, с которой я действительно согласен с другом по поводу этого типа стратегии. Это заключается в том, чтобы делать контракты в валютном круге, и риск делать длинный меньше, чем делать короткий. Или просто говоря, худшее падение - вернуться к нулю, но рост бесконечен.

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

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

Конструкция параметров также очень проста:

img

Есть только несколько параметров.

Давайте посмотрим результаты тестов десятков строк кода.

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

img

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

img

img

Это выглядит как стратегия сетки или Мартингейла. Новые учащиеся, которые только начинают, очень боятся такого рода длинных стратегий и легко убеждаются бросить?

Вышеперечисленные коды стратегии используются только для исследований и исследований.


Больше