এফএমজেডের পুরাতন প্রবন্ধে আমরা বিভিন্ন অর্ডার, সঞ্চয়স্থান এবং সিঙ্ক্রোনাইজেশন কৌশল ডিজাইন করেছি।
এগুলি হ'ল অর্ডার বাস্তবায়ন পরিচালনা, সঞ্চয় সিনক্রোনাইজেশন এবং রেফারেন্স অ্যাকাউন্ট এবং সিঙ্ক্রোনাইজেশন অ্যাকাউন্টগুলিকে একক নীতিতে রাখা। আজ আমরা কিছুটা ভিন্ন নকশায় চেষ্টা করব, এফএমজেডের পরিমাণগত ট্রেডিং প্ল্যাটফর্মের শক্তিশালী এক্সটেনশন এপিআই ইন্টারফেসের উপর ভিত্তি করে, আমরা একটি অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ডিজাইন করব।
প্রথমত, আমাদের কিছু ভাল পরামর্শ, চাহিদা দরকার। উপরের দুটি মেয়াদী অর্ডার এবং স্টক সিঙ্ক্রোনাইজেশন কৌশলগুলির মধ্যে কয়েকটি সুস্পষ্ট ব্যথা রয়েছে যা আমরা আলোচনা করবঃ
১, সিঙ্ক্রোনাইজেশন পলিসির বাস্তবায়নকারীকে অবশ্যই রেফারেন্স অ্যাকাউন্টের এক্সচেঞ্জ এপিআই কী থাকতে হবে, সিঙ্ক অ্যাকাউন্টের এক্সচেঞ্জ এপিআই কী থাকতে হবে। এই সমস্যাটি ব্যবহারের ক্ষেত্রে হলঃ আপনার অন্যান্য এক্সচেঞ্জ অ্যাকাউন্টগুলি আপনার নিজের অ্যাকাউন্টের সাথে অনুসরণ করা ঠিক আছে; তবে রেফারেন্স অ্যাকাউন্ট এবং সিঙ্ক্রোনাইজড অ্যাকাউন্টগুলি একক মালিকের নয় এমন পরিস্থিতিতে সমস্যা হতে পারে। সিঙ্ক্রোনাইজড অ্যাকাউন্টের মালিকরা কখনও কখনও সুরক্ষার কারণে তাদের এক্সচেঞ্জ অ্যাকাউন্টের API KEY সরবরাহ করতে রাজি হন না; তবে API KEY না দিয়ে কীভাবে একক লেনদেন সিঙ্ক করবেন?
সমাধানঃ
এফএমজেডের এক্সটেনশন এপিআই ইন্টারফেস ব্যবহার করে, সিঙ্ক্রোনাইজড অ্যাকাউন্টের মালিকদের (অনুসূচক) কেবলমাত্র এফএমজেডের পরিমাণগত ট্রেডিং প্ল্যাটফর্মে নিবন্ধন করতে হবে এবং তারপরে একটি কৌশল চালাতে হবে (এই নিবন্ধটি ডিজাইন করা সিস্টেমের মধ্যে):订单同步管理系统(Synchronous Server)
এফএমজেডের এক্সটেনশন এপিআই কী (দ্রষ্টব্য, এক্সচেঞ্জ অ্যাকাউন্টের এপিআই কী নয়) এবং অর্ডার সিঙ্ক্রোনস সার্ভার (অর্ডার ম্যানেজমেন্ট সিস্টেম) এপিআই আইডিটি রেফারেন্স অ্যাকাউন্টের মালিকদের দেওয়া যেতে পারে।
যখন অ্যাকাউন্ট হোল্ডারদের রেফারেন্স ডিস্কগুলি এই সিস্টেমের জন্য ডিজাইন করা হয়订单同步管理系统类库(Single Server)
) একটি সংকেত প্রেরণ করে, সিঙ্ক অ্যাকাউন্টের হোল্ডারের বাস্তব ডিস্কটি একটি লেনদেনের সংকেত গ্রহণ করে এবং স্বয়ংক্রিয়ভাবে অর্ডার দেয়।
২। অনেক ডেভেলপার এর তুলনামূলকভাবে ভাল কৌশল আছে এবং উপরে বর্ণিত দুটি টার্গেট অর্ডার, স্টকের সিঙ্ক্রোনাইজেশন কৌশল ব্যবহার করতে পারে না; কারণ এটি তাদের কৌশলগুলিকে এই সিঙ্ক্রোনাইজেশন কৌশলগুলির সাথে একত্রিত করতে হবে, যা কৌশলগুলিকে ব্যাপকভাবে পরিবর্তন করতে পারে। আপনার কিছু সুপ্রতিষ্ঠিত কৌশলগুলিকে সরাসরি অর্ডার সিঙ্ক্রোনাইজেশনের জন্য আপগ্রেড করার কোনও ভাল উপায় আছে কি?
সমাধানঃ
আপনি একটি অর্ডার সিঙ্ক্রোনাইজড টেমপ্লেট ক্লাস লাইব্রেরি (এই নিবন্ধে ডিজাইন করা সিস্টেমের মধ্যে) ডিজাইন করতে পারেন订单同步管理系统类库(Single Server)
নীতিমালা), যা রেফারেন্স অ্যাকাউন্টের মালিক (ব্যান্ডার) কে সরাসরি এই টেমপ্লেট ক্লাস লাইব্রেরিতে এম্বেড করার অনুমতি দেয়।
৩। একটি অতিরিক্ত বাস্তব প্লেট হ্রাস করুন। সর্বশেষ ব্যথাটি হল, যদি উপরে বর্ণিত দুইটি ফরোয়ার্ড অর্ডার, হোল্ডিং সিঙ্ক্রোনাইজেশন কৌশল ব্যবহার করা হয় তবে অতিরিক্তভাবে একটি ভার্চুয়াল মনিটরিং রেফারেন্স অ্যাকাউন্ট (ব্যান্ডেজ অ্যাকাউন্ট) খুলতে হবে। সমাধানঃ টেমপ্লেট ক্লাস ল্যাবরেটরি ব্যবহার করে বৈশিষ্ট্যগুলিকে রেফারেন্স অ্যাকাউন্ট নীতিতে এম্বেড করুন।
তাই এই সিস্টেমটি দুটি অংশে গঠিতঃ ১, অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাস লাইব্রেরি (Single Server) ২, অর্ডার সিঙ্ক্রোনস ম্যানেজমেন্ট সিস্টেম (Synchronous Server)
আপনি যখন আপনার চাহিদা বুঝতে পারবেন, তখনই আপনি ডিজাইন শুরু করতে পারবেন।
মনে রাখবেন, এটি একটি কৌশল নয়; এটি একটি FMZ টেমপ্লেট লাইব্রেরি। টেমপ্লেট লাইব্রেরির ধারণাটি FMZ API ডকুমেন্টেশনে অনুসন্ধান করা যেতে পারে।
টেমপ্লেট ক্লাস লাইব্রেরির কোডঃ
// 全局变量
var keyName_label = "label"
var keyName_robotId = "robotId"
var keyName_extendAccessKey = "extendAccessKey"
var keyName_extendSecretKey = "extendSecretKey"
var fmzExtendApis = parseConfigs([config1, config2, config3, config4, config5])
var mapInitRefPosAmount = {}
function parseConfigs(configs) {
var arr = []
_.each(configs, function(config) {
if (config == "") {
return
}
var strArr = config.split(",")
if (strArr.length != 4) {
throw "configs error!"
}
var obj = {}
obj[keyName_label] = strArr[0]
obj[keyName_robotId] = strArr[1]
obj[keyName_extendAccessKey] = strArr[2]
obj[keyName_extendSecretKey] = strArr[3]
arr.push(obj)
})
return arr
}
function getPosAmount(pos, ct) {
var longPosAmount = 0
var shortPosAmount = 0
_.each(pos, function(ele) {
if (ele.ContractType == ct && ele.Type == PD_LONG) {
longPosAmount = ele.Amount
} else if (ele.ContractType == ct && ele.Type == PD_SHORT) {
shortPosAmount = ele.Amount
}
})
var timestamp = new Date().getTime()
return {ts: timestamp, long: longPosAmount, short: shortPosAmount}
}
function sendCommandRobotMsg (robotId, accessKey, secretKey, msg) {
// https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"ok12345"]
var url = "https://www.fmz.com/api/v1?access_key=" + accessKey + "&secret_key=" + secretKey + "&method=CommandRobot&args=[" + robotId + ',"' + msg + '"]'
Log(url)
var ret = HttpQuery(url)
return ret
}
function follow(nowPosAmount, symbol, ct, type, delta) {
var msg = ""
var nowAmount = type == PD_LONG ? nowPosAmount.long : nowPosAmount.short
if (delta > 0) {
// 开仓
var tradeDirection = type == PD_LONG ? "buy" : "sell"
// 发送信号
msg = symbol + "," + ct + "," + tradeDirection + "," + Math.abs(delta)
} else if (delta < 0) {
// 平仓
var tradeDirection = type == PD_LONG ? "closebuy" : "closesell"
if (nowAmount <= 0) {
Log("未检测到持仓")
return
}
// 发送信号
msg = symbol + "," + ct + "," + tradeDirection + "," + Math.abs(delta)
} else {
throw "错误"
}
if (msg) {
_.each(fmzExtendApis, function(extendApiConfig) {
var ret = sendCommandRobotMsg(extendApiConfig[keyName_robotId], extendApiConfig[keyName_extendAccessKey], extendApiConfig[keyName_extendSecretKey], msg)
Log("调用CommandRobot接口,", "label:", extendApiConfig[keyName_label], ", msg:", msg, ", ret:", ret)
Sleep(1000)
})
}
}
$.PosMonitor = function(exIndex, symbol, ct) {
var ts = new Date().getTime()
var ex = exchanges[exIndex]
// 判断ex类型
var exName = ex.GetName()
var isFutures = exName.includes("Futures_")
var exType = isFutures ? "futures" : "spot"
if (!isFutures) {
throw "仅支持期货跟单"
}
if (exType == "futures") {
// 缓存 symbol ct
var buffSymbol = ex.GetCurrency()
var buffCt = ex.GetContractType()
// 切换到对应的交易对、合约代码
ex.SetCurrency(symbol)
if (!ex.SetContractType(ct)) {
throw "SetContractType failed"
}
// 监控持仓
var keyInitRefPosAmount = "refPos-" + exIndex + "-" + symbol + "-" + ct // refPos-exIndex-symbol-contractType
var initRefPosAmount = mapInitRefPosAmount[keyInitRefPosAmount]
if (!initRefPosAmount) {
// 没有初始化数据,初始化
mapInitRefPosAmount[keyInitRefPosAmount] = getPosAmount(_C(ex.GetPosition), ct)
initRefPosAmount = mapInitRefPosAmount[keyInitRefPosAmount]
}
// 监控
var nowRefPosAmount = getPosAmount(_C(ex.GetPosition), ct)
// 计算仓位变动
var longPosDelta = nowRefPosAmount.long - initRefPosAmount.long
var shortPosDelta = nowRefPosAmount.short - initRefPosAmount.short
// 检测变动
if (!(longPosDelta == 0 && shortPosDelta == 0)) {
// 执行多头动作
if (longPosDelta != 0) {
Log(ex.GetName(), ex.GetLabel(), symbol, ct, "执行多头跟单,变动量:", longPosDelta)
follow(nowRefPosAmount, symbol, ct, PD_LONG, longPosDelta)
}
// 执行空头动作
if (shortPosDelta != 0) {
Log(ex.GetName(), ex.GetLabel(), symbol, ct, "执行空头跟单,变动量:", shortPosDelta)
follow(nowRefPosAmount, symbol, ct, PD_SHORT, shortPosDelta)
}
// 执行跟单操作后,更新
mapInitRefPosAmount[keyInitRefPosAmount] = nowRefPosAmount
}
// 恢复 symbol ct
ex.SetCurrency(buffSymbol)
ex.SetContractType(buffCt)
} else if (exType == "spot") {
// 现货
}
}
$.getTbl = function() {
var tbl = {
"type" : "table",
"title" : "同步数据",
"cols" : [],
"rows" : []
}
// 构造表头
tbl.cols.push("监控账户:refPos-exIndex-symbol-contractType")
tbl.cols.push(`监控持仓:{"时间戳":xxx,"多头持仓量":xxx,"空头持仓量":xxx}`)
_.each(fmzExtendApis, function(extendApiData, index) {
tbl.cols.push(keyName_robotId + "-" + index)
})
// 写入数据
_.each(mapInitRefPosAmount, function(initRefPosAmount, key) {
var arr = [key, JSON.stringify(initRefPosAmount)]
_.each(fmzExtendApis, function(extendApiData) {
arr.push(extendApiData[keyName_robotId])
})
tbl.rows.push(arr)
})
return tbl
}
// 引用该模板类库的策略调用范例
function main() {
// 清除所有日志
LogReset(1)
// 切换到OKEX 模拟盘测试
exchanges[0].IO("simulate", true)
// 设置合约
exchanges[0].SetCurrency("ETH_USDT")
exchanges[0].SetContractType("swap")
// 定时交易时间间隔
var tradeInterval = 1000 * 60 * 3 // 三分钟交易一次,用于观察跟单信号
var lastTradeTS = new Date().getTime()
while (true) {
// 策略其它逻辑...
// 用于测试的模拟交易触发
var ts = new Date().getTime()
if (ts - lastTradeTS > tradeInterval) {
Log("模拟带单策略发生交易,持仓变化", "#FF0000")
exchanges[0].SetDirection("buy")
exchanges[0].Buy(-1, 1)
lastTradeTS = ts
}
// 使用模板的接口函数
$.PosMonitor(0, "ETH_USDT", "swap") // 可以设置多个监控,监控带单策略上的不同的exchange对象
var tbl = $.getTbl()
// 显示状态栏
LogStatus(_D(), "\n" + "`" + JSON.stringify(tbl) + "`")
Sleep(1000)
}
}
এটির নকশা খুবই সহজ এবং এই ক্লাস লাইব্রেরিতে দুটি ফাংশন রয়েছে।订单同步管理系统类库(Single Server)
টেমপ্লেট ক্লাস লাইব্রেরির পরে । এই কৌশলটি নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারে ।
$$ পোস্ট মনিটর এই ফাংশনটির ভূমিকা হল এক্সচেঞ্জের নীতিতে বস্তুর হোল্ডিং পরিবর্তনগুলি পর্যবেক্ষণ করা এবং তারপরে টেমপ্লেটঃ অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাসিক্যাল (Single Server) এর পরামিতিগুলিতে সেট করা বাস্তব ডিস্ক ট্রেডিং সিগন্যালগুলি প্রেরণ করা।
$.getTbl এটি মনিটরিংয়ের সিঙ্ক্রোনাইজড ডেটা ফেরত দেয়।
ব্যবহারের উদাহরণ হলঃ অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাস লাইব্রেরি (Single Server) টেমপ্লেটmain
ফাংশনঃ
// 引用该模板类库的策略调用范例
function main() {
// 清除所有日志
LogReset(1)
// 切换到OKEX 模拟盘测试
exchanges[0].IO("simulate", true)
// 设置合约
exchanges[0].SetCurrency("ETH_USDT")
exchanges[0].SetContractType("swap")
// 定时交易时间间隔
var tradeInterval = 1000 * 60 * 3 // 三分钟交易一次,用于观察跟单信号
var lastTradeTS = new Date().getTime()
while (true) {
// 策略其它逻辑...
// 用于测试的模拟交易触发
var ts = new Date().getTime()
if (ts - lastTradeTS > tradeInterval) {
Log("模拟带单策略发生交易,持仓变化", "#FF0000")
exchanges[0].SetDirection("buy")
exchanges[0].Buy(-1, 1)
lastTradeTS = ts
}
// 使用模板的接口函数
$.PosMonitor(0, "ETH_USDT", "swap") // 可以设置多个监控,监控带单策略上的不同的exchange对象
var tbl = $.getTbl()
// 显示状态栏
LogStatus(_D(), "\n" + "`" + JSON.stringify(tbl) + "`")
Sleep(1000)
}
}
একটি টেমপ্লেট ক্লাস ল্যাবরেটরি নিজেই একটি কৌশল ভার্চুয়াল তৈরি করতে পারে, যা সাধারণত টেমপ্লেট ক্লাস ল্যাবরেটরি পরীক্ষা করার জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, এই টেমপ্লেটটির পরীক্ষা। আপনি টেমপ্লেটের মধ্যে যা বোঝা যায় তা বুঝতে পারেন।main
ফাংশন হল আপনার নিজস্ব কৌশল।main
ফাংশন ।
পরীক্ষার কোডটি OKEX অ্যানালগ টেস্টের জন্য লেখা হয়েছে, যা FMZ এ OKEX অ্যানালগটির API KEY কনফিগার করা প্রয়োজন যা একটি রেফারেন্স অ্যাকাউন্ট হিসাবে ব্যবহৃত হয়, main ফাংশনে অ্যানালগ হিসাবে স্যুইচ করা শুরু হয়; তারপর লেনদেনের জোড়াটি ETH_USDT হিসাবে সেট করা হয়, চুক্তিটি স্থায়ী হিসাবে সেট করা হয়; তারপর একটি while loop এ প্রবেশ করা হয়; লুপে প্রতি 3 মিনিটে একটি sub-order ট্রেড করা হয়, যা অ্যানালগ কৌশল ট্রেডিং ট্রিগার করতে ব্যবহৃত হয়; যখন লুপে কল করা হয়।$.PosMonitor(0, "ETH_USDT", "swap")
, এই ফাংশনটি কল করার জন্য প্রথম প্যারামিটারটি 0 এ পাঠানো হয়, যা এক্সচেঞ্জ[0] এর উপর নজরদারি করে। এই এক্সচেঞ্জের বস্তুটি ETH_USDT লেনদেনের জোড়া, সুইপ চুক্তি পর্যবেক্ষণ করে; তারপর কল করা হয়।$.getTbl()
চার্ট তথ্য সংগ্রহ এবং ব্যবহারLogStatus(_D(), "\n" + "`" + JSON.stringify(tbl) + "`")
স্টেটস বারে চার্ট ডেটা প্রদর্শিত হবে।
আপনি দেখতে পাচ্ছেন, যদি আপনি এই টেমপ্লেটটি উল্লেখ করে এমন একটি নীতিতে এটি ব্যবহার করেন$.PosMonitor(0, "ETH_USDT", "swap")
এই পদ্ধতিতে, আপনি একটি কৌশল তৈরি করতে পারেন যা একটি নির্দিষ্ট জাতের স্ট্যাকিং পর্যবেক্ষণ করতে পারে, স্ট্যাকিং পরিবর্তনগুলিকে বার্তা প্রেরণের জন্য।
পরীক্ষার আগে ব্যাখ্যা করুন।订单同步管理系统类库(Single Server)
কৌশলগত পরামিতি নকশাঃ
আমি আগে বলেছি কিভাবে টেমপ্লেটের ইন্টারফেস ফাংশন ব্যবহার করে একটি কৌশলকে আপগ্রেড করা যায় যাতে এটিতে ব্যান্ডউইন্ড বৈশিষ্ট্য থাকে; তাহলে স্টকের পরিবর্তন হলে সিগন্যালটি কে পাঠায়?
কে পাঠাবে, সেটা প্রশ্ন।订单同步管理系统类库(Single Server)
এই প্যারামিটারগুলি কনফিগার করা হয়েছে।
আপনি দেখতে পাচ্ছেন যে 5 টি প্যারামিটার রয়েছে, সর্বাধিক 5 টি ধাক্কা সমর্থন করে ((আরও যোগ করার প্রয়োজন হলে এটি স্বয়ংক্রিয়ভাবে প্রসারিত হতে পারে), প্যারামিটারটি ডিফল্টরূপে খালি স্ট্রিং, অর্থাৎ এটি পরিচালনা করে না।
label সিঙ্ক্রোনাইজড অ্যাকাউন্টের ট্যাগ, যা একটি অ্যাকাউন্টকে চিহ্নিত করার জন্য ব্যবহৃত হয় এবং নামটি আপনি যে কোনও জায়গায় সেট করতে পারেন।
রোবট আইডি
ডিস্ক আইডি, সিঙ্ক অ্যাকাউন্টের মালিকদের দ্বারা তৈরি订单同步管理系统(Synchronous Server)
এই ভিডিওটি একটি ভিডিও কনফারেন্স।
অ্যাক্সেস কী এফএমজেডের এক্সটেনশন এপিআই এর অ্যাক্সেস কী
সিক্রেট কী FMZ এর এক্সটেনশন API এর secretKey
আমরা এখন একটি সহজ পরীক্ষা করতে পারি।
অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাস লাইব্রেরি (Single Server) রিয়েল ডিস্কে চলছেঃ
অর্ডার সিঙ্ক্রোনস সার্ভার ডিস্ক একটি সংকেত পেয়েছেঃ সিনক্রোনাস সার্ভার (Synchronous Server) আমরা এখনো ডিজাইন করে শেষ করিনি, আমরা একটি সহজ কোড দিয়ে এটি বাস্তবায়ন করেছি, কোন লেনদেন নয়, কেবল সিগন্যাল প্রিন্ট করুনঃ
অর্ডার সিঙ্ক্রোনস ম্যানেজমেন্ট সিস্টেম (Synchronous Server) অস্থায়ী কোডঃ
function main() {
LogReset(1)
while (true) {
var cmd = GetCommand()
if (cmd) {
// cmd: ETH_USDT,swap,buy,1
Log("cmd: ", cmd)
}
Sleep(1000)
}
}
আপনি দেখতে পাচ্ছেন যে সিঙ্ক অ্যাকাউন্টের মালিকদের ডিস্কটি এই বার্তাটি পেয়েছেঃETH_USDT,swap,buy,1
◄
এই পদ্ধতিতে, আপনি পরবর্তী ধাপে আপনার নিজস্ব স্বয়ংক্রিয় অ্যাকাউন্ট তৈরি করতে পারেন, যা তথ্যের মধ্যে থাকা লেনদেনের জোড়া, চুক্তি কোড, লেনদেনের দিকনির্দেশনা এবং পরিমাণের উপর নির্ভর করে।
বর্তমানে订单同步管理系统(Synchronous Server)
এটি কেবলমাত্র একটি অস্থায়ী কোড, আমরা পরবর্তী সংখ্যায় এর নকশা নিয়ে আলোচনা করব।
মিংসি১০০৫অ্যাকাউন্ট বাস্তবায়নের জন্য, দুটি ডিস্ক প্রয়োজন, একটি ক্লাস লাইব্রেরি ডিস্ক এবং একটি অর্ডার ম্যানেজমেন্ট সিস্টেম ডিস্ক।
মিংসি১০০৫টিউটোরিয়াল অনুযায়ী করা হয়েছে, কনফিগারেশন ত্রুটি দেখাচ্ছে
আলিকোন প্যারামিটারগুলি বিপরীত তালিকায় পরিবর্তন করতে হবে
আলিআপনি যদি নিজের জন্য দুটি ডিস্ক খুলতে চান, একটি সিগন্যাল প্রেরণকারী এবং একটি রিসিভিং সিগন্যাল, তাহলে কি এই দুটি ডিস্ক একসাথে ব্যবহার করা যাবে?
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নআপনি হয়তো নিবন্ধটি বুঝতে পারেননি, এই ক্লাস লাইব্রেরিটি এমন একটি সরঞ্জাম যা সরাসরি ব্যানার নীতির লাইনে এম্বেড করা যেতে পারে, এবং তারপরে এই নীতিটি ব্যানার ফাংশন রয়েছে, এটি একটি সেট আপ অ্যাকাউন্টে বার্তা প্রেরণ করবে, এবং একটি বট বার্তাটি গ্রহণ করবে। এই দৃশ্যটি সহজভাবে বলা যায়।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নআপনি নিবন্ধটি দেখতে পারেন, কনফিগারেশন তথ্যঃ ট্যাগ, বাস্তব ডিস্ক আইডি, অ্যাক্সেস কী, গোপন কী । এই ত্রুটিটি রিপোর্ট করা উচিত যে আপনার তথ্যটি ভুলভাবে কনফিগার করা হয়েছে, আপনি আবার পরীক্ষা করুন । ইংরেজি কমা ব্যবধান ব্যবহার করার জন্য সতর্কতা অবলম্বন করুন ।
মিংসি১০০৫ভুল configs error!, অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাসরি ((Single Server) এ, ব্যান্ডউইন্ডার ডিস্ক এবং 2 টি KEY উভয়ই পূরণ করা হয়, এবং তারপরে ডিস্কটিতে অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাসরি ((Single Server) এর উল্লেখ করা হয়, ত্রুটি, ত্রুটি configs error!
মিংসি১০০৫ভুল কনফিগ ত্রুটি!
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নআপনি কি ভুল তথ্য দেখছেন?
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নআমি মনে করি, আমাদের কৌশল পরিবর্তন করতে হবে।
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নআপনি আপনার প্রয়োজন অনুসারে এটি পরিবর্তন করতে পারেন, এবং এটি সম্ভব।