বিএনএ কৌশল ২ঃ উচ্চ-নিম্ন স্কোর সরিয়ে ফেলুন

লেখক:জেলা শ্রেণীর পরিমাণ, তারিখঃ ২০২০-০৪-০৯ ২১ঃ৪৪ঃ২২
ট্যাগঃবিন্যান্স

এফএমজেডের উন্মুক্ত কৌশল এবং গার্ডের সমর্থনের জন্য ধন্যবাদ! আমি নিজেও দুটি পরিবর্তন করেছিঃ ১, কারণ অনেক বন্ধু ডিফল্টরূপে ১০ গুণ বা ২০ গুণ লিভারেজ করে, এবং এই কৌশলটি পুরো স্টকের মোড, একটি মুদ্রা বোল্ডিংয়ের জন্য, এটি ধ্বংস হয়ে যাবে। সুতরাং একটি Max_amount যুক্ত করুন, যাতে একক মুদ্রা ক্রয়ের পরিমাণ এই সংখ্যা ছাড়িয়ে না যায়, বোল্ডিংয়ের প্রতিরোধ করে। ২। যদি মুদ্রা পুকুরের মধ্যে একটি সুপার-টপ ওভার-ডাউন থাকে, উদাহরণস্বরূপ, একক মুদ্রা, এটি সহজেই সবাইকে টেনে আনতে পারে এবং সামগ্রিক কৌশলটি সহজেই ব্যর্থ হয়। সুতরাং আমি সূচকটি গণনা করার সময় একটি সর্বোচ্চ স্কোর সরিয়ে নিই, একটি সর্বনিম্ন স্কোর সরিয়ে নিই, সূচকটি আরও ন্যায্য। তবে, যদি আপনি একটি নতুন মুদ্রা কিনতে চান, তবে আপনি অবশ্যই এটি ব্যবহার করতে পারেন। বিঃদ্রঃঃ এই নীতিটি সীমাবদ্ধতার কারণে পুনরায় পরীক্ষা করা হয়নি, শুধুমাত্র রেফারেন্সের জন্য, ক্ষতির জন্য দায়বদ্ধ নয়!

গুরুত্বপূর্ণ বিষয়বস্তু

  • এই গবেষণাটি অবশ্যই দেখবেন।https://www.fmz.com/digest-topic/5294⇒ কৌশলগত নীতি, ঝুঁকি, ট্রেডিংয়ের স্ক্রিনিং, প্যারামিটার সেটিং, পজিশন খোলার হার এবং মোট মূলধনের অনুপাত ইত্যাদি সম্পর্কে জ্ঞান।
  • পূর্ববর্তী রিপোর্টটি ডাউনলোড করুন এবং আপনার নিজের গবেষণা পরিবেশে আপলোড করুন। প্রকৃত পরিবর্তনগুলি আবার চালান। যদি আপনি ইতিমধ্যে এই রিপোর্টটি দেখে থাকেন তবে সাম্প্রতিক সপ্তাহের তথ্যগুলি আপডেট করুন।
  • কৌশলগুলি সরাসরি পুনরায় পরীক্ষা করা যায় না, গবেষণা পরিবেশে পুনরায় পরীক্ষা করা প্রয়োজন।
  • কৌশল কোড এবং ডিফল্ট পরামিতিগুলি কেবলমাত্র গবেষণার জন্য, বাস্তব ডিস্কের কাজটি সাবধানতার সাথে এবং নিজের ঝুঁকিতে পরিচালনা করা প্রয়োজন।
  • কোডটি উন্মুক্ত এবং আপনি নিজের দ্বারা পরিবর্তন করতে পারেন, যদি কোনও সমস্যা থাকে তবে মন্তব্য এবং প্রতিক্রিয়া স্বাগতম, এটি উদ্ভাবক বিনয়ন ফোরামে যোগদানের জন্য সেরা ((গবেষণা প্রতিবেদনে যোগদানের উপায় রয়েছে))
  • এই কৌশলটি পুরো স্টোর মোডে কাজ করতে হবে।কৌশলটি বিনয়কে সমর্থন করে, বট তৈরি করার সময় ডিফল্টরূপে লেনদেনের জোড়া এবং কে-লাইন চক্র ব্যবহার করে, কৌশলটি কে-লাইন ব্যবহার করে না

কৌশলগত নীতি

যে মুদ্রার মুদ্রার দাম শ্যাংকি-বিটকয়েন মূল্য সূচকের উপরে, যে মুদ্রার দাম সূচকের নীচে, তার বিচ্যুতি যত বেশি হবে, অবস্থান তত বেশি হবে। এই কৌশলটি কোনও হেজিং ছাড়াই বিটিসি যুক্ত করতে পারে) । গত দুই মাসের পারফরম্যান্স (প্রায় 3 গুণ লিভারেজ, ডেটা আপডেট হয়েছে 4.8):img

