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

다중 거래소 현금 가격 격차 전략 논리 공유

저자:@cqz, 창작: 2022-06-27 21:26:27, 업데이트: 2023-09-18 19:44:32

img

전략적 원칙

유동성 때문에 시장에서 큰 규모의 트레이스가 발생하면 큰 가격 변동이 발생할 수밖에 없으며, 거래소 간의 순간적인 가격 차이가 형성됩니다. 전략은 이러한 순간적인 빠른 거래를 실행하여 낮은 구매를 완료하는 과정을 포착하는 것입니다. 고객들은 저에게 왜 이렇게 많은 거래소를 사는지 물었습니다. 이것은 당연한 일입니다. 우리는 거래소 간의 순간적인 가격 차이에 대해 놀았습니다. 거래소가 많을수록 교차 후 형성되는 가격 차이의 기회가 더 많을 것입니다.

전략의 핵심 논리
  1. 여러 거래소에서 거래 정보를 동시에 얻을 수 있습니다. 동시에 접근해야 합니다.다중 거래소 통합 플러그인
  2. 모든 거래소에서 거래된 ASK와 BID를 합쳐서 통합된 거래 정보를 얻을 수 있습니다. RealPrice는 처리 수수료를 제외한 가격입니다.
function createOrders(depths, askOrders, bidOrders) {
    let asksIndex = 0;
    let bidIndex = 0;
    for (let i = 0; i < depths.length; i++) {
        let exchangeTariff = getExchangeTariff(i);
        let asks = depths[i].Asks;
        let bids = depths[i].Bids;
        for (let j = 0; j < Math.min(asks.length, bids.length, 20); j++) {
            if (asks[j].Amount >= minTakerAmount) {
                askOrders[asksIndex] = {
                    "Price": asks[j].Price,
                    "Amount": asks[j].Amount,
                    "Fee": asks[j].Price * exchangeTariff,
                    "RealPrice": asks[j].Price * (1 + exchangeTariff),
                    "Index": i,
                };
                asksIndex++;
            }
            if (bids[j].Amount >= minTakerAmount) {
                bidOrders[bidIndex] = {
                    "Price": bids[j].Price,
                    "Amount": bids[j].Amount,
                    "Fee": bids[j].Price * exchangeTariff,
                    "RealPrice": bids[j].Price * (1 - exchangeTariff),
                    "Index": i,
                };
                bidIndex++;
            }
        }
    }
    askOrders.sort(function (a, b) {
        return a.RealPrice - b.RealPrice;
    });
    bidOrders.sort(function (a, b) {
        return b.RealPrice - a.RealPrice;
    });
}
  1. 결합된 거래소 정보로부터 가장 많은 이자율 차이를 계산한다. 우리는 가장 낮은 ASK 가격에서 구매하고, 가장 높은 BID 가격에서 판매하기 때문에 bid.RealPrice > ask.RealPrice로 수익 공간이 있습니다.
