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

암호화폐의 리드-래그 중재에 대한 소개 (2)

저자:FMZ~리디아, 창작: 2024-12-19 09:27:27, 업데이트: 2024-12-19 11:33:45

img

블릭 이동 중재에 대한 소개

첫 번째 기사에서는 리드-래그 현상을 중재에 사용하는 방법을 간략하게 소개했습니다. 이 기사에서는 주로 크로스 거래소 브릭-모빙 중재를 소개합니다. 기본 원리는 다른 거래소 간의 가격 차기를 활용하는 것입니다. 각 거래소의 시장 유동성, 거래 속도 및 네트워크 지연이 다르기 때문에 다른 거래소에서 동일한 통화의 가격이 종종 동기화되지 않습니다. 중재자는 후진 가격 변화를 모니터링하여 신속하게 중재하여 위험 없는 이익을 얻을 수 있습니다.

중재에 납-격차 효과를 사용하는 방법?

1. 가격 차이 를 감시 한다

첫째, 중재자는 서로 다른 거래소 간의 가격 차이를 실시간으로, 특히 요청 가격과 입찰 가격을 모니터링해야합니다. A 교환의 요청 가격과 B 교환의 입찰 가격을 추적함으로써, A 교환의 요청 가격이 B 교환의 요청 가격보다 낮으면 중재 기회가 있다고 간주 할 수 있습니다. 예를 들어, A 교환의 요청 가격이 10,000 USDT이며, B 교환의 제안 가격이 10,100 USDT이며, 가격 차이가 100 USDT이며, 잠재적인 중재 기회가 있습니다. 물론, 최근의 역사적 가격 차이 범위도 개폐 가격 차이에 대한 참조로 고려해야하며 대기 시간이 또한 비용 중 하나입니다.

2. 상호 교환

중재 기회가 발견되면 중재자는 낮은 요청 가격 (이하 A 거래소) 를 가진 거래소에서 자산을 구매하고 더 높은 입찰 가격 (이하 B 거래소) 를 가진 거래소에서 판매해야합니다. 이 작업은 API를 통해 자동화되어 빠른 실행을 보장하고 가격 차이를 극대화 할 수 있습니다. 그러나 거래를 실행할 때 거래 비용 (비용 및 미끄러짐과 같은 것) 과 가격 충격이 고려되어야합니다. A 거래소의 수수료가 0.1%, B 거래소의 수수료가 0.2%이며 시장에서 미끄러짐이 있다고 가정합니다. 예를 들어, A 거래소에서 1 비트코인을 구매할 때, 큰 미끄러짐이 0.1%인 가정에서 주문의 실행으로 인해 실제 거래 가격이 증가 할 수 있습니다. 그러면 실제 거래 가격은 예상보다 0.1% 높을 것이며, 결과적으로 구매 비용이 증가합니다.

만약 슬리퍼와 수수료를 고려한다면 실제 구매비용과 판매 수익은 예상과는 다를 것입니다.

3. 포지션을 닫아

중재의 마지막 단계는 포지션을 닫는 것입니다. 예를 들어, 일정 기간 후, 거래 A의 구매 가격은 10,100 USDT이며, 거래 B의 판매 가격은 10,150 USDT입니다. 가격 차이가 100 USDT에서 50 USDT로 좁아지면 프로그램이 자동으로 포지션을 닫고 이익을 얻을 것입니다. 물론, 일부 경우, 가격 차이가 계속 확대 될 수 있으며 자금이 고갈 될 때까지 포지션을 계속 열 수 있습니다. 거래의 가격 차이가 유지될 수 없는 이유는 중재자가 힘의 대부분을 기여하기 때문입니다.

문제 와 실제적 인 해결책

1. 포지션 개설 가능성은 없습니다.

많은 수의 중재자와 시장 메이커가 존재하기 때문에 다른 거래소 간의 가격 차이는 매우 크지 않을 것이며 그렇지 않으면 신속하게 평준화 될 것입니다. 이것은 중재 거래가 직면 한 가장 큰 문제입니다.

