আসুন আমরা আগের নিবন্ধ থেকে আলোচনা চালিয়ে যাইঃ এফএমজেড কোয়ান্টিফিকেশনের ভিত্তিতে অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেমের নকশা (1) (https://www.fmz.com/digest-topic/9729) এবং সিঙ্ক্রোনাইজড অর্ডার-ফলো-আপের জন্য একটি কৌশল তৈরি করতে শুরু করুন।
ডিজাইনের কয়েকটি বিষয় বিবেচনা করুন:
var isStopFollow = false // Used to mark whether the current order is being followed
var reStartPwd = null // Used to record the restart password
তারপর আমরা কৌশল বিরতি / পুনরায় আরম্ভ করার জন্য কৌশল সম্পাদনা পৃষ্ঠায় ইন্টারেক্টিভ কন্ট্রোল যোগ করুন (রিয়েল বট বন্ধ না, শুধু লজিক্যাল বিরতি, কোন আদেশ অনুসরণ করা) । আমরা বিরতি যখন একটি বিরতি পাসওয়ার্ড সেট করতে পারেন, যাতে এমনকি আপনার বাস্তব বট সঙ্গে প্রসারিত API কী এরOrder Synchronization Management System Class Library (Single Server)
শেষ, এটা আপনার কৌশল জাগাতে পারবেন না. আদেশ অনুসরণ পুনরায় আরম্ভ করার সময়, আদেশ অনুসরণ ফাংশন জাগাতে পূর্বনির্ধারিত পাসওয়ার্ড লিখুন.
সংশ্লিষ্ট ফাংশন বাস্তবায়নের জন্য কোডঃ
...
// Judge the interaction command
if (arr.length == 2) {
// Buttons with controls
if (arr[0] == "stop/restart") {
// Pause/restart order-following
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("it has stopped the order-following,", "Set the restart password as:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("it has restarted the order-following, ", "Clear the restart password.", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("Restart password error!")
}
}
continue
}
specifiedAmount: অর্ডার-পরবর্তী সংখ্যা নির্দিষ্ট করুন, ডিফল্ট হল -1, অর্থাৎ নির্দিষ্ট করা হয়নি। zoomAmountRatio: পাঠানো অর্ডারের পরিমাণ অনুযায়ী স্কেলিং, উদাহরণস্বরূপ, যদি পাঠানো সংকেতটি হয়ঃ ETH_USDT,swap,buy,1, zoomAmountRatio দ্বারা অর্ডারের পরিমাণের মান গুণ করুন। ডিফল্ট হল -1, অর্থাৎ কোনও স্কেলিং নেই।
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
এখানে এটি প্রাপ্ত সংকেতে অনুসরণ করা অর্ডারের পরিমাণের জন্য স্কেল বা নির্দিষ্ট মান নির্দিষ্ট করতে বাস্তবায়িত হয়।
স্পট অর্ডার দ্বারা ব্যবহৃত ক্লাস লাইব্রেরি স্থাপন করা হয়ঃhttps://www.fmz.com/strategy/10989ভবিষ্যতে অর্ডার দ্বারা ব্যবহৃত ক্লাস লাইব্রেরি স্থাপন করা হয়ঃhttps://www.fmz.com/strategy/203258
function trade(action) {
// Switch trading pairs and set up contracts
exchange.SetCurrency(action.symbol)
if (action.ct != "spot") {
exchange.SetContractType(action.ct)
}
var retTrade = null
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
if (action.direction == "buy") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount)
} else if (action.direction == "sell") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount)
} else if (action.direction == "closebuy") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount)
} else if (action.direction == "closesell") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount)
}
return retTrade
}
সুতরাং আমরা দেখতে পাচ্ছি যে অর্ডার দেওয়ার জন্য শুধু একটি বাক্য প্রয়োজনঃ$.Sell(amount)
, $.Buy(amount)
, $.OpenLong(exchange, action.ct, amount)
ইত্যাদি।
পূর্ববর্তী সময়ের অস্থায়ী কোডOrder Synchronous Management System (Synchronous Server)
নিম্নরূপ ছিলঃ
এখন আমরা অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম (সিঙ্ক্রোনস সার্ভার) পুনরায় ডিজাইন শুরুঃ
// Global variables
var isStopFollow = false
var reStartPwd = null
function trade(action) {
// Switch trading pairs and set up contracts
exchange.SetCurrency(action.symbol)
if (action.ct != "spot") {
exchange.SetContractType(action.ct)
}
var retTrade = null
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
if (action.direction == "buy") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount)
} else if (action.direction == "sell") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount)
} else if (action.direction == "closebuy") {
retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount)
} else if (action.direction == "closesell") {
retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount)
}
return retTrade
}
function parseCmd(cmd) {
var objAction = {}
// Parse cmd, such as: ETH_USDT,swap,buy,1
var arr = cmd.split(",")
if (arr.length != 4) {
return null
}
objAction.symbol = arr[0]
objAction.ct = arr[1]
objAction.direction = arr[2]
objAction.amount = arr[3]
return objAction
}
function main() {
// Clear all logs
LogReset(1)
if (isSimulateOKEX) {
exchange.IO("simulate", true)
Log("Switch to OKEX demo!")
}
// Set accuracy
exchange.SetPrecision(pricePrecision, amountPrecision)
// Check zoom and specify it cannot be set at the same time
if (specifiedAmount != -1 && zoomAmountRatio != -1) {
throw "it cannot specify simultaneous volume and scaling volume at the same time"
}
while (true) {
var cmd = GetCommand()
if (cmd) {
Log("cmd: ", cmd)
var arr = cmd.split(":")
// Judge interaction commands
if (arr.length == 2) {
// Buttons with controls
if (arr[0] == "stop/restart") {
// Pause/restart order-following
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("it has stopped the order-following.", "Set the restart password as.", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("it has restarted the order-following", "Clear the restart password.", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("Restart password error!")
}
}
continue
}
// Permission to follow orders
if (!isStopFollow) {
// Resolve the interaction instructions of order-following signal
var objAction = parseCmd(cmd)
if (objAction) {
// The analysis is correct
var ret = trade(objAction)
} else {
Log("Wrong signal command cmd:", cmd)
}
}
}
// Display order-following status
LogStatus(_D(), isStopFollow ? "Stop Synchronization" : "Keep Synchronization", "\n")
Sleep(1000)
}
}
আমরা এই সময় জন্য Binance বাস্তব বট ব্যবহার করে অর্ডার নেতৃস্থানীয় অ্যাকাউন্ট পরীক্ষা, এবং আমরা অর্ডার অনুসরণ বাস্তব বট জন্য OKEX অ্যাকাউন্ট ব্যবহার. অর্ডার নেতৃস্থানীয় জন্য, আমরা এখনও ব্যবহারmain
পরীক্ষার ফাংশনে ফাংশন(Order Synchronization Management System Class Library (Single Server)
পূর্ববর্তী নিবন্ধে ব্যবহৃত টেমপ্লেট) ।
এখানে আমরা
পরবর্তী, আসুন
তারপরে আমরা এটি আবার চালাই, যা অর্ডার-লিডিংয়ের জন্য দায়ী (অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাস লাইব্রেরি (একক সার্ভার)) ।
একই অপারেশন একটি আদেশ অনুসরণ বাস্তব বট দ্বারা triggered ছিল.
কৌশলগত ঠিকানা: অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাস লাইব্রেরি (একক সার্ভার) (https://www.fmz.com/strategy/345171) অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম (সিঙ্ক্রোনস সার্ভার) (https://www.fmz.com/strategy/345172)
কৌশলটি শুধুমাত্র যোগাযোগ এবং শেখার জন্য ডিজাইন করা হয়েছে, দয়া করে প্রকৃত চাহিদা অনুযায়ী সামঞ্জস্য এবং অপ্টিমাইজ করুন।