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

লেখক:নিনাবাদাস, সৃষ্টিঃ ২০২২-০৪-০৬ ১৭ঃ১২, আপডেটঃ ২০২২-০৪-০৬ ১৭ঃ২০,০৮

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

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

আসুন আগের নিবন্ধে আলোচনা চালিয়ে যাই:FMZ ভিত্তিক অর্ডার সিঙ্ক্রোন ম্যানেজমেন্ট সিস্টেম ডিজাইন (1), একটি সিঙ্ক্রোন অর্ডার তত্ত্বাবধান কৌশল ডিজাইন করতে। অনুগ্রহ করে নিম্নলিখিত নকশা প্রশ্ন বিবেচনা করুনঃ

  • ১.আপনি যদি কিছু সময়ের জন্য আদেশগুলি সিঙ্ক্রোনাইজ করে তদারকি করতে না চান তবে এটি বন্ধ করা যেতে পারে? একবার এটি বন্ধ হয়ে গেলে, বর্ধিত এপিআই থেকে পুনরায় চালু করা অক্ষম করুন এবং পাসওয়ার্ড যাচাইকরণ ব্যবহার করুন। এই ফাংশনটি বাস্তবায়নের জন্য, দুটি গ্লোবাল ভেরিয়েবল যোগ করুনঃ
    var isStopFollow = false   // used to mark whether to currently supervise orders or not 
    var reStartPwd = null      // used to record the restart password 
    

img

তারপর কৌশল সম্পাদনা পৃষ্ঠায় ইন্টারেক্টিভ কন্ট্রোল যোগ করুন কৌশলটি বন্ধ / পুনরায় চালু করতে (এটি বট বন্ধ করতে নয়, কেবল লজিক বন্ধ করুন, আদেশ অনুসরণ এবং তত্ত্বাবধান করবেন না, কিছু না করেই) । এটি বন্ধ করার সময়, আপনি একটি স্টপ পাসওয়ার্ড সেট করতে পারেন, যাতে কোনও বট না থাকলেওOrder Synchronous Management System Library (Single Server)আপনার বর্ধিত এপিআই কী, এটি আপনার কৌশল কল করতে সক্ষম হবে না. আদেশ তত্ত্বাবধান পুনরায় আরম্ভ করার সময়, অর্ডার তত্ত্বাবধান ফাংশন কল করার জন্য পূর্বনির্ধারিত পাসওয়ার্ড লিখুন. সংশ্লিষ্ট ফাংশনের বাস্তবায়ন কোডঃ

...
          // Judge the interactive command
          if (arr.length == 2) {
          	// Buttons with controls
          	if (arr[0] == "stop/restart") {
          		// Stop/restart to supervise orders 
          		if (!isStopFollow) {
          		    isStopFollow = true
          		    reStartPwd = arr[1]
          		    Log("stopped to supervise orders,", "the set restart password is:", reStartPwd, "#FF0000")
          		} else if (isStopFollow && arr[1] == reStartPwd) {
          			isStopFollow = false 
          			reStartPwd = null 
          			Log("restarted to supervise orders,", "clear the restart password.", "#FF0000")
          		} else if (isStopFollow && arr[1] != reStartPwd) {
          			Log("Wrong restart password!")
          		}
          	}
          	continue 
          }
  • ২.পর্যবেক্ষণকৃত অর্ডারের অর্ডার পরিমাণ নির্দিষ্ট করা যেতে পারে অথবা অনুপাতের মাধ্যমে এটিকে জুম করা যেতে পারেঃ

    img

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

        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) {
          // Switch the trading pair, and set contract 
          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

এখন, আসুন ডিজাইন করিOrder Synchronous Management System (Synchronous Server)আবারও বলছি:

// Global variables
var isStopFollow = false
var reStartPwd = null 

function trade(action) {
    // Switch the trading pair, and set contract
    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 simulated bot!")
    }

    // set precision 
    exchange.SetPrecision(pricePrecision, amountPrecision)

    // Check specifiedAmount and zoomAmountRatio, for they cannot be set at the same time 
    if (specifiedAmount != -1 && zoomAmountRatio != -1) {
    	throw "cannot set specifiedAmount and zoomAmountRatio at the same time"
    }

    while (true) {
        var cmd = GetCommand()
        if (cmd) {
            Log("cmd: ", cmd)
            var arr = cmd.split(":")

            // Judge the interactive command 
            if (arr.length == 2) {
            	// Buttons with controls 
            	if (arr[0] == "stop/restart") {
            		// Stop/restart to supervise orders 
            		if (!isStopFollow) {
            		    isStopFollow = true
            		    reStartPwd = arr[1]
            		    Log("stopped to supervise orders,", "the set restart password is:", reStartPwd, "#FF0000")
            		} else if (isStopFollow && arr[1] == reStartPwd) {
            			isStopFollow = false 
            			reStartPwd = null 
            			Log("restarted to supervise orders,", "Clear the restart password", "#FF0000")
            		} else if (isStopFollow && arr[1] != reStartPwd) {
            			Log("Wrong restart password!")
            		}
            	}
            	continue 
            }
            
            // Allow to supervise orders 
            if (!isStopFollow) {
                // Parse the interactive command of the order supervising signal
                var objAction = parseCmd(cmd)
                if (objAction) {
            	    // Parse correctly 
            	    var ret = trade(objAction)
                } else {
                	Log("Wrong signal cmd:", cmd)
                }
            }
        }
        
        // Display the order supervising status 
        LogStatus(_D(), isStopFollow ? "Stop synchronization" : "Maintain synchronization", "\n")

        Sleep(1000)
    }
}