해결책: - 가격 차이가 자연적으로 형성될 때까지 기다립니다.암호화폐 시장은 매우 변동적이며, 일반적으로 단기 가격 차이가 발생합니다. 인내심을 가지고 기다리는 것이 이 문제를 해결하는 가장 좋은 방법입니다.- 메이커 전략을 사용하세요.교환 주문서에서 적극적으로 주문을 구매하고 판매하고, 주문을 취소하고 가격 변화에 따라 조정합니다. 한 당사자가 거래를 완료하면 다른 당사자가 주문을 받습니다. 이것은 낮은 거래 수수료, 더 작은 스프레드를 초래하고 즉각적인 거래를 보장합니다.- 더 많은 거래 쌍을 감시하십시오.주류 통화에만 집중하지 마십시오. 주류 화폐의 중재 기회는 일반적으로 많은 수의 중재자에 의해 포착되어 가격 차이가 좁아지게됩니다. 인기가없는 통화 및 새로 상장 된 화폐는 유동성 저하와 경쟁이 줄어들기 때문에 더 큰 가격 차이를 가질 수 있으며 주목할 가치가있는 중재 기회입니다.- 작은 교환을 선택하세요:소규모 거래소는 일반적으로 유동성이 낮고 가격 조정이 느려서 큰 가격 차이가 발생하기 쉽다. 이 시점에서 중재자는 돈을 벌기 위해 주문을 배치하고 선제적으로 실행하도록 선택할 수 있습니다.- 높은 임계 교환을 선택:일부 거래소는 한국 거래소 업비트와 같이 엄격한 KYC 인증을 요구합니다. 이러한 장소는 일반 거래자가 입력하기가 어렵고 더 많은 중재 기회가 있습니다. 물론 어려움을 극복하는 방법을 찾아야합니다.

2. 거래 스프레드와 모니터링 스프레드의 차이는 너무 크다

주문을 잡지 못하는 것은 일반적인 문제입니다. 프로그램이 가격 차이를 발견하고 중재 명령을 할 때 실제 가격 차이는 그리 크지 않으며 일반적으로 손실이 발생합니다. 이 시점에서 가장 빠른 응답과 실행 속도는 중요합니다.

해결책: - 네트워크 및 서버 위치를 최적화:지연 시간을 줄이기 위해 거래소 서버에 가까운 노드를 선택하십시오. 예를 들어, 유동성이 낮은 작은 거래소를 선택하면 시장 반응 속도를 줄이고 기회를 잡을 수 있습니다.- 비동기 처리 및 웹소켓:비동기 코드와 웹소켓을 사용하여 시장 조건에 연결하면 실시간 가격 정보를 수신하고 정보 지연으로 인한 기회를 놓치지 않도록 신속하게 응답 할 수 있습니다.

3. 단방향 거래

단방향 거래는 주문의 한쪽이 완료되고 다른 쪽이 거래를 완료하지 못하는 경우입니다. 일반적으로 급변하는 시장에서 발생합니다. 주문의 한쪽만 성공하면 중재자가 노출 위험에 직면하게됩니다.

해결책: - 합리적인 스톱 로스 메커니즘을 설정합니다.단방향 거래가 발생하면 스톱 로스를 설정할 수 있습니다. 적시에 포지션을 닫는 것은 위험을 줄이는 효과적인 방법입니다.- 시장 가격을 사용 하 여 주문:시장 가격은 거래를 보장할 수 있지만 문제는 거래 가격의 차이는 통제할 수 없으며 손실을 초래할 수 있다는 것입니다.

4. 단일 거래소에서의 전체 위치

가격 차이가 오랫동안 존재하면 특정 거래소의 자금이 빠르게 매입되며, 중재자는 중재 작업을 계속할 수 없을 수 있습니다. 이 시점에서 중재자는 재원을 신속하게 전송하거나 위치를 조정해야합니다.

해결책: - 통화 송금:화폐를 송금하고 중재를 계속하기 위해 환율 환율을 사용하십시오. 이렇게하면 단일 시장에서 자금 축적을 피할 수 있으며 자금 유동성을 높일 수 있습니다.- 가격차가 바뀌기 위해 기다립니다.철수의 시간 비용을 고려할 때 가격차가 돌아오기를 기다리는 것도 옵션입니다.

데모 코드

코드는 라이브 거래 코드가 아니며 시범 목적으로만 사용됩니다. 시장 수, API 액세스 실패, 비동기 주문 가속화 등과 같은 문제를 고려하지 않습니다.


// Symbol is the arbitrage trading pair, such as BTC/USDT
let symbol = "BTC_USDT";

// Set commissions, slippage, profit margins for opening and closing positions
let fee = 0.1 / 100;      // 0.1% Fee
let slippage = 0.1 / 100; // 0.1% slippage
let entryThreshold = 0.005; // Opening threshold: Opening a position when the price difference is greater than 0.5%
let exitThreshold = 0.001;  // Closing threshold: Closing when the price difference returns to 0.1%

