संसाधन लोड हो रहा है... लोड करना...

बिनान स्थायी बहु मुद्रा प्रतिभूति रणनीति (बैंक या बहु सिक्का सूचकांक) 10 अप्रैल को सुधार बग, अद्यतन की आवश्यकता है

लेखक:घास, दिनांकः 2020-04-03 11:12:31
टैगःबाइनेंस

महत्वपूर्ण सामग्री!

  • इस अध्ययन को जरूर देखें।https://www.fmz.com/digest-topic/5294♦ रणनीतिक सिद्धांतों, जोखिमों, ट्रेडिंग के लिए कैसे छानें, पैरामीटर कैसे सेट करें, शुरुआती स्थिति और कुल पूंजी का अनुपात आदि के बारे में जानें।
  • पिछले शोध रिपोर्ट को डाउनलोड करने और अपने स्वयं के शोध वातावरण में अपलोड करने की आवश्यकता है। वास्तविक संशोधन फिर से चल रहा है। यदि आपने इस रिपोर्ट को देखा है, तो हाल ही में नवीनतम सप्ताह के आंकड़ों को अपडेट किया गया है।
  • रणनीति को सीधे रीटेस्ट नहीं किया जा सकता है, इसे रिसर्च में रीटेस्ट किया जाना चाहिए।
  • रणनीति कोड और डिफ़ॉल्ट पैरामीटर केवल अनुसंधान के लिए हैं, और वास्तविक ड्राइव को चलाने के लिए सावधानी बरतने की आवश्यकता है।जोखिम उठाना
  • रणनीति हर दिन लाभदायक नहीं हो सकती है, आप इतिहास को देख सकते हैं, 1-2 सप्ताह के पार और पीछे हटने के लिए सामान्य हैं, और एक बड़ा पलटाव हो सकता है, जिसे सही तरीके से संभालने की आवश्यकता है।
  • कोड खुला है, आप इसे स्वयं बदल सकते हैं, यदि कोई समस्या है, तो टिप्पणी और प्रतिक्रिया का स्वागत है, बेहतर है कि आप आविष्कारक विनान पर जाएं (शोध रिपोर्ट में शामिल होने का तरीका है) और अपडेट के बारे में सूचित रहें।
  • रणनीति को पूर्ण स्टॉक मोड में चलाने की आवश्यकता होती है, दो तरफा स्टॉक सेट न करें, रणनीति केवल बिआन वायदा का समर्थन करती है, रोबोट को बनाने के लिए डिफ़ॉल्ट ट्रेडिंग जोड़े और के लाइन चक्र के साथ, रणनीति के लाइन के लिए उपयोग नहीं की जाती है
  • रणनीति और अन्य रणनीतियों के साथ-साथ मैनुअल ऑपरेशन में संघर्ष है, और ध्यान देने की आवश्यकता है।
  • वास्तविक ड्राइव को चलाने के लिए विदेशी होस्ट की आवश्यकता होती है, परीक्षण चरण में प्लेटफॉर्म पर एक क्लिक पर अली क्लाउड हांगकांग सर्वर किराए पर लिया जा सकता है, अपने महीने के पूरे किराए पर सस्ता ((कम से कम कॉन्फ़िगरेशन के लिए, ट्यूटोरियल को तैनात करेंःhttps://www.fmz.com/bbs-topic/2848 )
  • बिनान के वायदा और नकदी को अलग से जोड़ने की आवश्यकता होती है, बिनान वायदाFutures_Binance

रणनीतिक सिद्धांत

यह रणनीति एक बास्केट के रूप में एक बेड़े के सिक्के के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बिटकॉइन के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एक बेड़े के रूप में एकमौलिक रूप से नकली सिक्का-बिटकॉइन मूल्य सूचकांकपिछले दो महीनों का प्रदर्शन (लगभग 3 गुना लेवलिंग, डेटा 4.8 पर अपडेट किया गया है) पिछले एक सप्ताह में, Bitcoin की तुलना में सिक्का ऊपर गया है, इसलिए नुकसान, यदि आप अधिक सिक्का देखते हैं, तो आप पैरामीटर में सेट कर सकते हैंः

डिफ़ॉल्ट रणनीति है कि आप बिटकॉइन के लिए एक डुप्लिकेट करें, आप इसके विपरीत कर सकते हैं (यदि आप मानते हैं कि एक डुप्लिकेट नीचे है) और निर्णय अपने आप में है।

img

रणनीतिक तर्क

1. बाजार और खाता रखरखाव अद्यतन करें 2. प्रत्येक सिक्के के खाली हिस्से के मूल्य को अद्यतन करें, यह निर्धारित करें कि क्या खाली हिस्से को बदलने की आवश्यकता है 3. कुल रिक्त पदों के पदों को अद्यतन करें, बहु पदों को निर्धारित करें, और बहु पदों को समायोजित करने के लिए निर्णय लें 4. आदेश, आदेश की मात्रा आइस पर्वत द्वारा सौंपे गए हैं, जो कि एक ही कीमत पर खरीद और बिक्री के अनुसार हैं।नीचे दिए गए आदेश के तुरंत बाद रद्द कर दिया जाता है ((इसलिए आप कई रद्द करने में विफल हुए एकल 400: {code:-2011,msg:Unknown order sent.}, सामान्य घटना देखेंगे) 5.再次循环

Short_symbols, Long_symbols पर विचार किया जाएगा, जो कि ट्रेड जोड़े में अधिक, अधिक प्रत्येक मुद्रा के लिए ट्रेड मूल्य है, कम प्रत्येक मुद्रा के लिए अनुबंध मूल्य है, जो कि प्रतिभूति मूल्य की आवश्यकता के औसत है।

यदि केवल खाली BTC, अधिक TRX, DASH, ONT, QTUM, और Trade_value 50 है, तो TRX, DASH, ONT, QTUM में 50 से अधिक पद हैं, और BTC में 50 * 4 पद हैं।

यदि केवल बीटीसी, खाली टीआरएक्स, डैश, ओएनटी, क्यूटीयूएम, ट्रेड_वैल्यू 50 है, तो टीआरएक्स, डैश, ओएनटी, क्यूटीयूएम में 50 खाली हैं, और बीटीसी में 50*4 हैं।

स्टेटस बेंच में लीवरेज का मतलब है कि गारंटी राशि का उपयोग अनुपात में किया गया है और यह बहुत अधिक नहीं होना चाहिए।

रणनीति पैरामीटर

img

  • Short_symbols: खाली सिक्के, अंक, अंक के साथ अलग
  • Long_symbols: अधिक मुद्राएं, खाली छोड़ सकते हैं, बिना हेजिंग, सीधे खाली।
  • Trade_value: एक एकल मुद्रा के लिए खाली रखने के लिए मूल्य. यह भी कई धितो है, कुल मूल्य = 2 * Trade_value * खाली मुद्राओं की संख्या. आम तौर पर 3-5 गुना लेवलिंग का उपयोग करें, यानी कुल मूल्य = 3 * खाता संतुलन. अपने कुल निवेश के आधार पर निर्णय लेने की आवश्यकता है।
  • Adjust_value: कॉन्ट्रैक्ट वैल्यू (USDT मूल्य निर्धारण) विचलन को समायोजित करें, बहुत अधिक समायोजन धीमा है, बहुत कम प्रक्रिया शुल्क बहुत अधिक है, ट्रेड_वैल्यू के अनुसार स्वयं निर्णय लें। 20 से कम नहीं हो सकता है, अन्यथा न्यूनतम लेनदेन तक नहीं पहुंच पाएंगे
  • Ice_value: हिमशैल को सौंपा गया मूल्य, जो 20 से कम नहीं हो सकता है, वास्तव में Adjust_value और Ice_value में से छोटा चुनें

रणनीतिक जोखिम

जब खाली सिक्के की कीमत बढ़ जाती है, तो अनुबंध का मूल्य बढ़ जाता है, इस समय कम हो जाता है, इसके विपरीत लाभ बढ़ जाता है। यह कुल अनुबंध मूल्य को स्थिर रखता है। सिक्का स्वतंत्र बाजार से बाहर निकलने की बहुत संभावना है, वर्तमान में एक साल के चक्र से देखते हुए, सिक्का नीचे हो सकता है, और नीचे से उठने की संभावना है। यह निर्भर करता है कि इसका उपयोग कैसे किया जाता है, यदि आप सिक्के को अच्छी तरह से देखते हैं और मानते हैं कि आप नीचे हैं, तो दिशा को संचालित किया जा सकता है और कई संकेतकों को किया जा सकता है। या यदि आप किसी प्रकार के सिक्के (जो कि टोकन से अधिक नहीं है) को देखते हैं, तो आप उनके साथ हेजिंग कर सकते हैं।


if(IsVirtual()){
    throw '不能回测,回测参考 https://www.fmz.com/digest-topic/5294 '
}
if(exchange.GetName() != 'Futures_Binance'){
    throw '只支持币安期货交易所,和现货交易所不同,需要单独添加,名称为Futures_Binance'
}

var short_symbols = Short_symbols.split(',')
var long_symbols = Long_symbols.split(',')

if(short_symbols.length == 1 && short_symbols[0] == ''){
    short_symbols = []
}
if(long_symbols.length == 1 && long_symbols[0] == ''){
    long_symbols = []
}
var symbols = []
for(var i=0; i<short_symbols.length; i++){
    if(short_symbols[i]){
        symbols.push(short_symbols[i])
    }
}
for(var i=0; i<long_symbols.length; i++){
    if(long_symbols[i]){
        symbols.push(long_symbols[i])
    }
}
var update_profit_time = 0
var assets = {}
var trade_info = {}
var exchange_info = HttpQuery('https://fapi.binance.com/fapi/v1/exchangeInfo')
if(!exchange_info){
    throw '无法连接币安网络,需要海外托管者'
}
exchange_info = JSON.parse(exchange_info)
for (var i=0; i<exchange_info.symbols.length; i++){
    if(symbols.indexOf(exchange_info.symbols[i].baseAsset) > -1){
       assets[exchange_info.symbols[i].baseAsset] = {amount:0, hold_price:0, value:0, bid_price:0, ask_price:0, realised_profit:0, margin:0, unrealised_profit:0}
       trade_info[exchange_info.symbols[i].baseAsset] = {minQty:parseFloat(exchange_info.symbols[i].filters[1].minQty),
                                                         priceSize:parseInt((Math.log10(1.1/parseFloat(exchange_info.symbols[i].filters[0].tickSize)))),
                                                         amountSize:parseInt((Math.log10(1.1/parseFloat(exchange_info.symbols[i].filters[1].stepSize))))
                                                        }
    }
}
assets.USDT = {unrealised_profit:0, margin:0, margin_balance:0, total_balance:0, leverage:0}


function updateAccount(){
    var account = exchange.GetAccount()
    var pos = exchange.GetPosition()
    if (account == null || pos == null ){
        Log('update account time out')
        return
    }
    assets.USDT.update_time = Date.now()
    for(var i=0; i<symbols.length; i++){
        assets[symbols[i]].margin = 0
        assets[symbols[i]].unrealised_profit = 0
        assets[symbols[i]].hold_price = 0
        assets[symbols[i]].amount = 0
        assets[symbols[i]].unrealised_profit = 0
    }
    for(var j=0; j<account.Info.positions.length; j++){
        if(account.Info.positions[j].positionSide == 'BOTH'){
            var pair = account.Info.positions[j].symbol 
            var coin = pair.slice(0,pair.length-4)
            if(symbols.indexOf(coin) < 0){continue}
            assets[coin].margin = parseFloat(account.Info.positions[j].initialMargin) + parseFloat(account.Info.positions[j].maintMargin)
            assets[coin].unrealised_profit = parseFloat(account.Info.positions[j].unrealizedProfit)
        }
    }
    assets.USDT.margin = _N(parseFloat(account.Info.totalInitialMargin) + parseFloat(account.Info.totalMaintMargin),2)
    assets.USDT.margin_balance = _N(parseFloat(account.Info.totalMarginBalance),2)
    assets.USDT.total_balance = _N(parseFloat(account.Info.totalWalletBalance),2)
    assets.USDT.unrealised_profit = _N(parseFloat(account.Info.totalUnrealizedProfit),2)
    assets.USDT.leverage = _N(assets.USDT.margin/assets.USDT.total_balance,2)
    pos = JSON.parse(exchange.GetRawJSON())
    if(pos.length > 0){
        for(var k=0; k<pos.length; k++){
            var pair = pos[k].symbol
            var coin = pair.slice(0,pair.length-4)
            if(symbols.indexOf(coin) < 0){continue}
            assets[coin].hold_price = parseFloat(pos[k].entryPrice)
            assets[coin].amount = parseFloat(pos[k].positionAmt)
            assets[coin].unrealised_profit = parseFloat(pos[k].unRealizedProfit)
        }
    }
}

function updateTick(){
    var ticker = HttpQuery('https://fapi.binance.com/fapi/v1/ticker/bookTicker')
    if(ticker == null){
        Log('get ticker time out')
        return
    }
    ticker = JSON.parse(ticker)
    for(var i=0; i<ticker.length; i++){
        var pair = ticker[i].symbol 
        var coin = pair.slice(0,pair.length-4)
        if(symbols.indexOf(coin) < 0){continue}
        assets[coin].ask_price = parseFloat(ticker[i].askPrice)
        assets[coin].bid_price = parseFloat(ticker[i].bidPrice)
        assets[coin].ask_value = _N(assets[coin].amount*assets[coin].ask_price, 2)
        assets[coin].bid_value = _N(assets[coin].amount*assets[coin].bid_price, 2)
    }
}

function trade(symbol, dirction, value){
    if(Date.now()-assets.USDT.update_time > 10*1000){
        Log('更新账户延时,不交易')
        return
    }
    var price = dirction == 'sell' ? assets[symbol].bid_price : assets[symbol].ask_price
    var amount = _N(Math.min(value,Ice_value)/price, trade_info[symbol].amountSize)
    if(amount < trade_info[symbol].minQty){
        Log(symbol, '合约调整偏离价值或冰山委托订单设置过小,达不到最小成交, 至少需要: ', _N(trade_info[symbol].minQty*price,0))
        return
    }
    exchange.IO("currency", symbol+'_'+'USDT')
    exchange.SetContractType('swap')
    exchange.SetDirection(dirction)
    var f = dirction == 'buy' ? 'Buy' : 'Sell'
    var id = exchange[f](price, amount, symbol)
    if(id){
        exchange.CancelOrder(id) //订单会立即撤销
    }
}



function updateStatus(){
        var table = {type: 'table', title: '交易对信息', 
             cols: ['币种', '数量', '持仓价格', '当前价格', '持仓价值', '保证金', '未实现盈亏'],
             rows: []}
    for (var i=0; i<symbols.length; i++){
        var price = _N((assets[symbols[i]].ask_price + assets[symbols[i]].bid_price)/2, trade_info[symbols[i]].priceSize)
        var value = _N((assets[symbols[i]].ask_value + assets[symbols[i]].bid_value)/2, 2)
        var infoList = [symbols[i], assets[symbols[i]].amount, assets[symbols[i]].hold_price, price, value,_N(assets[symbols[i]].margin,3), _N(assets[symbols[i]].unrealised_profit,3)]
        table.rows.push(infoList)
    }
    var logString = _D() + '  ' + JSON.stringify(assets.USDT) + '\n'
    LogStatus(logString + '`' + JSON.stringify(table) + '`')
    
    if(Date.now()-update_profit_time > Log_profit_interval*1000){
        LogProfit(_N(assets.USDT.margin_balance,3))
        update_profit_time = Date.now()
    }
    
}

function onTick(){
    var short_value = Trade_value
    if(short_symbols.length<long_symbols.length){
        short_value = _N(long_symbols.length*Trade_value/short_symbols.length,0)
    }
    var long_value = Trade_value
    if(short_symbols.length>long_symbols.length){
        long_value = _N(short_symbols.length*Trade_value/long_symbols.length,0)
    }
    var symbol = ''
    for(var i=0; i<short_symbols.length; i++){
        symbol = short_symbols[i]
        if(assets[symbol].ask_price == 0){ continue }
        if(assets[symbol].bid_value + short_value > Adjust_value){
            trade(symbol, 'sell', assets[symbol].bid_value + short_value)
        }
        if(assets[symbol].ask_value + short_value < -Adjust_value){
            trade(symbol, 'buy', -(assets[symbol].ask_value + short_value))
        }
    }
    for(var i=0; i<long_symbols.length; i++){
        symbol = long_symbols[i]
        if(assets[symbol].ask_price == 0){ continue }
        if(assets[symbol].bid_value - long_value > Adjust_value){
            trade(symbol, 'sell', assets[symbol].bid_value-long_value)
        }
        if(assets[symbol].ask_value - long_value < -Adjust_value){
            trade(symbol, 'buy', long_value-assets[symbol].ask_value)
        }
    }   
}

function main() {
    while(true){
        updateAccount()
        updateTick()
        onTick()
        updateStatus()
        Sleep(Interval*1000)
    }
}

संबंधित

अधिक

वाहक्या यह सीमित कीमत पर सस्ता है या बाजार मूल्य पर?

wfwfaf1updateAccount (() में आवश्यक है if ((pair.slice ((pair.length-4, pair.length) == "USDT") चूंकि एक busd अनुबंध है, इसलिए स्टॉक जानकारी को अपडेट करते समय यह निर्धारित करना आवश्यक है कि क्या लक्ष्य अनुबंध स्थिति है, और एक और निर्णय की आवश्यकता है। अन्यथा, कई पदों की जानकारी भ्रमित हो जाती है, जिससे असीमित भुगतान होता है।