avatar of 发明者量化-小小梦 发明者量化-小小梦
پر توجہ دیں نجی پیغام
4
پر توجہ دیں
1271
پیروکار

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

میں تخلیق کیا: 2022-02-16 12:11:36, تازہ کاری: 2023-09-15 20:46:46
comments   0
hits   1432

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

ہم وقت ساز سرور کو آرڈر کریں۔

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

ان ڈیزائن کے مسائل پر غور کریں:

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

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

پھر حکمت عملی کو روکنے/دوبارہ شروع کرنے کے لیے حکمت عملی میں ترمیم کرنے والے صفحہ پر انٹرایکٹو کنٹرولز شامل کریں (یہ حقیقی تجارت کو نہیں روکتا، بلکہ صرف منطق کو روکتا ہے، آرڈرز کی پیروی روک دیتا ہے، اور کچھ نہیں کرتا)۔ موقوف کرتے وقت، آپ توقف کا پاس ورڈ سیٹ کر سکتے ہیں تاکہ آپ کے پاس توسیع شدہ 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 
            }
  • 2. آپ آرڈر کی مقدار بتا سکتے ہیں یا اسے اوپر یا نیچے کر سکتے ہیں۔ حکمت عملی میں پیرامیٹرز شامل کریں:

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

specifiedAmount: فالو اپ آرڈر کی مقدار بتاتا ہے ڈیفالٹ ویلیو -1 ہے، جس کا مطلب ہے کہ یہ متعین نہیں ہے۔ zoomAmountRatio : بھیجے گئے سگنل میں آرڈر کی رقم کے مطابق زوم کریں، مثال کے طور پر، بھیجا گیا سگنل ہے:ETH_USDT,swap,buy,1آرڈر کی مقدار کو zoomAmountRatio سے ضرب دیں۔ پہلے سے طے شدہ -1 ہے، جس کا مطلب ہے کوئی پیمانہ نہیں۔

      var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
      amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio

یہاں ہم آرڈر کی مقدار کو نافذ کرتے ہیں جسے موصول ہونے والے سگنل میں پیروی کرنے کی ضرورت ہے۔زومیامخصوص اقدار کی وضاحت کریں۔

  • 3. کوڈ کو ہر ممکن حد تک مختصر رکھیں اور آرڈر پروسیسنگ کے لیے دیگر ٹیمپلیٹ لائبریریوں کا استعمال کریں۔

کلاس لائبریری کا استعمال کرتے ہوئے اسپاٹ آرڈر: 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)عارضی کوڈ یہ ہے:

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

ابھی دوبارہ ڈیزائن کرنا شروع کریں۔订单同步管理系统(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فنکشن)۔

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

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

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

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

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

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

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

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

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

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

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

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

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

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

FMZ کوانٹیفیکیشن (2) پر مبنی آرڈر سنکرونائزیشن مینجمنٹ سسٹم کا ڈیزائن

پالیسی کا پتہ: آرڈر سنکرونائزیشن مینجمنٹ سسٹم کلاس لائبریری (سنگل سرور) ہم وقت ساز سرور کو آرڈر کریں۔

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