Dalam artikel sebelum ini, kami telah membentangkan keuntungan yang berlainan antara bursa. Kali ini, kami akan mengkaji secara mendalam bagaimana kesan lead-lag boleh digunakan untuk perdagangan frekuensi tinggi, yang memerlukan perdagangan frekuensi tinggi untuk menangkap perbezaan harga yang kecil dalam masa yang sangat singkat dan memperoleh keuntungan dengan cepat. Efek lead-lag memberikan maklumat ramalan kepada peniaga untuk membantu mereka menentukan pergerakan harga jangka pendek, sehingga dapat mencapai keuntungan di antara bursa yang berbeza.
Berikut adalah:Penyederhanaan Kod Terbuka, dan ditukarkan kepada API FMZ berdasarkan. Prinsip kod untuk strategi ini adalah mudah, pernah sangat menguntungkan, dan tidak tersedia untuk rujukan sahaja.
Yang disebut dengan lead-lag, boleh difahami sebagai harga beberapa bursa (atau beberapa petunjuk) akan lebih tinggi dalam perubahan pasaran secara keseluruhan, sementara bursa lain atau petunjuk lain akan lebih lambat. Dalam strategi ini, harga lead 1, harga 2 dan harga 3 mewakili pergerakan bursa yang berbeza, masing-masing, yang merupakan bursa utama, kerana lebih sensitif terhadap berita pasaran, atau kedalaman dagangan mereka adalah berbeza, apabila ada pesanan beli atau jual yang besar, harga bursa ini akan turun naik terlebih dahulu. Bursa yang sebenarnya akan turun naik sedikit kerana mekanisme pengambilan gambar, faktor kumpulan dagangan, dan lain-lain.
Strategi ini mengambil data buku pesanan dari pelbagai bursa hampir serentak, seperti harga beli, harga jual, jumlah pesanan, dan lain-lain. Kemudian perbandingan harga tengah (iaitu purata harga beli dan jual) dari pelbagai bursa dibuat untuk membuat kesimpulan mengenai dinamika pasaran.
Strategi ini memfokuskan pada perubahan harga di tiga bursa luar (okex, binance, huobipro):
Di sini, setiap trend X ditentukan oleh selisih antara kenaikan harga semasa dan kenaikan harga masa lalu yang melebihi ambang tertentu. Selepas penambahan isyarat kenaikan / penurunan yang diperoleh dari tiga bursa, jika trend keseluruhan > 0, strategi akan dibeli; jika trend < 0, strategi akan dijual.
Strategi ini hanya akan membeli atau menjual setiap kali selepas trend itu disahkan, dan akan membatalkan pesanan sebelumnya sebelum setiap pesanan dibuat (iaitu untuk mengelakkan kenaikan yang tidak disangka-sangka yang menyebabkan pengumpulan risiko). Pada masa yang sama, skrip ini juga menetapkan modul seperti levera, pengendalian jumlah, pemantauan kawalan angin, yang menunjukkan bahawa dalam masa sebenar, menggunakan pelbagai akaun, pasangan mata wang yang berjalan pada masa yang sama, sehingga meningkatkan frekuensi dagangan dan kecekapan penggunaan dana.
Selain itu, strategi ini adalah strategi frekuensi tinggi, tidak perlu mempertimbangkan keuntungan atau kerugian setiap pesanan, dan tidak perlu menghentikan kerugian, dan boleh diteruskan selagi kemungkinan keuntungan.
// 超参设置
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}`);
}
}
}
Pasaran menjadi berkesan
Apabila lebih banyak strategi kuantitatif atau frekuensi tinggi terlibat dan mendapati hubungan lead-lag yang sama, banyak dana akan cepat memadamkan perbezaan harga ini. Pasaran menjadi semakin tidak sinkron, dan strategi menjadi sukar untuk tidak mengambil keuntungan dari perbezaan harga yang kecil tanpa menggunakan peruntukan jangka pendek atau peruntukan jangka pendek.
Perubahan had pertukaran atau bayaran
Dengan perubahan struktur yuran prosedur di pelbagai bursa, apabila kos prosedur melebihi keuntungan set, strategi perdagangan frekuensi tinggi akan mengalami diskaun yang besar; atau pertukaran akan mempercepatkan kelajuan pengambilan gambar, had frekuensi, mengurangkan kelewatan, dan juga akan mengacaukan strategi yang bergantung pada kelewatan yang tidak konsisten.
Pengurangan dan titik peluncuran
Strategi frekuensi tinggi sering mengalami titik tergelincir yang lebih serius apabila pasaran tidak cukup banyak; atau pesanan besar akan mendorong harga dengan cepat, menyebabkan harga yang dijangkakan untuk membeli rendah dan menjual tinggi tetapi dipengaruhi oleh pesanan sendiri, yang menyebabkan pendapatan menurun.
Perubahan persekitaran pasaran yang bergolak
Beberapa strategi sangat berguna dalam periuk volatiliti tinggi atau periuk tertentu, apabila pasaran rata atau turun atau kadar volatiliti menurun, strategi kehilangan persekitaran yang sesuai, dan mungkin juga sering kehilangan.
Titik utama strategi perdagangan frekuensi tinggi ini adalah menangkap harga pelbagai bursa dan membuat penilaian frekuensi tinggi. Ia pernah mewujudkan kaedah perdagangan frekuensi tinggi dan cepat berdasarkan prinsip Lead-Lag: melihat harga bursa mana yang bergerak terlebih dahulu, dan kemudian mendorong harga bursa lain untuk mengikuti untuk menangkap perbezaan sesaat atau trend jangka pendek. Walau bagaimanapun, seperti yang dinyatakan oleh penulis, persekitaran pasaran, homogenisasi strategi, bayaran prosedur dan perubahan frekuensi, strategi yang bergantung pada pergerakan frekuensi tinggi yang bergerak lebih awal secara beransur-ansur menjadi tidak berguna, atau bahkan kehilangan keuntungan.