Trong bài viết trước, chúng tôi đã giới thiệu về lợi nhuận chuyển đổi giữa các sàn giao dịch. Lần này, chúng tôi sẽ xem xét kỹ lưỡng cách áp dụng hiệu ứng Lead-Lag cho giao dịch tần số cao, nơi giao dịch tần số cao đòi hỏi phải nắm bắt sự khác biệt giá nhỏ trong một thời gian rất ngắn và kiếm được lợi nhuận nhanh chóng.
Dưới đây là câu trả lờiViệc đơn giản hóa mã nguồn công khai, và chuyển đổi sang dựa trên FMZ API. Các nguyên tắc mã của chiến lược này rất đơn giản, đã từng rất có lợi, hiện không có sẵn, chỉ để tham khảo.
Theo chiến lược này, các giá
Chiến lược này gần như đồng bộ lấy dữ liệu sổ lệnh từ các sàn giao dịch khác nhau, chẳng hạn như giá mua, giá bán, số lượng đặt hàng, v.v.; sau đó so sánh giá trung gian của các sàn giao dịch khác nhau (tức là giá trung bình của giá mua và giá bán) để suy luận về động lực thị trường.
Chiến lược này chủ yếu tập trung vào sự thay đổi giá của ba sàn giao dịch bên ngoài (okex, binance, huobipro):
Ở đây, mỗi xu hướng X được xác định bởi sự chênh lệch giữa xu hướng giá hiện tại và xu hướng giá quá khứ vượt quá ngưỡng nhất định. Sau khi cộng các tín hiệu xu hướng tăng / giảm từ ba sàn giao dịch, nếu xu hướng tổng thể > 0, chiến lược sẽ được mua; nếu xu hướng < 0, chiến lược sẽ được bán.
Chiến lược chỉ mua hoặc bán mỗi lần sau khi xác nhận xu hướng và hủy lệnh trước mỗi lần đặt hàng ("để tránh việc đặt hàng bất ngờ dẫn đến sự tích lũy rủi ro"). Đồng thời, kịch bản cũng thiết lập các mô-đun như tăng đòn bẩy, vận hành hàng loạt, giám sát kiểm soát gió, cho thấy trong thực tế thực tế, sử dụng nhiều tài khoản, chạy cùng một lúc nhiều cặp tiền tệ, do đó mở rộng tần suất giao dịch và hiệu quả sử dụng vốn của chiến lược.
Ngoài ra, chiến lược này là một chiến lược tần suất cao, không cần quan tâm đến lợi nhuận hoặc lỗ của mỗi đơn đặt hàng và không cần dừng lỗ, chỉ cần có khả năng kiếm được lợi nhuận.
// 超参设置
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}`);
}
}
}
Thị trường trở nên hiệu quả
Khi nhiều chiến lược định lượng hoặc tần số cao hơn tham gia và phát hiện ra mối quan hệ Lead-Lag tương tự, một lượng lớn tiền sẽ nhanh chóng xóa bỏ sự chênh lệch giá. Thị trường ngày càng trở nên không đồng bộ, và chiến lược sẽ khó khăn hơn để kiếm được lợi nhuận không có rủi ro hoặc lợi nhuận ngắn hạn từ sự chênh lệch giá nhỏ.
Hạn chế giao dịch hoặc thay đổi phí giao dịch
Khi thay đổi cấu trúc phí giao dịch của các sàn giao dịch khác nhau, một khi chi phí giao dịch vượt quá lợi nhuận, lợi nhuận của chiến lược giao dịch tần số cao sẽ bị giảm đáng kể. Hoặc sàn giao dịch sẽ tăng tốc độ chụp, giới hạn tần số, giảm độ trễ, và cũng sẽ khiến các chiến lược dựa trên sự trì hoãn không phù hợp không hiệu quả.
Sự suy giảm về khả năng lưu thông và điểm trượt
Khi thị trường giao dịch không đầy đủ, chiến lược tần số cao thường gặp phải điểm trượt nghiêm trọng hơn; hoặc đơn đặt hàng lớn sẽ nhanh chóng thúc đẩy giá, dẫn đến việc mua thấp và bán cao mà dự kiến sẽ bị ảnh hưởng bởi đơn đặt hàng của mình, giảm lợi nhuận.
Thị trường biến động thay đổi
Một số chiến lược rất hữu ích trong các đợt biến động cao hoặc đợt biến động nhất định, khi thị trường mờ nhạt hoặc biến động giảm, dẫn đến mất môi trường thích hợp và thậm chí có thể gây ra lỗ thường xuyên.
Điểm then chốt của chiến lược giao dịch tần suất cao này là nắm bắt giá của nhiều sàn giao dịch và kết hợp các quyết định về xu hướng tăng. Nó đã thực hiện một phương pháp giao dịch tần suất siêu cao, nhanh chóng dựa trên nguyên tắc Lead-Lag: xem giá của sàn giao dịch nào đi trước và sau đó dẫn các giá của các sàn giao dịch khác theo sau để nắm bắt chênh lệch tức thời hoặc xu hướng ngắn hạn. Tuy nhiên, như tác giả đã nói, các chiến lược dựa trên môi trường thị trường, đồng bộ hóa chiến lược, phí thủ tục và thay đổi tần suất, các chiến lược này dần dần trở nên không hiệu quả và thậm chí mất lợi nhuận.