3
집중하다
1444
수행원

암호화폐의 리드-래그 아비트라지 소개 (3)

만든 날짜: 2024-12-24 15:43:36, 업데이트 날짜: 2024-12-26 12:14:45
comments   2
hits   2011

암호화폐의 리드-래그 아비트라지 소개 (3)

이전 기사에서 우리는 교차거래소 ‘아비트라지’ 아비트라지를 소개했습니다. 이번에는 리드-래그 효과를 고주파 거래에 적용하는 방법에 대해 자세히 알아보겠습니다. 이는 매우 짧은 기간 내에 미미한 가격 차이를 포착하여 빠르게 수익을 창출하는 것이 필요합니다. 리드-래그 효과는 거래자에게 예측 정보를 제공하여 단기 가격 추세를 파악하고 이를 통해 다양한 거래소 간의 차익거래를 달성하는 데 도움이 됩니다.

다음은공공 코드의 단순화, FMZ API 기반으로 변환되었습니다. 이 원래 전략의 코드 원리는 매우 단순하고 한때 매우 수익성이 좋았습니다. 현재는 사용할 수 없으며 참조용으로만 제공됩니다.


리드-래그 고주파 전략 원리

소위 “Lead-Lag”는 일부 거래소의 가격(또는 특정 지표)이 전체 시장 변화에 더 “선도적”인 반면 다른 거래소 또는 다른 지표는 상대적으로 “뒤처지는”(Lag) 것으로 이해될 수 있습니다. . 이 전략에서 “Price_1, Price_2, Price_3”은 다양한 거래소의 시장 상황을 나타냅니다. 이들은 주류 거래소로, 시장 뉴스나 거래 깊이, 참여자 유형에 더 민감합니다. 대량의 매수 또는 매도 주문이 발생하면, 이러한 거래소의 가격은 먼저 변동됩니다. 실제 거래소의 가격 변동은 매칭 메커니즘, 거래 그룹 등의 요소로 인해 약간 뒤처질 수 있습니다. 이때 ‘어떤 사람은 앞서고 어떤 사람은 뒤처진다’는 상황이 발생한다.

다중 거래소 주문장 크롤링

이 전략은 최고 매수 가격, 최고 매도 가격, 보류 중인 주문량 등과 같은 다양한 거래소의 주문장 데이터를 거의 동시에 수집합니다. 그런 다음 다양한 거래소의 중간 가격(즉, 매수 가격과 매도 가격의 평균)을 비교하여 시장 역학을 추론합니다.

트렌드 신호 판단

이 전략은 주로 3개 외부 거래소(okex, binance, huobipro)의 가격 변화에 초점을 맞춥니다.

여기에서 각 trendX는 “현재 가격”과 “과거 가격”의 차이가 특정 임계값(수준 * 가격 증가분)을 초과하여 결정됩니다. 3개 거래소의 “상승/하락” 신호를 모두 더한 후 전체 추세 > 0이면 시장이 전반적으로 상승 중이며 매수 전략이 적용되고 추세 < 0이면 시장이 전반적으로 상승 중임을 의미합니다. 떨어지고 있는데, 전략은 매도입니다.

일방향 주문 및 위험 관리

이 전략은 추세가 확인된 후에만 매수 또는 매도를 실행하고, 각 주문을 하기 전에 이전 주문을 취소합니다(즉, 실수로 보류 주문을 발생시켜 위험이 누적되는 것을 방지하기 위함입니다). 동시에 스크립트는 레버리지, 일괄 작업, 위험 제어 모니터링과 같은 모듈도 설정하는데, 이는 실제 거래에서 여러 계정과 여러 통화 쌍이 사용되어 “거래 빈도”와 “효율성”을 확장한다는 것을 의미합니다. 자본 활용”.

또한 이 전략은 고빈도 전략입니다. 각 주문의 손익에 주의를 기울일 필요도 없고 손절매도 할 필요도 없습니다. 높은 확률로 성공할 수 있는 한 계속할 수 있습니다. 이익.


FMZ 전략 구현

매개변수 설정

// 超参设置
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;

핵심 논리: 데이터 수집 및 추세 판단

// 获取订单簿数据
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); // 返回总体趋势
}

주문하기 및 취소하기

// 取消所有挂单
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}`);
    }
}

주요 전략 논리

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

전략 실패 이유 분석

시장이 효율적이 됨

점점 더 많은 양적 또는 고빈도 전략이 활용되고 동일한 리드-래그 관계를 발견하게 되면 많은 양의 자금을 투자하면 가격 차이가 빠르게 없어집니다. 시장이 점점 더 “동기화”되면서 작은 가격 차이에서 “위험 없는” 또는 단기 차익거래를 하는 전략이 점점 더 어려워지고 있습니다.

교환 제한 또는 수수료 변경

다양한 거래소의 수수료 구조가 변함에 따라, 수수료 비용이 차익거래 이익을 초과하게 되면 고빈도 거래 전략의 수익성이 크게 줄어들 것입니다. 반면 거래소가 매칭 프로세스를 가속화하고, 빈도와 수량을 제한하며, 지연 시간을 줄인다면, 일관되지 않은 지연 시간에 의존하는 전략은 효과가 없게 될 것입니다.

유동성 감소 및 미끄러짐

시장 거래량이 부족할 경우 고빈도 전략은 종종 더 심각한 미끄러짐에 직면하게 되거나 대량 주문이 가격을 빠르게 끌어올려 원래 예상했던 “낮게 사고 높게 팔기”가 자신의 주문에 영향을 받아 수익률이 감소하게 됩니다. .

변화하는 시장 변동성

일부 전략은 “높은 변동성” 또는 “특정 주기”에서 매우 잘 작동합니다. 시장이 침체되거나 변동성이 감소하고 레버리지가 감소하면 전략은 적합한 환경을 잃고 심지어 빈번한 손실을 입을 수도 있습니다.


요약하다

이 고주파 거래 전략의 핵심은 여러 거래소에서 가격을 수집하고 ‘추세 합성’을 판단하는 데 있습니다. Lead-Lag 원리를 기반으로 초고빈도, 빠른 진입 및 종료 거래 방식을 구현했습니다. 즉, 어느 거래소의 가격이 먼저 움직이는지 관찰한 후 다른 거래소의 가격이 따라가도록 유도하여 즉각적인 가격 차이 또는 단기 추세를 포착합니다. . 하지만 저자가 말했듯이 시장 환경의 변화, 전략의 동질성, 수수료, 빈도 제한 등으로 인해 ‘첫 움직임, 마지막 움직임’ 스프레드에 의존하는 이런 전략은 점차 유용성을 잃고 수익성마저 잃어가고 있습니다. 이러한 유형의 Lead-Lag 전략을 탐색하고자 하는 사람들은 최신 시장 구조(유동성, 수수료 규칙, 알고리즘 매칭 속도)와 결합하여 거래 모듈을 최적화하고 위험 관리에 주의해야 합니다. 변화하는 시장 환경에서 살아남는다. 지속적인 경쟁력을 유지한다.