কৌশলগত যুক্তি

1. বাজারের আপডেট এবং অ্যাকাউন্টের হোল্ডিং, প্রথমবারের জন্য চলমান প্রাথমিক মূল্য রেকর্ড করা হবে ((নতুন যোগ করা মুদ্রা যোগ করার সময় অনুযায়ী গণনা করা হয়) ২. সূচক আপডেট করুন, সূচকটি হ'ল শঙ্কু-বিটকয়েন মূল্য সূচক = mean ((sum)) শঙ্কু মূল্য / বিটকয়েন মূল্য) / ((শঙ্কু প্রাথমিক মূল্য / বিটকয়েন প্রাথমিক মূল্য)) ৩. বিচ্যুতি সূচক অনুসারে বেশি কাজ করার সিদ্ধান্ত নিন, বিচ্যুতির আকার অনুসারে অবস্থান নির্ধারণ করুন 4. অর্ডার, অর্ডার পরিমাণ হিমবাহ দ্বারা অর্পণ করা হয়, প্রতিপক্ষের দাম অনুযায়ী লেনদেন ((একটি কিনুন এবং একটি বিক্রি করুন) ।আপনি যদি আপনার অ্যাকাউন্টটি পুনরুদ্ধার করতে চান তবে আপনি অবশ্যই এটিকে পুনরুদ্ধার করতে পারেন। 5.再次循环

কৌশলগত পরামিতি

img

  • Trade_symbols: ট্রেডিং করা মুদ্রা, যা আপনাকে গবেষণা প্ল্যাটফর্মের উপর ভিত্তি করে নিজেরাই ফিল্টার করতে হবে, বা বিটিসিতে যোগ দিতে পারে
  • Trade_value: মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মুদ্রা মু
  • Adjust_value: চুক্তির মূল্য (USDT মূল্য) বিচ্যুতির মান সামঞ্জস্য করুন, খুব বেশি সামঞ্জস্য করা ধীর, 20 এর নীচে হতে পারে না, অন্যথায় সর্বনিম্ন লেনদেনের মধ্যে পৌঁছাতে পারে না
  • Ice_value: হিমশৈলীর মান, যা 20 এর চেয়ে কম হতে পারে না, যা আসলে Adjust_value/Ice_value এর মধ্যে ছোট।
  • Reset: ইতিহাস পুনরায় সেট করুন

কৌশলগত ঝুঁকি

মনে রাখবেন যে, যদি কোন মুদ্রা স্বাধীনভাবে বাজার থেকে বেরিয়ে আসে, যেমন সূচকের তুলনায় কয়েকগুণ বৃদ্ধি পায়, তাহলে মুদ্রার উপর প্রচুর পরিমাণে খালি অবস্থান জমা হবে। একইভাবে, একটি বড় পতন কৌশলটি অনেক বেশি কাজ করতে বাধ্য করবে।


//向上偏离最大的币的索引
var highIndex=0;
//向下偏离最大的币的索引
var lowIndex=0;

var trade_symbols = Trade_symbols.split(',')
var symbols = trade_symbols
var index = 1 //指数
if(trade_symbols.indexOf('BTC')<0){
    symbols = trade_symbols.concat(['BTC'])
}
var update_profit_time = 0
var assets = {}
var trade_info = {}
var exchange_info = HttpQuery('https://fapi.binance.com/fapi/v1/exchangeInfo')
if(!exchange_info){
    Log('无法连接网络')
    return
}
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, 
                                                     btc_price:0, btc_change:1,btc_diff: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, update_time: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<trade_symbols.length; i++){
        assets[trade_symbols[i]].margin = 0
        assets[trade_symbols[i]].unrealised_profit = 0
        assets[trade_symbols[i]].hold_price = 0
        assets[trade_symbols[i]].amount = 0
        assets[trade_symbols[i]].unrealised_profit = 0
    } 
    for(var j=0; j<account.Info.positions.length; j++){
        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)
    
    if(pos.length > 0){
        pos = JSON.parse(exchange.GetRawJSON())
        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 updateIndex(){ //更新指数
    var init_prices = {}
    if(!_G('init_prices') || Reset){
        for(var i=0; i<trade_symbols.length; i++){
            init_prices[trade_symbols[i]] = (assets[trade_symbols[i]].ask_price+assets[trade_symbols[i]].bid_price)/(assets.BTC.ask_price+assets.BTC.bid_price)
        }
        Log('保存启动时的价格')
        _G('init_prices',init_prices)
    }else{
        init_prices = _G('init_prices')
        var temp = 0
        
        highIndex=0;
        lowIndex=0;
        var highChange;var lowChange;
        //本次计算找出最大偏离的高低分
        for(var i=0; i<trade_symbols.length; i++){
            assets[trade_symbols[i]].btc_price =  (assets[trade_symbols[i]].ask_price+assets[trade_symbols[i]].bid_price)/(assets.BTC.ask_price+assets.BTC.bid_price)
            if(!init_prices[trade_symbols[i]]){
                Log('添加新的币种',trade_symbols[i])
                init_prices[trade_symbols[i]] = assets[trade_symbols[i]].btc_price 
                _G('init_prices',init_prices)
            }
            assets[trade_symbols[i]].btc_change = _N(assets[trade_symbols[i]].btc_price/init_prices[trade_symbols[i]],4)
            if(i==0){
                highChange=assets[trade_symbols[i]].btc_change;
                lowChange=assets[trade_symbols[i]].btc_change;
            }
            
            if(highChange<assets[trade_symbols[i]].btc_change){
                highChange=assets[trade_symbols[i]].btc_change;
                highIndex=i;
            }
            if(lowChange>assets[trade_symbols[i]].btc_change){
                lowChange=assets[trade_symbols[i]].btc_change;
                lowIndex=i;
            }
        }
        
        for(var i=0; i<trade_symbols.length; i++){
            assets[trade_symbols[i]].btc_price =  (assets[trade_symbols[i]].ask_price+assets[trade_symbols[i]].bid_price)/(assets.BTC.ask_price+assets.BTC.bid_price)
            assets[trade_symbols[i]].btc_change = _N(assets[trade_symbols[i]].btc_price/init_prices[trade_symbols[i]],4)
            if(i!=lowIndex&&i!=highIndex){ //去掉高低分的影响
                temp += assets[trade_symbols[i]].btc_change
            }
        }
        //因为去掉了最高最低分,所以减2
        index = _N(temp/(trade_symbols.length-2), 4)
    }
    
}

function updateTick(){ //更新行情
    var ticker = HttpQuery('https://fapi.binance.com/fapi/v1/ticker/bookTicker')
    try {
        ticker = JSON.parse(ticker)
    }catch(e){
        Log('get ticker time out')
        return
    }
    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)
    }
    updateIndex()
    for(var i=0; i<trade_symbols.length; i++){
        assets[trade_symbols[i]].btc_diff = _N(assets[trade_symbols[i]].btc_change - index, 4)
    }
}

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: ['Symbol', 'amount', 'hold_price',  'price', 'diff', 'value', 'margin', 'unrealised_profit'],
             rows: []}
        var infoList;
    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)
        if(i==lowIndex){
           infoList = [symbols[i]+"Low", assets[symbols[i]].amount, assets[symbols[i]].hold_price, price, assets[symbols[i]].btc_diff, value, _N(assets[symbols[i]].margin,3), _N(assets[symbols[i]].unrealised_profit,3)]    
        }else if(i==highIndex){
           infoList = [symbols[i]+"High", assets[symbols[i]].amount, assets[symbols[i]].hold_price, price, assets[symbols[i]].btc_diff, value, _N(assets[symbols[i]].margin,3), _N(assets[symbols[i]].unrealised_profit,3)]
        }else{
           infoList = [symbols[i], assets[symbols[i]].amount, assets[symbols[i]].hold_price, price, assets[symbols[i]].btc_diff, 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) + ' Index:' + index + '\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(){ //策略逻辑部分
    for(var i=0; i<trade_symbols.length; i++){
        var symbol = trade_symbols[i]
        if(assets[symbol].ask_price == 0){ continue }
        var aim_value = -Trade_value * _N(assets[symbol].btc_diff/0.01,1)
        
        if(i!=lowIndex&&i!=highIndex){ //高低分的货币不交易
           if(aim_value - assets[symbol].ask_value > Adjust_value&&assets[symbol].ask_value<Max_amount){
              trade(symbol,'buy', aim_value - assets[symbol].ask_value)
           }
           if(aim_value - assets[symbol].bid_value < -Adjust_value&&assets[symbol].bid_value<Max_amount){
              trade(symbol,'sell', -(aim_value - assets[symbol].bid_value))
           }
        }
    }
}

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

সম্পর্কিত

আরো

৮১৩৩৮০৬২৯এই সাধারণ লিভারেজটি কত টাকা খরচ করতে পারে?

জেলা শ্রেণীর পরিমাণএকটি মুদ্রার সর্বোচ্চ ধার্য মূল্য

হালকা মেঘহ্যালো, আমি আপনাকে একটি প্রশ্ন করতে চাই। Max_amount এই হল প্রতিটি লেনদেনের জোড়ার সর্বাধিক হোল্ডিং মূল্য বা সর্বাধিক গ্যারান্টি পরিমাণ? ধন্যবাদ.