4
ফোকাস
1271
অনুসারী

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

তৈরি: 2022-02-16 12:11:36, আপডেট করা হয়েছে: 2023-09-15 20:46:46
comments   0
hits   1431

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

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

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

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

এই নকশা সমস্যা বিবেচনা করুন:

  • 1. আপনি যদি সময়ের জন্য সিঙ্ক্রোনাসভাবে আদেশগুলি অনুসরণ করতে না চান তবে আপনি কি এটিকে বিরতি দিতে পারেন? পাসওয়ার্ড প্রমাণীকরণ ব্যবহার করে একবার সাসপেন্ড হয়ে গেলে এক্সটেনশন API থেকে লঞ্চ করা অক্ষম করে। এই ফাংশনটি বাস্তবায়ন করতে, 2টি গ্লোবাল ভেরিয়েবল যোগ করুন:
  var isStopFollow = false   // 用于标记当前是否跟单
  var reStartPwd = null      // 用于记录重启密码

এফএমজেড কোয়ান্টিফিকেশন (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. আপনি ফলো-আপ অর্ডারের অর্ডারের পরিমাণ নির্দিষ্ট করতে পারেন অথবা আপনি এটিকে বহুগুণে স্কেল করতে পারেন। কৌশলে পরামিতি যোগ করুন:

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

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)অস্থায়ী কোড এই মত:

এফএমজেড কোয়ান্টিফিকেশন (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ফাংশন)।

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

এটা ঠিক যে আমরা ট্রেডিং ডিরেকশনকে সংক্ষিপ্ত এবং ট্রেডিং ভলিউম 0.003 এ পরিবর্তন করেছি (বিনান্স ইউএসডিটি-মার্জিনড চুক্তি দশমিক লটে অর্ডার করা যেতে পারে)। কিন্তু OKEX অ্যাকাউন্টের অর্ডার অবশ্যই একটি পূর্ণসংখ্যা হতে হবে (OKEX এক্সচেঞ্জ অর্ডারটি অবশ্যই একটি পূর্ণসংখ্যা হতে হবে), তাই আমি প্যারামিটারগুলির জন্য কৌশল পরামিতিগুলি নির্দিষ্ট করি৷specifiedAmountহল 1।

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

订单同步管理系统类库(Single Server)পরীক্ষা ফাংশন বাস্তব লেনদেন ট্রিগার.

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

আসল অফার কৌশল যা অর্ডার অনুসরণ করে সে সংকেত পায় এবং নিম্নলিখিত ক্রিয়া সম্পাদন করে:

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

এক্সচেঞ্জ সংশ্লিষ্ট আদেশ খোলা.

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

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

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

তারপরে আবার অর্ডার আনার জন্য দায়ী আসল অফার চালান (订单同步管理系统类库(Single Server))。

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

বাস্তব অফার অনুসরণ করে একই অপারেশন ট্রিগার করা হয়:

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

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

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