
No artigo anterior, introduzimos a arbitragem de “arbitragem” entre bolsas. Desta vez, vamos nos aprofundar em como aplicar o efeito Lead-Lag à negociação de alta frequência, que exige capturar pequenas diferenças de preço em um período muito curto de tempo e obter lucros rápidos. O efeito Lead-Lag fornece aos traders informações preditivas, ajudando-os a determinar a tendência de preço de curto prazo e, assim, obter arbitragem entre diferentes bolsas.
Os seguintes sãoSimplificação do código público, e convertido para API baseada em FMZ. O princípio do código desta estratégia original é muito simples e já foi muito lucrativo. Ele está indisponível no momento e serve apenas como referência.
O chamado “Lead-Lag” pode ser entendido como os preços (ou certos indicadores) de algumas bolsas serão mais “leading” nas mudanças gerais do mercado, enquanto outras bolsas ou outros indicadores serão relativamente “lagging” (Lag) . Nesta estratégia, “Price_1, Price_2, Price_3” representam as condições de mercado de diferentes bolsas. Elas são bolsas tradicionais, que são mais sensíveis às notícias do mercado, ou à sua profundidade de negociação e tipos de participantes. Uma vez que haja uma grande ordem de compra ou venda, os preços dessas bolsas flutuarão primeiro. As flutuações de preços das bolsas de negociação reais ficarão um pouco atrasadas devido a fatores como mecanismos de correspondência e grupos de negociação. Nesse ponto, surge uma situação de “alguns estão liderando e alguns estão ficando para trás”.
A estratégia obtém dados do livro de ordens de diferentes bolsas quase que sincronicamente, como o melhor preço de compra, o melhor preço de venda, o volume de ordens pendentes, etc. Os preços médios (ou seja, a média dos preços de compra e venda) de diferentes bolsas são então comparados para inferir a dinâmica do mercado.
A estratégia se concentra principalmente nas mudanças de preço de três bolsas externas (okex, binance, huobipro):
Aqui, cada tendênciaX é determinada pela diferença entre o “preço atual” e o “preço passado” excedendo um certo limite (nível * incremento_de_preço). Após somar os sinais de “subida/descida” das três bolsas, se a tendência geral for > 0, significa que o mercado está geralmente subindo e a estratégia é comprar; se a tendência for < 0, significa que o mercado está geralmente caindo, e a estratégia é vender.
A estratégia só compra ou vende depois que a tendência é confirmada e cancela a ordem anterior antes de colocar cada ordem (ou seja, para evitar ordens pendentes acidentais que levam ao acúmulo de risco). Ao mesmo tempo, o script também configura módulos como alavancagem, operação em lote e monitoramento de controle de risco, o que significa que várias contas e vários pares de moedas são usados na negociação real, expandindo assim a “frequência de negociação” e a “eficiência de “utilização de capital”.
Além disso, essa estratégia é uma estratégia de alta frequência. Você não precisa prestar atenção ao lucro ou perda de cada ordem, nem precisa parar a perda. Você pode continuar enquanto houver uma alta probabilidade de fazer uma lucro.
// 超参设置
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}`);
}
}
}
Os mercados tornam-se eficientes
Quando mais e mais estratégias quantitativas ou de alta frequência se envolvem e descobrem a mesma relação Lead-Lag, uma grande quantidade de fundos eliminará rapidamente a diferença de preço. À medida que os mercados se tornam cada vez mais “sincronizados”, torna-se cada vez mais difícil para as estratégias fazerem arbitragem “sem risco” ou de curto prazo a partir de pequenas diferenças de preços.
Restrições de câmbio ou alterações de taxas
À medida que a estrutura de taxas de diferentes bolsas muda, quando os custos das taxas excedem os ganhos de arbitragem, a lucratividade das estratégias de negociação de alta frequência será bastante reduzida. Alternativamente, se a troca acelera o processo de correspondência, limita a frequência e a quantidade e reduz a latência, estratégias que dependem de latência inconsistente se tornarão ineficazes.
Decadência e deslizamento de liquidez
Quando o volume de mercado é insuficiente, as estratégias de alta frequência frequentemente encontram deslizamentos mais severos; ou grandes ordens rapidamente elevam os preços, fazendo com que a expectativa original de “comprar na baixa e vender na alta” seja afetada por suas próprias ordens, resultando em um declínio nos retornos .
Mudança na volatilidade do mercado
Algumas estratégias funcionam muito bem sob “alta volatilidade” ou “ciclos específicos”. Quando o mercado está estável ou a volatilidade diminui e a alavancagem é reduzida, a estratégia perde seu ambiente adequado e pode até incorrer em perdas frequentes.
O ponto-chave dessa estratégia de negociação de alta frequência está na captura de preços de diversas bolsas e no julgamento da “síntese de tendências”. Já implementou um método de negociação de entrada e saída rápida e de frequência ultra-alta com base no princípio Lead-Lag: observar qual preço de bolsa se move primeiro e, em seguida, direcionar os preços de outras bolsas para segui-lo, capturando assim diferenças de preço instantâneas ou tendências de curto prazo. . No entanto, como diz o autor, mudanças no ambiente de mercado, homogeneidade de estratégias, taxas e limites de frequência tornaram essa estratégia que depende do spread “primeiro movimento, último movimento” gradualmente menos útil e até mesmo perdeu sua lucratividade. Para aqueles que desejam explorar esse tipo de estratégia Lead-Lag, eles precisam otimizar o módulo de negociação em combinação com a estrutura de mercado mais recente (liquidez, regras de taxas, velocidade de correspondência do algoritmo) e prestar atenção ao gerenciamento de controle de risco, de modo a sobreviver em um ambiente de mercado em mudança. Manter competitividade contínua.