// The specific operations performed in each loop
function OnTick() {
    // Get ticker data from various exchanges
    let tickers = exchanges.map(exchange => exchange.GetTicker(symbol));

    // Calculate arbitrage opportunities (based on profit margins)
    // profitAB: Buy from exchange 0, sell from exchange 1
    const profitAB = (tickers[1].bid - tickers[0].ask) / tickers[0].ask - fee * 2 - slippage * 2;
    // profitBA: Buy from exchange 1, sell from exchange 0
    const profitBA = (tickers[0].bid - tickers[1].ask) / tickers[1].ask - fee * 2 - slippage * 2;

    // Print log
    Log(`Tickers: Exchange0 Buy: ${tickers[0].ask}, Exchange1 Sell: ${tickers[1].bid}, Profit AB: ${profitAB} USDT`);
    Log(`Tickers: Exchange1 Buy: ${tickers[1].ask}, Exchange0 Sell: ${tickers[0].bid}, Profit BA: ${profitBA} USDT`);

    // Determine whether to perform arbitrage operations based on profits
    if (profitAB > entryThreshold) {  // Open a position when the profit is greater than the opening threshold
        Log(`Arbitrage opportunity: Buy BTC from exchange 0, sell from exchange 1, profit: ${profitAB} USDT`);
        executeArbitrage(0, 1, tickers[0].ask, tickers[1].bid, profitAB);  // Buy from exchange 0 and sell from exchange 1
    } else if (profitBA > entryThreshold) {
        Log(`Arbitrage opportunity: Buy BTC from exchange 1, sell from exchange 0, profit: ${profitBA} USDT`);
        executeArbitrage(1, 0, tickers[1].ask, tickers[0].bid, profitBA);  // Buy from exchange 1 and sell from exchange 0
    } else if (profitAB < exitThreshold) {  // If the spread reverts, close the position
        Log(`Close position: Arbitrage opportunity bought from exchange 0 and sold on exchange 1, profit has returned to the close threshold`);
        closeArbitrage(0, 1, tickers[0].ask, tickers[1].bid); // Execute the closing operation
    } else if (profitBA < exitThreshold) { 
        Log(`Close position: Arbitrage opportunity bought from exchange 1 and sold on exchange 0, profit has returned to the closing threshold`);
        closeArbitrage(1, 0, tickers[1].ask, tickers[0].bid); // Execute the closing operation
    } else {
        Log("Not enough profit to take profit or close the position");
    }
}

// Executing arbitrage trades
function executeArbitrage(buyExchangeIndex, sellExchangeIndex, buyPrice, sellPrice) {
    let buyExchange = exchanges[buyExchangeIndex];
    let sellExchange = exchanges[sellExchangeIndex];

    // Get account balance (assuming BTC balance)
    let accountBuy = buyExchange.GetAccount();
    let accountSell = sellExchange.GetAccount();
    
    let amountBTC = Math.min(accountBuy.Balance / buyPrice, accountSell.Amount);

    // Assume that the transaction volume is 0.1 BTC per transaction
    let amount = Math.min(amountBTC, 0.1);

    // Ensure sufficient trading volume
    if (amount <= 0) {
        Log("Insufficient balance to conduct arbitrage");
        return;
    }

    // Place a buy order on the buying exchange
    Log(`Place an order to buy ${amount} BTC @ ${buyPrice} on exchange ${buyExchangeIndex}`);
    buyExchange.Buy(symbol, buyPrice * (1 + slippage), amount);

    // Place a sell order on the selling exchange
    Log(`Place an order to sell ${amount} BTC @ ${sellPrice} on exchange ${sellExchangeIndex}`);
    sellExchange.Sell(symbol, sellPrice * (1 - slippage), amount);
}

// Closing position operation
function closeArbitrage(buyExchangeIndex, sellExchangeIndex, buyPrice, sellPrice) {
    let buyExchange = exchanges[buyExchangeIndex];
    let sellExchange = exchanges[sellExchangeIndex];

    // Get account balance (assuming BTC balance)
    let accountBuy = buyExchange.GetAccount();
    let accountSell = sellExchange.GetAccount();

    let amountBTC = Math.min(accountBuy.Balance / buyPrice, accountSell.Amount);
    let amount = Math.min(amountBTC, 0.1);

    // Place a sell order on the buying exchange
    Log(`Close and sell ${amount} BTC @ ${buyPrice} on exchange ${buyExchangeIndex}`);
    buyExchange.Sell(symbol, buyPrice * (1 - slippage), amount);

    // Place a buy order on the selling exchange
    Log(`Close buy ${amount} BTC @ ${sellPrice} on exchange ${sellExchangeIndex}`);
    sellExchange.Buy(symbol, sellPrice * (1 + slippage), amount);
}

// Main loop
function main() {
    while (true) {
        OnTick();
        Sleep(1000); // Execute once every second
    }
}

요약

리드-래그 (Lead-Lag) 는 시장 지연 반응에 기반한 크로스 거래소 중재 전략이다. 시장의 가격 차이를 정확하게 분석하고 거래를 신속하게 실행함으로써 중재자는 암호화폐 시장에서 안정적인 수익을 얻을 수 있다. 그러나 전략의 성공은 전략 자체의 설계뿐만 아니라 시장 타이밍의 좋은 실행과 민감한 이해에 달려 있다. 시장 경쟁이 심화됨에 따라 중재자는 중재 기회의 지속적인 효과를 유지하기 위해 전략과 기술을 지속적으로 최적화하고 속도와 반응성을 향상시켜야 한다.


더 많은