3
Suivre
1444
Abonnés

Introduction à l'arbitrage Lead-Lag dans les crypto-monnaies (3)

Créé le: 2024-12-24 15:43:36, Mis à jour le: 2024-12-26 12:14:45
comments   2
hits   2012

Introduction à l’arbitrage Lead-Lag dans les crypto-monnaies (3)

Dans l’article précédent, nous avons présenté l’arbitrage « cross-exchange ». Cette fois, nous allons examiner en profondeur comment appliquer l’effet Lead-Lag au trading haute fréquence, ce qui nécessite de capturer de minuscules différences de prix sur une très courte période de temps et de réaliser des bénéfices rapides. L’effet Lead-Lag fournit aux traders des informations prédictives, les aidant à déterminer la tendance des prix à court terme et ainsi à réaliser un arbitrage entre différentes bourses.

Les éléments suivants sontSimplification du code public, et converti en API FMZ. Le principe de code de cette stratégie originale est très simple et était autrefois très rentable. Il n’est actuellement pas disponible et est fourni à titre indicatif uniquement.


Principe de la stratégie haute fréquence Lead-Lag

Le soi-disant « Lead-Lag » peut être compris comme les prix (ou certains indicateurs) de certaines bourses seront plus « avancés » dans les changements globaux du marché, tandis que d’autres bourses ou d’autres indicateurs seront relativement « en retard » (Lag) . Dans cette stratégie, « Prix_1, Prix_2, Prix_3 » représentent les conditions de marché de différentes bourses. Il s’agit de bourses classiques, qui sont plus sensibles aux nouvelles du marché, à leur profondeur de négociation et aux types de participants. Une fois qu’il y a un ordre d’achat ou de vente important, les prix de ces échanges fluctueront en premier. Les fluctuations de prix des échanges commerciaux réels seront légèrement décalées en raison de facteurs tels que les mécanismes de correspondance et les groupes de négociation. À ce stade, une situation où « certains sont en tête et d’autres sont à la traîne » apparaît.

Exploration du carnet d’ordres multi-bourses

La stratégie obtient des données du carnet d’ordres de différentes bourses de manière presque synchrone, telles que le meilleur prix acheteur, le meilleur prix vendeur, le volume des ordres en attente, etc. Les prix moyens (c’est-à-dire la moyenne des prix d’achat et de vente) des différentes bourses sont ensuite comparés pour en déduire la dynamique du marché.

Jugement du signal de tendance

La stratégie se concentre principalement sur les variations de prix de trois bourses externes (okex, binance, huobipro) :

Ici, chaque tendanceX est déterminée par la différence entre le « prix actuel » et le « prix passé » dépassant un certain seuil (niveau * incrément_prix). Après avoir additionné les signaux « haut/bas » des trois bourses, si la tendance générale > 0, cela signifie que le marché est généralement en hausse et que la stratégie est d’acheter ; si la tendance < 0, cela signifie que le marché est généralement en hausse. en baisse, et la stratégie est d’aller vendre.

Ordre à sens unique et contrôle des risques

La stratégie consiste à acheter ou à vendre uniquement après confirmation de la tendance et à annuler l’ordre précédent avant de passer chaque ordre (c’est-à-dire pour éviter les ordres en attente accidentels qui conduisent à une accumulation de risques). Dans le même temps, le script met également en place des modules tels que l’effet de levier, le fonctionnement par lots et la surveillance du contrôle des risques, ce qui signifie que plusieurs comptes et plusieurs paires de devises sont utilisés dans le trading réel, augmentant ainsi la « fréquence de trading » et « l’efficacité de utilisation du capital”.

De plus, cette stratégie est une stratégie à haute fréquence. Vous n’avez pas besoin de prêter attention au profit ou à la perte de chaque ordre, ni de stopper les pertes. Vous pouvez continuer tant qu’il y a une forte probabilité de réaliser un ordre. profit.


Mise en œuvre de la stratégie FMZ

Réglages des paramètres

// 超参设置
const SYMBOL = "BTC_USDT"; // 交易对
const PRICE_INCREMENT = 0.1; // 价格增量
const LEVEL = 10; // 趋势判断的灵敏度
const RATIO = 10; // 下单价格调整比例
const INTERVAL = 200; // 时间间隔(毫秒)
const S_AMOUNT = 0.02; // 默认交易量
const MIN_AMOUNT = 0.005; // 最小交易量

// 初始状态
let buyOrders = [];
let sellOrders = [];
let previousPrices = [0, 0, 0]; // 存储之前的价格
let loop = 0;

Logique de base : obtenir des données et évaluer les tendances

// 获取订单簿数据
function fetchOrderBooks() {
    let orderBooks = [];
    let tasks = [];

    // 启动所有交易所的异步获取订单簿任务
    for (let i = 0; i < exchanges.length; i++) {
        // 假设每个交易所对象都可以调用Go方法
        let task = exchanges[i].Go("GetDepth");
        tasks.push({ index: i, task: task });
    }

    // 等待所有任务完成并收集结果
    for (let i = 0; i < tasks.length; i++) {
        let { index, task } = tasks[i];
        try {
            // 等待异步任务返回结果
            let depth = task.wait(1000);

            // 检查返回的数据是否有效
            if (!depth || !depth.Bids || !depth.Asks) {
                throw new Error("返回的订单簿数据无效");
            }

            // 将有效的订单簿数据添加到结果数组
            orderBooks[index] = depth;
        } catch (error) {
            // 记录错误日志
            Log(`获取交易所${index}订单簿失败: ${error.message}`);

            // 添加默认的订单簿数据以避免崩溃
            orderBooks[index] = {
                Bids: [[0, 0]],
                Asks: [[0, 0]]
            };
        }
    }

    return orderBooks;
}


