
آئیے پچھلے مضمون کے ساتھ جاری رکھیں:FMZ مقدار کی بنیاد پر آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن (1)ماہرین کے ساتھ بات چیت کے بعد، ہم نے مطابقت پذیر کاپی ٹریڈنگ کے لیے حکمت عملی تیار کرنا شروع کی۔
ان ڈیزائن کے مسائل پر غور کریں:
var isStopFollow = false // 用于标记当前是否跟单
var reStartPwd = null // 用于记录重启密码

پھر حکمت عملی کو روکنے/دوبارہ شروع کرنے کے لیے حکمت عملی میں ترمیم کرنے والے صفحہ پر انٹرایکٹو کنٹرولز شامل کریں (یہ حقیقی تجارت کو نہیں روکتا، بلکہ صرف منطق کو روکتا ہے، آرڈرز کی پیروی روک دیتا ہے، اور کچھ نہیں کرتا)۔ موقوف کرتے وقت، آپ توقف کا پاس ورڈ سیٹ کر سکتے ہیں تاکہ آپ کے پاس توسیع شدہ API KEY بھی ہو۔订单同步管理系统类库(Single Server)یہاں تک کہ ایک حقیقی اکاؤنٹ بھی آپ کی حکمت عملی کو بیدار نہیں کر سکتا۔ کاپی ٹریڈنگ کو دوبارہ شروع کرتے وقت، کاپی ٹریڈنگ فنکشن کو بیدار کرنے کے لیے پہلے سے سیٹ پاس ورڈ درج کریں۔
متعلقہ افعال کا نفاذ کوڈ:
...
// 判断交互指令
if (arr.length == 2) {
// 带控件的按钮
if (arr[0] == "stop/restart") {
// 暂停/重启跟单
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("已经重启跟单,", "清空重启密码。", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("重启密码错误!")
}
}
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) {
// 切换交易对,设置合约
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) .. انتظار کرو.
پچھلا订单同步管理系统(Synchronous Server)عارضی کوڈ یہ ہے:

ابھی دوبارہ ڈیزائن کرنا شروع کریں۔订单同步管理系统(Synchronous Server):
// 全局变量
var isStopFollow = false
var reStartPwd = null
function trade(action) {
// 切换交易对,设置合约
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 = {}
// 解析cmd ,例如: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() {
// 清除所有日志
LogReset(1)
if (isSimulateOKEX) {
exchange.IO("simulate", true)
Log("切换到OKEX模拟盘!")
}
// 设置精度
exchange.SetPrecision(pricePrecision, amountPrecision)
// 检查缩放、指定不能同时设置
if (specifiedAmount != -1 && zoomAmountRatio != -1) {
throw "不能同时指定同步量和缩放量"
}
while (true) {
var cmd = GetCommand()
if (cmd) {
Log("cmd: ", cmd)
var arr = cmd.split(":")
// 判断交互指令
if (arr.length == 2) {
// 带控件的按钮
if (arr[0] == "stop/restart") {
// 暂停/重启跟单
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("已经重启跟单,", "清空重启密码。", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("重启密码错误!")
}
}
continue
}
// 允许跟单
if (!isStopFollow) {
// 解析跟单信号交互指令
var objAction = parseCmd(cmd)
if (objAction) {
// 解析正确
var ret = trade(objAction)
} else {
Log("错误的信号指令 cmd:", cmd)
}
}
}
// 显示跟单情况
LogStatus(_D(), isStopFollow ? "停止同步" : "保持同步", "\n")
Sleep(1000)
}
}
اس بار، آرڈرز والا اکاؤنٹ جانچ کے لیے Binance اصلی اکاؤنٹ استعمال کرے گا، اور آرڈرز کاپی کرنے کے لیے اصلی اکاؤنٹ OKEX اکاؤنٹ استعمال کرے گا۔ ہم اب بھی پچھلے مضمون میں استعمال شدہ ٹیسٹ فنکشن استعمال کرتے ہیں (订单同步管理系统类库(Single Server)ٹیمپلیٹ میںmainفنکشن)۔

ہم نے صرف لین دین کی سمت کو مختصر فروخت اور لین دین کے حجم کو 0.003 میں تبدیل کیا ہے (بائنانس USDT پر مبنی معاہدے اعشاریہ میں آرڈر دے سکتے ہیں)۔ تاہم، OKEX اکاؤنٹ لازمی طور پر ایک عدد ہونا چاہیے (OKEX کے تبادلے کے آرڈر پورے نمبروں میں رکھے جائیں)، اس لیے میں حکمت عملی کے پیرامیٹرز بتاتا ہوںspecifiedAmount1 ہے.

订单同步管理系统类库(Single Server)ٹیسٹ فنکشن ایک حقیقی لین دین کو متحرک کرتا ہے۔

آرڈرز کاپی کرنے کی اصل وقتی حکمت عملی سگنل وصول کرتی ہے اور کاپی کرنے کی کارروائی کو انجام دیتی ہے:

ایکسچینج نے اسی آرڈر کو کھولا۔

اگلا، آئیے پوزیشن کو بند کرنے کی جانچ کریں اور 0.003 کنٹریکٹس کی مختصر پوزیشن کو بند کرنے کے لیے ٹیسٹ مین فنکشن میں آرڈر کی سمت تبدیل کریں۔

پھر دوبارہ آرڈر لینے کے لیے ذمہ دار اصلی ڈسک چلائیں (订单同步管理系统类库(Single Server))。

اصل آرڈر کو کاپی کرکے بھی یہی آپریشن شروع کیا جاتا ہے:

پالیسی کا پتہ: آرڈر سنکرونائزیشن مینجمنٹ سسٹم کلاس لائبریری (سنگل سرور) ہم وقت ساز سرور کو آرڈر کریں۔
حکمت عملی کا ڈیزائن صرف مواصلات اور سیکھنے کے لیے ہے، براہِ کرم اصل پیداواری ضروریات کے مطابق اس میں ترمیم، ایڈجسٹ اور اصلاح کریں۔