Oleh kerana alasan kecairan, apabila pasaran mempunyai pergerakan harga besar, ia pasti akan menghasilkan turun naik harga yang besar, dan perbezaan harga akan terbentuk antara bursa, strategi adalah untuk menangkap proses pembelian rendah dan jual tinggi yang dilakukan dengan segera. Pelanggan bertanya mengapa saya membuat banyak bursa, ini adalah wajar, kita membuat perbezaan harga sesaat antara bursa, dan semakin banyak bursa, peluang harga yang terbentuk selepas persilangan pasti lebih besar.
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;
});
}
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;
}
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());
}
}
}
}
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()
https://www.fmz.com/robot/464965
Akhirnya, selamat datang untuk menyertai perkongsian kuantitatif:https://t.me/laoqiu_arbitrage
ianzeng123Ya, bagaimana parameter minTakerAmount ditetapkan?
Perempuan juga."Saya takut pasar raya kecil akan berlari".
Johnny.Pujian
h503059288Saya tidak mahu mengkritiknya.