4
ध्यान केंद्रित करना
1271
समर्थक

संतुलित क्रम रणनीति (शिक्षण रणनीति)

में बनाया: 2020-09-02 17:05:25, को अपडेट: 2024-12-10 10:09:34
comments   0
hits   2443

संतुलित क्रम रणनीति (शिक्षण रणनीति)

संतुलित क्रम रणनीति (शिक्षण रणनीति)

इस लेख में वर्णित रणनीति अनिवार्य रूप से एक गतिशील संतुलन रणनीति है, जिसमें सिक्के के मूल्य को हमेशा निपटान मुद्रा के मूल्य के बराबर संतुलित करना होता है। हालाँकि, इसे प्री-ऑर्डर के रूप में डिज़ाइन किया गया है और रणनीति तर्क बहुत सरल है। इस रणनीति को लिखने का मुख्य उद्देश्य रणनीति डिजाइन के विभिन्न पहलुओं को प्रदर्शित करना है।

  • नीति तर्क समाविष्टीकरण रणनीति तर्क और कुछ रनटाइम डेटा और टैग चर को एक साथ समाहित करें (ऑब्जेक्ट में समाहित करें)।

  • रणनीति आरंभीकरण कोड को संभालती है प्रारंभिक रन के दौरान, लाभ की गणना के लिए प्रारंभिक खाता जानकारी दर्ज की जाती है। प्रारंभ में, डेटा को पुनर्स्थापित करना है या नहीं, यह मापदंडों के आधार पर निर्धारित किया जाता है।

  • नीति इंटरैक्शन प्रसंस्करण के लिए कोड एक सरल विराम और जारी बातचीत प्रक्रिया तैयार की गई है।

  • रणनीति रिटर्न की गणना के लिए कोड मुद्रा मानक विधि का उपयोग करके लाभ की गणना करें।

  • रणनीति में प्रमुख डेटा को बनाए रखने की प्रणाली डेटा पुनर्प्राप्त करने के लिए एक तंत्र डिज़ाइन करें

  • नीति प्रसंस्करण जानकारी प्रदर्शित करने के लिए कोड स्थिति पट्टी डेटा प्रदर्शन.

रणनीति कोड

