ক্রিপ্টোকারেন্সির পরিমাণগত ট্রেডিং কৌশল ডিজাইন করার সময়, প্রায়শই বিভিন্ন ফাংশন প্রয়োজনীয়তা থাকে। প্রোগ্রামিং ভাষা এবং প্ল্যাটফর্ম নির্বিশেষে, তারা সকলেই বিভিন্ন ডিজাইনিং প্রয়োজনীয়তার মুখোমুখি হবে। উদাহরণস্বরূপ, কখনও কখনও ঘূর্ণনের একাধিক ট্রেডিং জাতের প্রয়োজন হয়, কখনও কখনও মাল্টি-প্ল্যাটফর্ম হেজিং প্রয়োজন হয় এবং কখনও কখনও বিভিন্ন ট্রেডিং জাতের সমান্তরাল হওয়ার প্রয়োজন হয়। চলুন কৌশল ঘূর্ণন প্রয়োজনীয়তা বাস্তবায়নের সময় ডিজাইনের কিছু অভিজ্ঞতা ভাগ করি।
এই লার্নিং প্ল্যাটফর্মটি এখনও FMZ Quant ট্রেডিং প্ল্যাটফর্ম ব্যবহার করে (https://www.fmz.com), এবং বাজারটি ক্রিপ্টোকারেন্সি বাজার হিসাবে নির্বাচিত হয়।
এই চাহিদা পরিস্থিতিগুলির বেশিরভাগই মাল্টি-ক্রিপ্টোকারেন্সি ট্রেন্ড এবং গ্রিড কৌশলগুলির জন্য প্রস্তুত করা হয়, যা বিভিন্ন ট্রেডিং পুনরাবৃত্তি পদ্ধতির সাথে বাজারে কার্যকর করা দরকার।
সাধারণত এরকম ডিজাইন করা হয়:
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 এর এক্সচেঞ্জ অবজেক্ট।
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 ফিউচার এক্সচেঞ্জ অবজেক্ট নির্বাচন করার জন্য Robot
উদাহরণস্বরূপ, এটি দুটি অ্যাকাউন্টকে প্রথমে বিক্রয় করতে এবং তারপরে সাধারণ গ্রিড কৌশল (উপরে) বা প্রথমে কিনতে এবং তারপরে বিক্রয় (নীচে) দিয়ে কিনতে দেয়।
উপরের দুইটি উদাহরণের মাধ্যমে
এখানে রোবটে একাধিক এক্সচেঞ্জ অবজেক্ট কনফিগার করার এবং
পার্থক্য হল যে উপরের উদাহরণটি একটি এক্সচেঞ্জ কনফিগারেশন, অর্থাৎঃ
যখন রোবট এক্সচেঞ্জ অবজেক্ট কনফিগার করে, তখন এটি সবসময় ব্যবহার করেঃ
এই কনফিগারেশন।
এটা শুধু যখন আপনি একটি বিনিময় বস্তু যোগ, ট্রেডিং জোড়া সেটিংস ভিন্ন।
যদি GetAccount ফাংশনটি কল করা হয়, একই অ্যাকাউন্টের সম্পদ তথ্য সর্বদা অ্যাক্সেস করা হয়।
কিন্তু:
এইভাবে কনফিগার করা দুটি হুবি ফিউচার এক্সচেঞ্জ অবজেক্ট, যদিও তারা সমস্ত হুবি ফিউচার, বিভিন্ন এক্সচেঞ্জ অ্যাকাউন্ট প্রতিনিধিত্ব করে।
কখনও কখনও ক্রিপ্টোকারেন্সি চুক্তি হেজিংয়ের কৌশলতে, ক্ষণস্থায়ী ট্রেডিং সুযোগগুলি দখল করার জন্য, অনেকগুলি দৃশ্যমানতা একযোগে স্থাপন করা দরকার। তবে চুক্তিটি আলাদা হওয়ায়, আপনি যখন বাজারের উদ্ধৃতি পান এবং অর্ডার দেন তখন আপনাকে সংশ্লিষ্ট চুক্তিতে স্যুইচ করতে হবে।exchange.Go
একটি স্থান অর্ডার ফাংশন বা উদ্ধৃতি পেতে, সিঙ্ক্রোনাইজেশন সঙ্গে একটি সমস্যা আছে, খুব দ্রুত না. এবং সুইচ চুক্তি নকশা এছাড়াও লজিক এত সহজ না করে তোলে. একটি ভাল উপায় আছে?
অবশ্যই আছে, আমরা একই এক্সচেঞ্জ অ্যাকাউন্টে রোবটের জন্য একাধিক এক্সচেঞ্জ অবজেক্ট কনফিগার করে রোবটে দুটি এক্সচেঞ্জ অবজেক্ট যুক্ত করতে পারি।
তারপর এই এক্সচেঞ্জ কনফিগারেশন ব্যবহার করে আরেকটি এক্সচেঞ্জ অবজেক্ট যোগ করুন।
একটি প্রম্পট বক্স পপ আপ হবে!
একটি বিনিময় অ্যাকাউন্ট কনফিগারেশন, আপনি একই মুদ্রা বা ট্রেডিং জোড়া বিনিময় বস্তু যোগ করতে পারবেন না.
আমার কি করা উচিত? মনে হচ্ছে যে কৌশল রোবট দুটি বিনিময় বস্তু ব্যবহার করতে পারে না, এবং বিনিময় বস্তু একটি বিনিময় অ্যাকাউন্ট নম্বর আবদ্ধ করা হয়?
এখনো একটা উপায় আছে!
আসুন
কনফিগার করা হলে সংরক্ষণ করুন ক্লিক করুন।
এই ভাবে আমাদের দুটি এক্সচেঞ্জ কনফিগারেশন আছে, কিন্তু একই API KEY কনফিগারেশন তথ্য ব্যবহার করা হয়।
এর উপকারিতা কি?
যখন আপনি একটি কৌশল লিখবেন, তখন নকশাটি খুব সহজ হবে!
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)
}
এই নকশা কৌশল কি অনেক সহজ এবং পরিষ্কার?
প্রকৃত বাজার অপারেশনঃ
আপনি দেখতে পাচ্ছেন, প্রতিবার দুইটি চুক্তির মূল্য পেতে মাত্র ৫০ মিলিসেকেন্ড সময় লাগে।