avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

60 lignes de code pour mettre en œuvre une idée – stratégie de sélection des contrats les plus bas

Créé le: 2022-03-19 14:37:08, Mis à jour le: 2024-12-02 21:32:02
comments   14
hits   3439

60 lignes de code pour mettre en œuvre une idée – stratégie de sélection des contrats les plus bas

Les stratégies qui privilégient les marchés volatils, comme la stratégie de grille et la stratégie Martingale, présentent des inconvénients inhérents. Des stratégies similaires ont été testées sur le marché des contrats ETH depuis un certain temps. Je discute également souvent et partage mes expériences avec de nouveaux et anciens joueurs sur FMZ.COM. Concernant ce type de stratégie, il y a un point sur lequel je suis tout à fait d’accord avec ce qu’a dit un ami. Autrement dit, lors de la conclusion de contrats dans le secteur des cryptomonnaies, le risque d’être long est légèrement inférieur à celui d’être court. Ou pour le dire plus simplement, la pire baisse possible est zéro, mais la hausse est illimitée.

Ainsi, des stratégies telles que Martingale et Grid, consistant à aller uniquement à l’achat et non à la vente, et à répartir les risques de sélection du bas sur une longue période, seraient-elles meilleures que le trading bilatéral ? Cette idée semble bonne, mais personne ne sait si elle résistera à la pratique. Mais au moins, nous pouvons simplement tester cette idée. Nous avons donc le sujet de l’article d’aujourd’hui : concevoir une stratégie de sélection de contrats de bas de gamme.

Développement rapide basé sur FMZ.COM

Le code pour implémenter cette idée est vraiment très simple, grâce à la flexibilité de la plateforme, à l’encapsulation de l’interface, au puissant système de backtesting, etc. L’ensemble du code ne prend que 60 lignes (pour des raisons de normes d’écriture de code, de nombreuses abréviations ne sont pas utilisées).

La conception de la stratégie est très simple. Selon le prix initial au début de la logique, les ordres d’achat sont placés à intervalles vers le bas. Si le prix continue de baisser, continuez à placer des ordres d’achat pour continuer à pêcher au fond. Ensuite, passez un ordre de clôture basé sur le prix de la position plus une certaine différence de profit et attendez que la position soit fermée. Si la position est fermée, la logique ci-dessus sera répétée avec le prix actuel comme prix initial. La stratégie ne détient pas de positions courtes, uniquement des positions longues.

Code source de la stratégie :

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)
    }
}

La conception des paramètres est également très simple :

60 lignes de code pour mettre en œuvre une idée – stratégie de sélection des contrats les plus bas

Il n’y a que quelques paramètres.

Regardez l’effet backtest de ces dizaines de lignes de code

Définissez simplement la plage de temps du backtest :

60 lignes de code pour mettre en œuvre une idée – stratégie de sélection des contrats les plus bas

Exécution du backtest :

60 lignes de code pour mettre en œuvre une idée – stratégie de sélection des contrats les plus bas

60 lignes de code pour mettre en œuvre une idée – stratégie de sélection des contrats les plus bas

Cela ressemble beaucoup à une stratégie de type grille ou Martin~. Les nouveaux étudiants qui commencent tout juste à apprendre ont-ils peur des stratégies longues et se découragent-ils facilement ? Une introduction brève et concise aux stratégies est plus appropriée, facilitant la digestion des idées stratégiques et l’apprentissage de la conception logique.

Le code de stratégie est uniquement destiné à des fins d’apprentissage et de recherche.