পরীক্ষা

এই সময়, Binance বাস্তব টিক পরীক্ষা আদেশ সঙ্গে অ্যাকাউন্টের জন্য ব্যবহৃত হয়, এবং OKEX অ্যাকাউন্ট অর্ডার তত্ত্বাবধানে বট জন্য ব্যবহৃত হয়. অর্ডার তত্ত্বাবধানে জন্য, আমরা এখনও পূর্ববর্তী নিবন্ধে ব্যবহৃত পরীক্ষা ফাংশন ব্যবহার (দ্যmainকর্মক্ষমতাOrder Synchronous Management System Library (Single Server)টেমপ্লেট)

img

এটা শুধু আমরা সংক্ষিপ্ত ট্রেডিং দিক পরিবর্তন, এবং ট্রেডিং ভলিউম 0.003 পরিবর্তন করা হয়েছে (Binance USDT- মার্জিনযুক্ত চুক্তি দশমিক স্থাপন করা যেতে পারে). যাইহোক, অর্ডার সঙ্গে OKEX অ্যাকাউন্ট একটি পূর্ণসংখ্যা হতে হবে (OKEX দ্বারা স্থাপন আদেশ একটি পূর্ণসংখ্যা হতে হবে), তাই পরামিতি আমি কৌশল পরামিতি নির্দিষ্টspecifiedAmount১ হিসেবে।

img

টেস্টিং ফাংশন এর বটOrder Synchronous Management System Library (Single Server)বিনিময় শুরু করে।

img

অর্ডার তত্ত্বাবধানে বট কৌশল সংকেত পেয়েছি, এবং তত্ত্বাবধান কর্ম সঞ্চালনঃ

img

প্ল্যাটফর্মটি সংশ্লিষ্ট অর্ডারটি খুলেছে।

img

পরবর্তী, বন্ধ পজিশন পরীক্ষা করুন, এবং শর্ট পজিশন বন্ধ করার জন্য মূল ফাংশনে অর্ডার দিক পরিবর্তন করুন, 0.003.

img

তারপর বট পুনরায় চালু করুন যা অর্ডার বহন করার জন্য দায়ী (Order Synchronous Management System Library (Single Server)).

img

একই অপারেশনটি অর্ডার সুপারভাইজিং বটেও ট্রিগার করা হয়ঃ

img

কৌশল ঠিকানাঃঅর্ডার সিঙ্ক্রোন ম্যানেজমেন্ট সিস্টেম লাইব্রেরি (একক সার্ভার) অর্ডার সিঙ্ক্রোন ম্যানেজমেন্ট সিস্টেম (সিঙ্ক্রোন সার্ভার)

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


আরো