В предыдущей статье мы рассказали об эффекте сдвига лидеров между биржами. На этот раз мы подробнее рассмотрим, как эффекты сдвига лидеров могут применяться к высокочастотным сделкам, где высокочастотные сделки требуют захвата крошечных ценовых различий в очень короткие сроки и быстрого получения прибыли. Эффект сдвига лидеров предоставляет трейдерам прогнозную информацию, которая помогает им определить краткосрочное движение цен, что позволяет реализовать эффекты сдвига между различными биржами.
Ниже приведеныУпрощение открытого кода, а затем перевести его на основанный на FMZ API. Код этой первоначальной стратегии очень прост, когда-то был очень прибыльным и в настоящее время недоступен, только для справки.
Так называемый "Лед-Лаг" может быть понят как то, что цены на некоторых биржах или на некоторых показателях будут опережать цены на общих изменениях рынка, а на других биржах или на других показателях будет относительно опережающий лаг. В данной стратегии опережающие цены 1, 2 и 3 символизируют поведение различных бирж, которые являются основными биржами, поскольку они более чувствительны к информации о рынке или их участники в глубине торговли отличаются, что при наличии большого количества покупательных или продажных заказов приведет к тому, что цены на этих биржах будут колебаться на шаг раньше.
Стратегия почти синхронно получает данные ордерной книги с разных бирж, например, цены покупки, цены продажи, объемы заказов и т. д.; затем сравнивает средние цены (т. е. средние цены покупки и продажи) с разными биржами, чтобы сделать вывод о динамике рынка.
Стратегия сосредоточена на изменении цен на трех внешних биржах (okex, binance, huobipro):
Здесь каждый тренд X определяется разницей между текущим ценовым скачком и прошлым ценовым скачком выше определенного порога (level * price_increment). После того, как сигналы повышения/уменьшения, полученные от трех бирж, будут сложены, если общий тренд > 0, стратегия будет куплена; если тренд < 0, стратегия будет продана.
Стратегия каждый раз покупает или продает только после подтверждения тренда, а перед каждым размещением ордера отменяет предыдущие заказы (т. е. избегает неожиданного закладки, что приводит к накоплению риска). В то же время в сценарии также установлены модули, такие как увеличение рычага, оптовая торговля, контроль ветра и т. д., которые показывают, что в реальном мире используется несколько счетов, много валютных пар, которые одновременно идут, что расширяет частоту торговли и эффективность использования капитала.
Кроме того, это высокочастотная стратегия, которая не фокусируется на прибыли и убытках от каждого заказа и не требует остановки убытков, и продолжается до тех пор, пока вероятность будет выгодной.
// 超参设置
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}`);
}
}
}
Рынок становится эффективным
Когда вовлекается все больше количественных или высокочастотных стратегий и обнаруживается такая же Lead-Lag, значительное количество средств быстро сглаживает этот разрыв.
Изменения в ограничениях биржи или в оплате услуг
С изменением структуры процедурных сборов на разных биржах прибыльность высокочастотных торговых стратегий значительно снижается, когда процедурные издержки превышают прибыль от сборки; или же биржа ускоряет скорость съемки, ограничивает частоту, уменьшает задержку, а также отменяет стратегии, которые обычно полагаются на несовместимые задержки.
Снижение ликвидности и сдвиг
В случае недостаточного объема торгов высокочастотные стратегии часто сталкиваются с более серьезными сдвигами; или крупные заказчики быстро продвигают цены, что приводит к тому, что ожидаемые высокие заказчики покупают и продают низкие, а вместо этого влияют на свои собственные заказчики, снижая прибыль.
Изменения волатильности рынка
Некоторые стратегии очень хорошо работают в условиях повышенной волатильности или в условиях определенного цикла волатильности, когда рынок плохой или волатильность падает, и рынок теряет подходящую среду, и может даже часто терять.
Ключевой момент этой высокочастотной стратегии заключается в том, чтобы поймать цены на нескольких биржах и синтезировать суждения о тенденциях. Она была основана на принципе Lead-Lag. Она реализовала сверхчастотный, быстрый способ торговли: наблюдать, какая цена на одной бирже движется вперед, а затем запускать цены на других биржах, чтобы поймать мгновенную разницу или краткосрочные тенденции. Однако, как отмечает автор, такая стратегия, которая зависит от рыночной среды, одинаковых стратегий, процедурных сборов и изменений в частоте, постепенно становится менее эффективной и даже теряет свою прибыльность.