پچھلے مضمون میں ، ہم نے کراس ایکسچینج
مندرجہ ذیل ہےعوامی ضابطے کی سادگیاور FMZ API میں تبدیل کر دیا گیا ہے۔ اس اصل حکمت عملی کا کوڈ اصول بہت آسان ہے اور ایک بار بہت منافع بخش تھا۔ یہ فی الحال دستیاب نہیں ہے اور صرف حوالہ کے لئے ہے۔
نام نہاد
یہ حکمت عملی مختلف تبادلے سے آرڈر بک کے اعداد و شمار کو تقریباً بیک وقت حاصل کرتی ہے ، جیسے بولی کی قیمت ، پوچھ قیمت ، زیر التواء آرڈر کا حجم وغیرہ۔ پھر مارکیٹ کی حرکیات کا اندازہ لگانے کے لئے مختلف تبادلے کی درمیانی قیمت (یعنی بولی اور مانگ کی قیمت کا اوسط) کا موازنہ کیا جاتا ہے۔
حکمت عملی بنیادی طور پر تین بیرونی تبادلے (okex ، binance ، huobipro) کی قیمتوں میں تبدیلیوں پر مرکوز ہے:
یہاں ، ہر رجحان ایکس کا تعین
حکمت عملی صرف رجحان کی تصدیق کے بعد ہی خریدتی ہے یا فروخت کرتی ہے ، اور ہر آرڈر دینے سے پہلے پچھلے آرڈر کو منسوخ کرتی ہے (یعنی ، حادثاتی زیر التواء آرڈرز سے بچنے سے جو خطرے کے جمع ہونے کا باعث بنتی ہے۔ اسی وقت ، اسکرپٹ لیوریج ، بیچ آپریشن ، اور رسک کنٹرول مانیٹرنگ جیسے ماڈیول بھی مرتب کرتا ہے ، جس کا مطلب ہے کہ براہ راست تجارت میں بیک وقت متعدد اکاؤنٹس اور متعدد کرنسی کے جوڑے استعمال کیے جاتے ہیں ، اس طرح حکمت عملی کی
اس کے علاوہ ، یہ حکمت عملی ایک اعلی تعدد کی حکمت عملی ہے۔ آپ کو ہر آرڈر کے منافع یا نقصان پر توجہ دینے کی ضرورت نہیں ہے ، اور نہ ہی آپ کو نقصان کو روکنے کی ضرورت ہے۔ جب تک منافع کمانے کا امکان موجود ہے آپ جاری رکھ سکتے ہیں۔
// Hyperparameter settings
const SYMBOL = "BTC_USDT"; // Trading pair
const PRICE_INCREMENT = 0.1; // Price increment
const LEVEL = 10; // Sensitivity of trend judgment
const RATIO = 10; // Order price adjustment ratio
const INTERVAL = 200; // Time interval (milliseconds)
const S_AMOUNT = 0.02; // Default transaction volume
const MIN_AMOUNT = 0.005; // Minimum transaction volume
// Initial state
let buyOrders = [];
let sellOrders = [];
let previousPrices = [0, 0, 0]; // Store the previous price
let loop = 0;
// Get order book data
function fetchOrderBooks() {
let orderBooks = [];
let tasks = [];
// Start asynchronous order book acquisition tasks for all exchanges
for (let i = 0; i < exchanges.length; i++) {
// Assume that each exchange object can call the Go method
let task = exchanges[i].Go("GetDepth");
tasks.push({ index: i, task: task });
}
// Wait for all tasks to complete and collect results
for (let i = 0; i < tasks.length; i++) {
let { index, task } = tasks[i];
try {
// Waiting for an asynchronous task to return a result
let depth = task.wait(1000);
// Check if the returned data is valid
if (!depth || !depth.Bids || !depth.Asks) {
throw new Error("The returned order book data is invalid");
}
// Add valid order book data to the result array
orderBooks[index] = depth;
} catch (error) {
// Recording error logs
Log(`Failed to obtain the order book of exchange ${index}: ${error.message}`);
// Added default order book data to avoid crashes
orderBooks[index] = {
Bids: [[0, 0]],
Asks: [[0, 0]]
};
}
}
return orderBooks;
}
// Judge the trends
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); // Upward trend
} else if (midPrice < previousPrices[i] - LEVEL * PRICE_INCREMENT) {
trends.push(-1); // Downward trend
} else {
trends.push(0); // No significant trend
}
previousPrices[i] = midPrice; // Update price record
}
return trends.reduce((a, b) => a + b, 0); // Return to overall trend
}
// Cancel all pending orders
function cancelOrders(orders) {
for (let orderId of orders) {
try {
exchanges[0].CancelOrder(orderId); // Use the main exchange by default
Log(`Cancel order: ${orderId}`);
} catch (error) {
Log(`Failed to cancel order: ${error.message}`);
}
}
}
// Create a buy order
function createBuyOrder(price, amount) {
try {
const orderId = exchanges[0].Buy(price, amount);
buyOrders.push(orderId);
Log(`Create a buy order: price ${price}, quantity ${amount}`);
} catch (error) {
Log(`Failed to create buy order: ${error.message}`);
}
}
// Create a sell order
function createSellOrder(price, amount) {
try {
const orderId = exchanges[0].Sell(price, amount);
sellOrders.push(orderId);
Log(`Create a sell order: price ${price}, quantity ${amount}`);
} catch (error) {
Log(`Failed to create sell order: ${error.message}`);
}
}
function main() {
while (true) {
try {
// Get order book data
const orderBooks = fetchOrderBooks();
// Calculate trends
const trend = calculateTrend(orderBooks);
Log(`Current trend: ${trend}`);
// Cancel pending order
cancelOrders(buyOrders);
cancelOrders(sellOrders);
buyOrders = [];
sellOrders = [];
// Order based on trends
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 count and interval
loop++;
Sleep(INTERVAL);
} catch (error) {
Log(`Main logic error: ${error.message}`);
}
}
}
مارکیٹیں موثر بن جاتی ہیں
جب زیادہ سے زیادہ مقداری یا اعلی تعدد کی حکمت عملیوں میں ملوث ہوتے ہیں اور وہی لیڈ لیگ رشتہ تلاش کرتے ہیں تو ، بڑی مقدار میں فنڈز قیمت کے فرق کو تیزی سے ختم کردیں گے۔ مارکیٹ زیادہ سے زیادہ
زر مبادلہ کی پابندی یا فیس میں تبدیلی
چونکہ مختلف تبادلے کی فیس کی ساخت میں تبدیلی آتی ہے ، ایک بار جب فیس کے اخراجات ثالثی کے منافع سے تجاوز کر جاتے ہیں تو ، اعلی تعدد کی تجارتی حکمت عملیوں کی منافع بخشیت میں بہت کمی واقع ہوگی۔ یا اگر تبادلے میں مماثلت کی رفتار کو تیز کیا جاتا ہے ، تعدد اور مقدار کو محدود کرتا ہے ، اور تاخیر کو کم کرتا ہے تو ، یہ اس حکمت عملی کو بھی باطل کردے گا جو اصل میں متضاد تاخیر پر انحصار کرتا تھا۔
لیکویڈیٹی میں کمی اور کمی
جب مارکیٹ کا حجم ناکافی ہوتا ہے تو ، اعلی تعدد کی حکمت عملیوں کو اکثر زیادہ شدید سلائپ کا سامنا کرنا پڑتا ہے۔ یا بڑے آرڈرز تیزی سے قیمتوں کو بڑھا دیں گے ، جس کی وجہ سے اصل میں متوقع
مارکیٹ کی اتار چڑھاؤ میں تبدیلی
کچھ حکمت عملیاں
ہائی فریکوئنسی ٹریڈنگ حکمت عملی کا کلیدی نقطہ متعدد تبادلے سے قیمتوں کی گرفتاری اور