리소스 로딩... 로딩...

디지털 화폐의 리드-래그 스위트 소개 (3)

저자:초목, 창작: 2024-12-24 15:43:36, 업데이트: 2024-12-26 12:14:45

img

이전 기사에서 우리는 거래소 간 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동

이 글은공개 코드 간소화, 그리고 FMZ API를 기반으로 변환합니다. 이 원리 코드는 간단하고 매우 수익성이 높았으며 현재는 사용되지 않습니다. 참고용입니다.


리드-래그 고주파 전략

리드-래그 (Lead-Lag) 는 어떤 거래소의 가격 (또는 특정 지표의 가격) 이 전체 시장 변화에서 리드 (Lead) 를 더 크게 앞당겨서 다른 거래소 또는 다른 지표가 상대적으로 리드-래그 (Lag) 을 하는 것으로 이해될 수 있다. 이 전략에서, 리드 가격 (리드), 리드 가격 (리드), 리드 가격 (리드), 리드 가격 (리드-래그) 은 각각 다른 거래소의 행태를 나타낸다. 이들은 시장 소식에 더 민감하거나 거래 깊이가 다른 참가자이기 때문에, 큰 주문 또는 판매 주문이 있을 때, 이들 거래소의 가격이 한 단계 먼저 변동하게 된다. 실제 거래소는 포메이션 메커니즘, 거래 집단 요소 등으로 인해 가격 유동이 약간 늦어진다. 이때 리드 리드 (리드), 리드 라그 (리드-래그) 의 어떤 종류가 나타난다.

여러 거래소에서 주문번호부를 잡았습니다.

전략은 거의 동시에 다른 거래소에서 구매 가격, 판매 가격, 주문 양 등과 같은 주문서 데이터를 취득하고, 다른 거래소에서 중간 가격 (즉, 구매와 판매의 평균) 을 비교하여 시장 동력을 추론합니다.

트렌드 신호 판단

이 전략은 주로 세 개의 외부 거래소 (okex, binance, huobipro) 의 가격 변동에 초점을 맞추고 있습니다.

여기서 각각의 트렌드X는 트렌드 현재 가격 상승과 트렌드 과거 가격 상승의 차이는 특정 문턱을 초과하는 것으로 결정된다. 세 거래소로부터 얻은 상승/하락 시그널을 더한 후, 전체 트렌드 > 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}`);
        }
    }
}

전략 실패의 원인을 분석

시장이 효과적이었습니다.

같은 리드-래그 관계를 발견하는 더 많은 계량화 또는 높은 주파수 전략이 참여하게 되면, 많은 자금이 이러한 가격 차이를 빠르게 메우고 있다. 시장이 점점 더 어긋나고, 전략은 더 이상 작은 가격 차이에서 위험 유치 또는 단기 유치 없이 수익을 창출하기 어렵게 된다.

거래소 제한 또는 수수료 변경

서로 다른 거래소에서 처리 수수료 구조가 변화함에 따라, 처리 비용이 배당 수익을 초과하면, 높은 주파수 거래 전략의 수익성은 크게 할인됩니다. 또는 거래소가 촬영 속도를 가속화하거나, 주파수 제한, 지연을 줄이는 경우, 일관성 없는 지연에 의존하는 전략이 실패합니다.

유동성 감소와 슬라이드 포인트

시장 거래량이 부족할 때, 높은 빈도 전략은 종종 더 심각한 슬라이드 포인트를 겪을 수 있습니다. 또는 큰 주문이 빠르게 가격을 추진하여 예상했던 높은 주문이 영향을 받아 수익이 떨어집니다.

시장 변동 환경의 변화

일부 전략은 높은 변동성 또는 특정 주기의 변동성에서 매우 유용하며, 시장이 평평하거나 변동률이 떨어지거나 지렛대가 낮아지면 전략은 적절한 환경을 잃어 버립니다. 심지어 종종 손실을 입을 수도 있습니다.


요약

이 고주파 거래 전략의 핵심은 다중 거래소의 가격 포착과 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동 유동


더 많은