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

مصنف:چھوٹا سا خواب, تخلیق: 2022-02-16 12:11:36, تازہ کاری: 2023-09-15 20:46:46

img

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

آرڈر سنکرونس مینجمنٹ سسٹم (Synchronous Server)

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

اس طرح کے ڈیزائن کے بارے میں چند سوالات پر غور کریں:

  • 1، اگر آپ عارضی طور پر ہم آہنگی نہیں کرنا چاہتے ہیں تو ، کیا آپ روک سکتے ہیں؟ ایک بار روکنے کے بعد ، توسیع API سے شروع کرنے اور پاس ورڈ کی توثیق کرنے پر پابندی عائد ہے۔ اس فنکشن کو لاگو کرنے کے لئے ، دو عالمی متغیرات شامل کیے گئے ہیں:

    var isStopFollow = false   // 用于标记当前是否跟单
    var reStartPwd = null      // 用于记录重启密码
    

    img

    اس کے بعد پالیسی ایڈیٹنگ کے صفحے پر ایک انٹرایکٹو کنٹرول شامل کیا جاتا ہے جس میں پالیسی کو روکنے / دوبارہ شروع کرنے کے لئے استعمال کیا جاتا ہے ((یہ واقعی ڈسک کو روکنے کے لئے نہیں ہے، صرف منطقی روکنے کے لئے ہے، کوئی فہرست نہیں ہے، کچھ بھی نہیں ہے) ؛ روکنے کے وقت ایک روکنے کا پاس ورڈ مقرر کیا جا سکتا ہے، لہذا یہاں تک کہ اگر آپ کے پاس توسیع 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، آپ فہرست کی کم از کم مقدار کی وضاحت کر سکتے ہیں یا آپ کو کئی گنا بڑھا سکتے ہیں پالیسی میں پیرامیٹرز شامل کریں:

    img

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

        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)اس کے علاوہ، اس کے پاس ایک غیر معمولی کوڈ ہے:

img

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

ٹیسٹ

اس بار بینڈ اکاؤنٹ میں بائننس ڈسک ٹیسٹ کا استعمال کیا گیا ہے ، اور بینڈ اکاؤنٹ میں OKEX اکاؤنٹ کا استعمال کیا گیا ہے۔ بینڈ اب بھی ٹیسٹ افعال کا استعمال کرتا ہے جو ہم نے پچھلے مضمون میں استعمال کیا تھا۔订单同步管理系统类库(Single Server)ٹیمپلیٹ میںmainفنکشن) ◄

img

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

img

订单同步管理系统类库(Single Server)اس کے بعد ، ہم نے اس کے بارے میں مزید معلومات حاصل کیں۔

img

اس کے بعد ، ہم نے ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر ایک بار پھر.

img

اس کے بعد ، اس نے ایک اور آرڈر جاری کیا ، جس میں کہا گیا تھا:

img

اس کے بعد ہم نے اس کی جانچ پڑتال کی اور اس کی جانچ پڑتال کی، اس کے بعد ہم نے اس کی جانچ پڑتال کی.

img

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

img

اس کے علاوہ ، یہ بھی ایک بار جب آپ نے اپنے کمپیوٹر پر ڈرائیو شروع کی ہے تو ، آپ کو ایک بار پھر اس کا استعمال کرنے کی ضرورت ہے۔

img

اسٹریٹجک ایڈریس:آرڈر سنک مینجمنٹ سسٹم کلاس لائبریری (Single Server) آرڈر سنکرونس مینجمنٹ سسٹم (Synchronous Server)

حکمت عملی ڈیزائن صرف تبادلہ سیکھنے کے لئے ہے، اصل پیداوار کو اپنے آپ کو تبدیل کرنے، ایڈجسٹ کرنے، بہتر بنانے کی ضرورت ہے.


متعلقہ

مزید