جب ابتدائی cryptocurrency مقداری تجارتی حکمت عملی ڈیزائن کرتے ہیں تو ، اکثر مختلف افعال کی ضروریات ہوتی ہیں۔ پروگرامنگ زبانوں اور پلیٹ فارمز سے قطع نظر ، ان سب کو ڈیزائننگ کی مختلف ضروریات کا سامنا کرنا پڑتا ہے۔ مثال کے طور پر ، بعض اوقات گردش کی متعدد تجارتی اقسام کی ضرورت ہوتی ہے ، بعض اوقات ملٹی پلیٹ فارم ہیجنگ کی ضرورت ہوتی ہے ، اور بعض اوقات مختلف تجارتی اقسام کو بیک وقت ہونا ضروری ہے۔ آئیے حکمت عملی کی گھومنے والی ضروریات کو نافذ کرنے کے دوران ڈیزائننگ کے کچھ تجربے کا اشتراک کریں۔
سیکھنے کا پلیٹ فارم اب بھی ایف ایم زیڈ کوانٹ ٹریڈنگ پلیٹ فارم کا استعمال کرتا ہے (https://www.fmz.com), اور مارکیٹ cryptocurrency مارکیٹ کے طور پر منتخب کیا جاتا ہے.
ان میں سے بیشتر طلب کی صورتحال کثیر کریپٹوکرنسی رجحان اور گرڈ کی حکمت عملیوں کے لئے تیار کی گئی ہیں ، جن کو مختلف تجارتی تکرار کے طریقوں کے ساتھ مارکیٹ میں عملدرآمد کرنے کی ضرورت ہے۔
عام طور پر اس طرح ڈیزائن کیا جاتا ہے:
function Process (symbol) {
exchange.IO("currency", symbol)
var ticker = _C(exchange.GetTicker)
Log("has switched trading pairs, processing trading pairs according to strategy logic:", symbol, "quotes: ", ticker)
// ...
// ..
// .
}
function main(){
var symbols = ["BTC_USDT", "LTC_USDT", "ETH_USDT"]
while (true) {
for (var i = 0 ; i < symbols.length; i++) {
Process(symbols[i])
Sleep(500)
}
}
}
ہم روبوٹ کی تشکیل:
یہ دیکھا جاسکتا ہے کہ اس کا احساس ہے کہ روبوٹ پر تبادلہ آبجیکٹ تشکیل دیا گیا ہے ، اور تجارتی جوڑی تبدیل کردی گئی ہے۔ مختلف تجارتی جوڑوں کی مارکیٹ حاصل کی گئی ہے ، اور ملٹی ٹریڈنگ کی قسم کی مارکیٹ پر عمل درآمد کیا گیا ہے۔ اور یہ حکمت عملی کی منطق کے تحت عمل درآمد کیا گیا ہے۔
یہ دیکھا جا سکتا ہے کہ ہم تین ٹریڈنگ جوڑے کی وضاحت: BTC_USDT، LTC_USDT، ETH_USDT، لوپ میں، iteratively مارکیٹ کوٹ حاصل، اور معلومات حاصل کرنے کے بعد، یہ خاص طور پر مارکیٹ کا پتہ لگانے اور حکمت عملی کی طرف سے ڈیزائن ٹریڈنگ منطق کو متحرک کر سکتے ہیں.
کچھ قارئین پوچھ سکتے ہیں:
یقینا دیگر ڈیزائن کے اختیارات ہیں، جو ہم ذیل میں متعارف کرایا جائے گا.
مختلف تجارتی جوڑوں کے مارکیٹ کے اعداد و شمار کو متعدد تبادلہ اشیاء کے ذریعہ حاصل کیا جاتا ہے ، اور یہ تکرار حکمت عملی منطق میں عملدرآمد کیا جاتا ہے۔
مثال کے طور پر ، روبوٹ کے لئے تین ایکسچینج آبجیکٹ تشکیل دے کر روبوٹ کو تشکیل دیں۔ تجارتی جوڑے بالترتیب BTC_USDT ، LTC_USDT ، اور ETH_USDT پر مقرر ہیں۔
نام
تمام کیا.
ہم نے ان کوڈوں میں تھوڑا سا تبدیلی کی، کیونکہ اس بار ہم نے روبوٹ میں متعدد ایکسچینج اشیاء شامل کیں، جو کہ ٹریڈنگ جوڑی BTC_USDT، LTC_USDT، ETH_USDT کی ایکسچینج اشیاء ہیں۔
function Process (e) {
var ticker = _C(e.GetTicker)
Log("exchange", e.GetName(), "Process trading pairs according to strategy logic:", e.GetCurrency(), "Quotes:", ticker)
// ...
// ..
// .
}
function main(){
while (true) {
for (var i = 0 ; i < exchanges.length; i++) {
Process(exchanges[i])
Sleep(500)
}
}
}
روبوٹ چلائیں:
مثال کے طور پر ہم نے اوپر بیان کیا ہے ، چاہے تجارتی جوڑوں کو تبدیل کرنا ہو یا تشکیل شدہ اکاؤنٹ کے متعدد مختلف تجارتی جوڑوں کے لئے تجارتی اعتراض شامل کرنا ہو۔ یہ سب صرف تبادلہ اکاؤنٹ کی تشکیل کا استعمال کر رہے ہیں (ایک تشکیل شدہ تبادلہ کا استعمال کرتے ہوئے) ۔
تو آپ کو ایک حکمت عملی میں ایک سے زیادہ تبادلہ اکاؤنٹس کا استعمال کیسے کرتے ہیں؟
کچھ حکمت عملی جیسے کثیر ایکسچینج کراس مارکیٹ ہیجنگ، ایک ہی ایکسچینج کے اندر کثیر اکاؤنٹ کی حکمت عملی.
مثال کے طور پر، ہم نے ڈیش بورڈ پر 2 تبادلے تشکیل دیا ہے -> تبادلے -> تبادلے کا صفحہ شامل کریں.
ہم حکمت عملی میں ان دو تبادلے کی طرف سے تشکیل اکاؤنٹس کی اثاثہ معلومات تک رسائی حاصل کر سکتے ہیں.
function main(){
Log(exchanges[0].GetAccount()) // Print the account asset information of the first exchange object.
Log(exchanges[1].GetAccount()) // ... Print the asset information of the Bit-Z exchange
}
یقینا، میں بھی ایک تبادلے کے لئے ایک دوسرے اور تیسرے اکاؤنٹ تبادلہ ترتیب شامل کر سکتے ہیں.
مثال کے طور پر، ہم Huobi فیوچر کے لئے ایک اور اکاؤنٹ شامل.
جیسا کہ آپ دیکھ سکتے ہیں، یہ دو
جب حکمت عملی بنائی جاتی ہے تو ، منتخب کرنے کے لئے روبوٹ
مثال کے طور پر، یہ دو اکاؤنٹس کو پہلے فروخت کرنے اور پھر عام گرڈ کی حکمت عملی کے ساتھ خریدنے کی اجازت دیتا ہے (اپ) یا پہلے خریدنے اور پھر فروخت (نیچے).
مندرجہ بالا دو مثالوں کے ذریعے
یہاں روبوٹ پر متعدد تبادلہ اشیاء کی تشکیل اور
فرق یہ ہے کہ مندرجہ بالا مثال ایک تبادلہ ترتیب ہے، یعنی:
جب روبوٹ تبادلہ آبجیکٹ کی تشکیل کرتا ہے، تو یہ ہمیشہ استعمال کرتا ہے:
یہ ترتیب.
یہ صرف ہے کہ جب آپ کو ایک تبادلہ آبجیکٹ شامل، ٹریڈنگ جوڑی کی ترتیبات مختلف ہیں.
اگر GetAccount فنکشن کو بلایا جائے تو اسی اکاؤنٹ کی اثاثہ کی معلومات تک ہمیشہ رسائی حاصل کی جاتی ہے۔
تاہم:
اس طرح تشکیل شدہ دو ہوبی فیوچر ایکسچینج اشیاء ، اگرچہ وہ تمام ہوبی فیوچر ہیں ، مختلف ایکسچینج اکاؤنٹس کی نمائندگی کرتے ہیں۔
کبھی کبھی کریپٹوکرنسی معاہدہ ہیجنگ کی حکمت عملی میں ، فوری تجارتی مواقع کو استعمال کرنے کے ل many ، متعدد منظرناموں کو بیک وقت رکھنے کی ضرورت ہوتی ہے۔ تاہم ، چونکہ معاہدہ مختلف ہے ، لہذا جب آپ مارکیٹ کی قیمت حاصل کرتے ہیں اور آرڈر دیتے ہیں تو آپ کو اسی معاہدے پر سوئچ کرنے کی ضرورت ہوتی ہے۔exchange.Go
ایک ترتیب دینے کے فنکشن کو انجام دینے یا اقتباس حاصل کرنے کے لئے، ہم وقت سازی کے ساتھ ایک مسئلہ ہے، بہت تیز نہیں. اور سوئچ معاہدے کے ڈیزائن بھی منطق اتنا آسان نہیں بناتا. کیا ایک بہتر طریقہ ہے؟
ہم روبوٹ کو دو ایکسچینج اشیاء شامل کر سکتے ہیں
پھر اس تبادلے کی ترتیب کا استعمال ایک اور تبادلے کا اعتراض شامل کرنے کے لئے.
ایک اشارہ باکس پاپ اپ ہو جائے گا!
ایک تبادلہ اکاؤنٹ کی ترتیب، آپ کو ایک ہی کرنسی یا ٹریڈنگ جوڑی کے تبادلہ اشیاء شامل نہیں کر سکتے ہیں.
میں کیا کروں؟ ایسا لگتا ہے کہ حکمت عملی روبوٹ دو تبادلہ اشیاء استعمال نہیں کر سکتے ہیں، اور تبادلہ اعتراض ایک تبادلہ اکاؤنٹ نمبر سے منسلک ہے؟
اب بھی ایک راستہ ہے!
چلو
جب ترتیب دیا گیا ہو تو محفوظ کریں پر کلک کریں۔
اس طرح ہمارے پاس دو تبادلہ کی ترتیبات ہیں، لیکن ایک ہی API کلید کی ترتیب کی معلومات استعمال کی جاتی ہے.
اس کے کیا فوائد ہیں؟
ایک حکمت عملی لکھتے وقت، ڈیزائن بہت آسان ہو جائے گا!
function main(){
exchanges[0].SetContractType("quarter") // Set the first added exchange object. The current contract is a quarterly contract.
exchanges[1].SetContractType("this_week") // Set the second added exchange object, the current contract is the current week contract
while (true) {
var beginTime = new Date().getTime() // Record the timestamp from which this time the market quote was taken.
var rA = exchanges[0].Go("GetTicker") // Create a concurrent thread to get the first exchange object, which is the market data for the quarterly contract.
var rB = exchanges[1].Go("GetTicker") // Create a concurrent thread to get the second exchange object, which is the market data for the weekly contract.
var tickerA = rA.wait() // The two threads executing each other perform their own tasks, waiting to get the data. When A waits, the B task is also executing.
var tickerB = rB.wait() // So it seems to be sequential execution, actually at the bottom of the concurrency. Only when you get the order is to get A first, and get B.
var endTime = new Date().getTime() // Record the timestamp at the end of the two contract quotes.
if (tickerA && tickerB) { // If there is no problem with the data obtained, execute the following logic.
var diff = tickerA.Last - tickerB.Last // calculate the difference
$.PlotLine("diff", diff) // Use the line drawing library to plot the difference on the chart.
if (diff > 500) { // If the spread is greater than 500, hedge arbitrage (of course, the difference of 500 is relatively large, rarely seen.)
// Hedging
rA = exchanges[0].Go("Sell", tickerA.Buy, 1) // Concurrent threads create a selling order under the quarterly contract
rB = exchanges[1].Go("Buy", tickerB.Sell, 1) // Concurrent thread create a buying order under the weekly contract
var idA = rA.wait() // Waiting for the return of placing order results, returning the order ID
var idB = rB.wait() // ...
}
// ...
}
LogStatus(_D(), "Concurrently get two contract quotes taking time:", endTime - beginTime, "millisecond.") // Shows the time on the status bar to know that the program is executing.
Sleep(500)
}
کیا یہ ڈیزائن کی حکمت عملی بہت آسان اور واضح ہے؟
حقیقی مارکیٹ آپریشن:
جیسا کہ آپ دیکھ سکتے ہیں، ہر بار دو معاہدوں کی قیمت حاصل کرنے میں صرف 50 ملی سیکنڈ لگتے ہیں۔