রিসোর্স লোড হচ্ছে... লোডিং...

এফএমজেড কোয়ান্টের উপর ভিত্তি করে অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেমের নকশা (2)

লেখক:এফএমজেড-লিডিয়া, সৃষ্টিঃ ২০২২-১১-০৮ ১১ঃ৩৪ঃ২০, আপডেটঃ ২০২৩-০৯-১৫ ২০ঃ৪৮ঃ৪৬

img

এফএমজেড কোয়ান্টের উপর ভিত্তি করে অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেমের নকশা (2)

অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম (সিঙ্ক্রোনস সার্ভার)

আসুন আমরা আগের নিবন্ধ থেকে আলোচনা চালিয়ে যাইঃ এফএমজেড কোয়ান্টিফিকেশনের ভিত্তিতে অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেমের নকশা (1) (https://www.fmz.com/digest-topic/9729) এবং সিঙ্ক্রোনাইজড অর্ডার-ফলো-আপের জন্য একটি কৌশল তৈরি করতে শুরু করুন।

ডিজাইনের কয়েকটি বিষয় বিবেচনা করুন:

    1. যদি আপনি সাময়িকভাবে সিঙ্ক্রোনস অর্ডার-ফলো-আপ চালাতে না চান, তাহলে কি এটি বিরতি দেওয়া সম্ভব? একবার স্থগিত হয়ে গেলে, এটি বর্ধিত এপিআই থেকে শুরু করা নিষিদ্ধ, এটি পাসওয়ার্ড দ্বারা প্রমাণীকরণ করা আবশ্যক। ২টি গ্লোবাল ভেরিয়েবল যোগ করে এই ফাংশনটি বাস্তবায়ন করুনঃ
var isStopFollow = false   // Used to mark whether the current order is being followed
var reStartPwd = null      // Used to record the restart password

img

তারপর আমরা কৌশল বিরতি / পুনরায় আরম্ভ করার জন্য কৌশল সম্পাদনা পৃষ্ঠায় ইন্টারেক্টিভ কন্ট্রোল যোগ করুন (রিয়েল বট বন্ধ না, শুধু লজিক্যাল বিরতি, কোন আদেশ অনুসরণ করা) । আমরা বিরতি যখন একটি বিরতি পাসওয়ার্ড সেট করতে পারেন, যাতে এমনকি আপনার বাস্তব বট সঙ্গে প্রসারিত 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 
          }
    1. আপনি অনুসরণ করা আদেশ পরিমাণ নির্দিষ্ট করতে পারেন অথবা মাল্টিপল মধ্যে স্কেল করা যাবে কৌশলটিতে পরামিতি যোগ করুনঃ

img

specifiedAmount: অর্ডার-পরবর্তী সংখ্যা নির্দিষ্ট করুন, ডিফল্ট হল -1, অর্থাৎ নির্দিষ্ট করা হয়নি। zoomAmountRatio: পাঠানো অর্ডারের পরিমাণ অনুযায়ী স্কেলিং, উদাহরণস্বরূপ, যদি পাঠানো সংকেতটি হয়ঃ ETH_USDT,swap,buy,1, zoomAmountRatio দ্বারা অর্ডারের পরিমাণের মান গুণ করুন। ডিফল্ট হল -1, অর্থাৎ কোনও স্কেলিং নেই।

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

এখানে এটি প্রাপ্ত সংকেতে অনুসরণ করা অর্ডারের পরিমাণের জন্য স্কেল বা নির্দিষ্ট মান নির্দিষ্ট করতে বাস্তবায়িত হয়।

    1. কোডটি যতটা সম্ভব সহজ হতে হবে, অর্ডার দেওয়ার জন্য অন্যান্য টেমপ্লেট লাইব্রেরি ব্যবহার করুন।

স্পট অর্ডার দ্বারা ব্যবহৃত ক্লাস লাইব্রেরি স্থাপন করা হয়ঃ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)নিম্নরূপ ছিলঃ

img

এখন আমরা অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম (সিঙ্ক্রোনস সার্ভার) পুনরায় ডিজাইন শুরুঃ

// 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)পূর্ববর্তী নিবন্ধে ব্যবহৃত টেমপ্লেট) ।

img

এখানে আমরা বিক্রয় লেনদেনের দিক পরিবর্তন, এবং লেনদেনের ভলিউম 0.003 (অর্ডার Binance ইউএসডিটি মান চুক্তির জন্য দশমিক সংখ্যা স্থাপন করা যেতে পারে) । কিন্তু অর্ডার-পরবর্তী জন্য OKEX অ্যাকাউন্ট একটি পূর্ণসংখ্যা হতে হবে (OKEX বিনিময় আদেশ একটি পূর্ণসংখ্যা হতে হবে), তাই আমরা নির্দিষ্ট কৌশল পরামিতি নির্দিষ্টAmount হিসাবে 1 উল্লেখ করুন।

img

পরবর্তী, আসুন 0.003 দ্বারা শর্ট পজিশন বন্ধ করার জন্য পরীক্ষা প্রধান ফাংশন অর্ডার দিক পরিবর্তন করে অবস্থান বন্ধ পরীক্ষা।

img

তারপরে আমরা এটি আবার চালাই, যা অর্ডার-লিডিংয়ের জন্য দায়ী (অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাস লাইব্রেরি (একক সার্ভার)) ।

একই অপারেশন একটি আদেশ অনুসরণ বাস্তব বট দ্বারা triggered ছিল.

কৌশলগত ঠিকানা: অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম ক্লাস লাইব্রেরি (একক সার্ভার) (https://www.fmz.com/strategy/345171) অর্ডার সিঙ্ক্রোনাইজেশন ম্যানেজমেন্ট সিস্টেম (সিঙ্ক্রোনস সার্ভার) (https://www.fmz.com/strategy/345172)

কৌশলটি শুধুমাত্র যোগাযোগ এবং শেখার জন্য ডিজাইন করা হয়েছে, দয়া করে প্রকৃত চাহিদা অনুযায়ী সামঞ্জস্য এবং অপ্টিমাইজ করুন।


সম্পর্কিত

আরো