// 判断趋势
function calculateTrend(orderBooks) {
    let trends = [];
    for (let i = 0; i < orderBooks.length; i++) {
        const midPrice = (orderBooks[i].Bids[0][0] + orderBooks[i].Asks[0][0]) / 2;
        if (midPrice > previousPrices[i] + LEVEL * PRICE_INCREMENT) {
            trends.push(1); // 上升趋势
        } else if (midPrice < previousPrices[i] - LEVEL * PRICE_INCREMENT) {
            trends.push(-1); // 下降趋势
        } else {
            trends.push(0); // 无显著趋势
        }
        previousPrices[i] = midPrice; // 更新价格记录
    }
    return trends.reduce((a, b) => a + b, 0); // 返回总体趋势
}

Passer et annuler des commandes

// 取消所有挂单
function cancelOrders(orders) {
    for (let orderId of orders) {
        try {
            exchanges[0].CancelOrder(orderId); // 默认使用主交易所
            Log(`取消订单: ${orderId}`);
        } catch (error) {
            Log(`取消订单失败: ${error.message}`);
        }
    }
}

// 创建买单
function createBuyOrder(price, amount) {
    try {
        const orderId = exchanges[0].Buy(price, amount);
        buyOrders.push(orderId);
        Log(`创建买单: 价格 ${price}, 数量 ${amount}`);
    } catch (error) {
        Log(`创建买单失败: ${error.message}`);
    }
}

// 创建卖单
function createSellOrder(price, amount) {
    try {
        const orderId = exchanges[0].Sell(price, amount);
        sellOrders.push(orderId);
        Log(`创建卖单: 价格 ${price}, 数量 ${amount}`);
    } catch (error) {
        Log(`创建卖单失败: ${error.message}`);
    }
}

Logique de la stratégie principale

function main() {
    while (true) {
        try {
            // 获取订单簿数据
            const orderBooks = fetchOrderBooks();

            // 计算趋势
            const trend = calculateTrend(orderBooks);
            Log(`当前趋势: ${trend}`);

            // 取消挂单
            cancelOrders(buyOrders);
            cancelOrders(sellOrders);
            buyOrders = [];
            sellOrders = [];

            // 根据趋势下单
            if (trend > 0 && loop > 0) {
                const price = _N(orderBooks[0].Bids[0][0] + RATIO * PRICE_INCREMENT, 2);
                const amount = _N(Math.max(S_AMOUNT, MIN_AMOUNT), 4);
                createBuyOrder(price, amount);
            } else if (trend < 0 && loop > 0) {
                const price = _N(orderBooks[0].Asks[0][0] - RATIO * PRICE_INCREMENT, 2);
                const amount = _N(Math.max(S_AMOUNT, MIN_AMOUNT), 4);
                createSellOrder(price, amount);
            }

            // 循环计数与间隔
            loop++;
            Sleep(INTERVAL);

        } catch (error) {
            Log(`主逻辑错误: ${error.message}`);
        }
    }
}

Analyse des causes d’échec de la stratégie

Les marchés deviennent efficaces

Lorsque de plus en plus de stratégies quantitatives ou à haute fréquence sont impliquées et découvrent la même relation Lead-Lag, un grand nombre de fonds élimineront rapidement la différence de prix. À mesure que les marchés deviennent de plus en plus « synchronisés », il devient de plus en plus difficile pour les stratégies de réaliser un arbitrage « sans risque » ou à court terme à partir de petites différences de prix.

Restrictions de change ou modifications des frais

À mesure que la structure des frais des différentes bourses change, une fois que les coûts des frais dépassent les gains d’arbitrage, la rentabilité des stratégies de trading à haute fréquence sera considérablement réduite. Alternativement, si l’échange accélère le processus de correspondance, limite la fréquence et la quantité et réduit la latence, les stratégies qui reposent sur une latence incohérente deviendront inefficaces.

Dégradation et glissement de la liquidité

Lorsque le volume du marché est insuffisant, les stratégies à haute fréquence rencontrent souvent des glissements plus importants ; ou les ordres importants font rapidement grimper les prix, ce qui fait que le « acheter bas et vendre haut » initialement prévu est affecté par leurs propres ordres, ce qui entraîne une baisse des rendements. .

Évolution de la volatilité du marché

Certaines stratégies fonctionnent très bien en cas de « forte volatilité » ou de « cycles spécifiques ». Lorsque le marché est stable ou que la volatilité diminue et que l’effet de levier est réduit, la stratégie perd son environnement approprié et peut même entraîner des pertes fréquentes.


Résumer

Le point clé de cette stratégie de trading haute fréquence réside dans la capture des prix de plusieurs bourses et le jugement de la « synthèse des tendances ». Il a déjà mis en œuvre une méthode de trading à ultra-haute fréquence et à entrée et sortie rapides basée sur le principe Lead-Lag : observer le prix de la bourse qui évolue en premier, puis faire en sorte que les prix des autres bourses suivent, capturant ainsi les différences de prix instantanées ou les tendances à court terme. . Cependant, comme le dit l’auteur, les changements dans l’environnement du marché, l’homogénéité de la stratégie, les frais et les limites de fréquence ont rendu cette stratégie qui repose sur le spread « premier mouvement, dernier mouvement » progressivement moins utile et même perd sa rentabilité. Pour ceux qui souhaitent explorer ce type de stratégie Lead-Lag, ils doivent optimiser le module de trading en combinaison avec la dernière structure du marché (liquidité, règles de frais, vitesse de correspondance des algorithmes) et prêter attention à la gestion du contrôle des risques, afin de Survivre dans un environnement de marché en constante évolution. Maintenir une compétitivité continue.