function getArbitrageOrders(askOrders, bidOrders) {
    let ret = [];
    for (let i = 0; i < askOrders.length; i++) {
        for (let j = 0; j < bidOrders.length; j++) {
            let bidOrder = bidOrders[j];
            let askOrder = askOrders[i];
            if (bidOrder.Index === askOrder.Index) {
                continue
            }
            let minMigrateDiffPrice = ((askOrder.Price + bidOrder.Price) / 2 * minMigrateDiffPricePercent / 100);
            if (bidOrder.RealPrice - askOrder.RealPrice > minMigrateDiffPrice) {
                ret.push({
                    "Ask": askOrder,
                    "Bid": bidOrder,
                })
            }
        }
    }
    if (ret.length === 0) {
        ret.push({
            "Ask": askOrders[0],
            "Bid": bidOrders[0],
        });
    }
    //按最优价差排序
    ret.sort((a, b) => {
        return (b.Bid.RealPrice - b.Ask.RealPrice) - (a.Bid.RealPrice - a.Ask.RealPrice);
    });
    return ret;
}
  1. 이 시점에서 우리는 시장에서 유리한 가격 차이에 대한 정보를 얻었고, 거래가 실행되는지 아닌지, 그리고 거래의 소수량에 대해 판단하는 몇 가지 요소가 있습니다.
  • 현재 남은 자산
  • 가격 차이의 크기 (가격 차이는 너무 작아서 통화 수만 균형을 이루고 가격 차이는 너무 커서 거래 수를 극대화 할 수 있습니다)
  • 청구서 수
    var askOrder = arbitrageOrder.Ask;
    var bidOrder = arbitrageOrder.Bid;
    var perAmountFee = arbitrageOrder.Ask.Fee + arbitrageOrder.Bid.Fee;
    var minRealDiffPrice = (askOrder.Price + bidOrder.Price) / 2 * minDiffPricePercent / 100;
    var minMigrateDiffPrice = ((askOrder.Price + bidOrder.Price) / 2 * minMigrateDiffPricePercent / 100);
    var curRealDiffPrice = arbitrageOrder.Bid.RealPrice - arbitrageOrder.Ask.RealPrice;
    var buyExchange = exchanges[arbitrageOrder.Ask.Index];
    var sellExchange = exchanges[arbitrageOrder.Bid.Index];
    var buySellAmount = 0;
    if (curRealDiffPrice > minRealDiffPrice) {
        buySellAmount = math.min(
            bidOrder.Amount,
            askOrder.Amount,
            maxTakerAmount,
            runningInfo.Accounts[bidOrder.Index].CurStocks,
            runningInfo.Accounts[askOrder.Index].CurBalance / askOrder.Price
        );
    } else if (bidOrder.Index !== askOrder.Index) {
        if (migrateCoinEx == -1) {
            if (curRealDiffPrice > minMigrateDiffPrice && runningInfo.Accounts[bidOrder.Index].CurStocks - runningInfo.Accounts[askOrder.Index].CurStocks > maxAmountDeviation) {
                buySellAmount = math.min(
                    bidOrder.Amount,
                    askOrder.Amount,
                    maxTakerAmount,
                    runningInfo.Accounts[bidOrder.Index].CurStocks,
                    runningInfo.Accounts[askOrder.Index].CurBalance / askOrder.Price,
                    runningInfo.Accounts[bidOrder.Index].CurStocks - ((runningInfo.Accounts[bidOrder.Index].CurStocks + runningInfo.Accounts[askOrder.Index].CurStocks) / 2)
                );
                if (buySellAmount >= minTakerAmount) {
                    Log("启动交易所平衡!");
                }
            }
        } else if (migrateCoinEx == askOrder.Index) {
            if (curRealDiffPrice > minMigrateDiffPrice && runningInfo.Accounts[bidOrder.Index].CurStocks > 0) {
                buySellAmount = math.min(
                    bidOrder.Amount,
                    askOrder.Amount,
                    maxTakerAmount,
                    runningInfo.Accounts[bidOrder.Index].CurStocks,
                    runningInfo.Accounts[askOrder.Index].CurBalance / askOrder.Price
                );
                if (buySellAmount >= minTakerAmount) {
                    Log("启动货币迁移:", exchanges[bidOrder.Index].GetName(), "-->", exchanges[askOrder.Index].GetName());
                }
            }
        }
    }
  1. 주문 수를 계산하면 거래를 실행할 수 있습니다. 전략은 직접 점 점수를 클릭하는 방식으로 동시에 주문합니다.
            var buyWait = buyExchange.Go("Buy", _N(askOrder.Price * (1.01), pricePrecision), buySellAmount);
            var sellWait = sellExchange.Go("Sell", _N(bidOrder.Price * (0.99), pricePrecision), buySellAmount);
            var startWaitTime = new Date().getTime()
            Sleep(3000);
            var buyOrder = buyWait.wait()
            var sellOrder = sellWait.wait()
  1. 이 모든 것은 수익을 계산하고 실패한 주문을 처리하는 것과 같은 논리입니다.
이 전략의 실제 이익

img img img

현재 실제 디스크는 핵심 논리가 변하지 않고 다화폐를 지원하도록 최적화되어 있습니다.

https://www.fmz.com/robot/464965

그리고 마지막으로, 올秋의 양적 교류에 참여하십시오:https://t.me/laoqiu_arbitrage


관련

더 많은

이안젠123, minTakerAmount가 어떻게 설정되었나요?

신부도 마찬가지입니다.이 모든 것은 작은 거래소가 달리는 것을 두려워하는 것입니다.

조니찬송

h503059288아키고 위무.