var Shannon = {
    // member
    e : exchanges[0],
    arrPlanOrders : [],
    distance : BalanceDistance,
    account : null,
    ticker : null, 
    initAccount : null,
    isAskPending : false,
    isBidPending : false,

    // function 
    CancelAllOrders : function (e) {
        while(true) {
            var orders = _C(e.GetOrders)
            if(orders.length == 0) {
                return 
            }
            Sleep(500)
            for(var i = 0; i < orders.length; i++) {
                e.CancelOrder(orders[i].Id, orders[i])
                Sleep(500)
            }
        }
    },

    Balance : function () {
        if (this.arrPlanOrders.length == 0) {
            this.CancelAllOrders(this.e)
            var acc = _C(this.e.GetAccount)
            this.account = acc
            var askPendingPrice = (this.distance + acc.Balance) / acc.Stocks
            var bidPendingPrice = (acc.Balance - this.distance) / acc.Stocks
            var askPendingAmount = this.distance / 2 / askPendingPrice
            var bidPendingAmount = this.distance / 2 / bidPendingPrice

            this.arrPlanOrders.push({tradeType : "ask", price : askPendingPrice, amount : askPendingAmount}) 
            this.arrPlanOrders.push({tradeType : "bid", price : bidPendingPrice, amount : bidPendingAmount})
        } else if(this.isAskPending == false && this.isBidPending == false) {
            for(var i = 0; i < this.arrPlanOrders.length; i++) {
                var tradeFun = this.arrPlanOrders[i].tradeType == "ask" ? this.e.Sell : this.e.Buy
                var id = tradeFun(this.arrPlanOrders[i].price, this.arrPlanOrders[i].amount)
                if(id) {
                    this.isAskPending = this.arrPlanOrders[i].tradeType == "ask" ? true : this.isAskPending
                    this.isBidPending = this.arrPlanOrders[i].tradeType == "bid" ? true : this.isBidPending
                } else {
                    Log("挂单失败,清理!")
                    this.CancelAllOrders(this.e)
                    return 
                }
            }
        }

        if(this.isBidPending || this.isAskPending) {
            var orders = _C(this.e.GetOrders)
            Sleep(1000)
            var ticker = _C(this.e.GetTicker)
            this.ticker = ticker
            if(this.isAskPending) {
                var isFoundAsk = false 
                for (var i = 0; i < orders.length; i++) {
                    if(orders[i].Type == ORDER_TYPE_SELL) {
                        isFoundAsk = true
                    }
                }
                if(!isFoundAsk) {
                    Log("卖单成交,撤销订单,重置")
                    this.CancelAllOrders(this.e)
                    this.arrPlanOrders = []
                    this.isAskPending = false 
                    this.isBidPending = false 
                    LogProfit(this.CalcProfit(ticker))
                    return 
                }
            }
            if(this.isBidPending) {
                var isFoundBid = false 
                for(var i = 0; i < orders.length; i++) {
                    if(orders[i].Type == ORDER_TYPE_BUY) {
                        isFoundBid = true
                    }
                }
                if(!isFoundBid) {
                    Log("买单成交,撤销订单,重置")
                    this.CancelAllOrders(this.e)
                    this.arrPlanOrders = []
                    this.isAskPending = false 
                    this.isBidPending = false 
                    LogProfit(this.CalcProfit(ticker))
                    return 
                }
            }        
        }
    }, 
    ShowTab : function() {
        var tblPlanOrders = {
            type : "table", 
            title : "计划挂单", 
            cols : ["方向", "价格", "数量"], 
            rows : []
        }
        for(var i = 0; i < this.arrPlanOrders.length; i++) {
            tblPlanOrders.rows.push([this.arrPlanOrders[i].tradeType, this.arrPlanOrders[i].price, this.arrPlanOrders[i].amount])
        }

        var tblAcc = {
            type : "table", 
            title : "账户信息", 
            cols : ["type", "Stocks", "FrozenStocks", "Balance", "FrozenBalance"], 
            rows : []            
        }
        tblAcc.rows.push(["初始", this.initAccount.Stocks, this.initAccount.FrozenStocks, this.initAccount.Balance, this.initAccount.FrozenBalance])
        tblAcc.rows.push(["当前", this.account.Stocks, this.account.FrozenStocks, this.account.Balance, this.account.FrozenBalance])
        
        return "时间:" + _D() + "\n `" + JSON.stringify([tblPlanOrders, tblAcc]) + "`" + "\n" + "ticker:" + JSON.stringify(this.ticker)
    },
    CalcProfit : function(ticker) {
        var acc = _C(this.e.GetAccount)
        this.account = acc
        return (this.account.Balance - this.initAccount.Balance) + (this.account.Stocks - this.initAccount.Stocks) * ticker.Last
    },
    Init : function() {
        this.initAccount = _C(this.e.GetAccount)
        if(IsReset) {
            var acc = _G("account")
            if(acc) {
                this.initAccount = acc 
            } else {
                Log("恢复初始账户信息失败!以初始状态运行!")
                _G("account", this.initAccount)
            }
        } else {
            _G("account", this.initAccount)
            LogReset(1)
            LogProfitReset()
        }
    },
    Exit : function() {
        Log("停止前,取消所有挂单...")
        this.CancelAllOrders(this.e)
    }
}

function main() {
    // 初始化
    Shannon.Init()

    // 主循环
    while(true) {
        Shannon.Balance()        
        LogStatus(Shannon.ShowTab())
        // 交互
        var cmd = GetCommand()
        if(cmd) {
            if(cmd == "stop") {
                while(true) {
                    LogStatus("暂停", Shannon.ShowTab())
                    cmd = GetCommand()
                    if(cmd) {
                        if(cmd == "continue") {
                            break
                        }
                    }
                    Sleep(1000)
                }
            }
        }
        Sleep(5000)
    }
}

function onexit() {
    Shannon.Exit()
}

बैकटेस्ट रन

संतुलित क्रम रणनीति (शिक्षण रणनीति)

संतुलित क्रम रणनीति (शिक्षण रणनीति)

संतुलित क्रम रणनीति (शिक्षण रणनीति)

एक्सटेंशन अनुकूलित करें

  • एक वर्चुअल ऑर्डर मैकेनिज्म जोड़ा जा सकता है। कुछ एक्सचेंजों में ऑर्डर की सीमा होती है, इसलिए हो सकता है कि ऑर्डर वास्तव में न दिया जाए। आपको वास्तविक ऑर्डर देने से पहले कीमत के करीब आने का इंतज़ार करना होगा।
  • वायदा कारोबार में शामिल हों
  • कई किस्मों और कई एक्सचेंजों तक विस्तारित

यह रणनीति केवल शिक्षण उद्देश्यों के लिए प्रयोग की जाती है और वास्तविक व्यापार में इसका प्रयोग सावधानी के साथ किया जाना चाहिए। रणनीति पता: https://www.fmz.com/strategy/225746