রিসোর্স লোড হচ্ছে... লোডিং...

বেনান চুক্তির প্রজাপতি স্যুট (হাজার বাহিনীর যুদ্ধ কৌশল 3)

লেখক:ঘাস, তারিখ: ২০২০-০৯-০৯ ১৩ঃ৪৫ঃ১১
ট্যাগঃহেজবিন্যান্স

বিএনপির বাতিঘর সুইট কৌশল, যা পুনরায় পরীক্ষা করা যায় না।https://www.fmz.com/digest-topic/6102

এই কৌশল ম্যানুয়ালটি পড়তে হবে, এটি মস্তিষ্কবিহীন ডিস্ক চালানো সম্ভব নয়। কৌশল কোডটি কেবলমাত্র রেফারেন্সের জন্য, প্রয়োজন অনুসারে সংশোধন করা যেতে পারে, প্রতিক্রিয়া স্বাগত।

কৌশলগত নীতি

বিটিসি, ইটিএইচ ইত্যাদির মতো বিটকয়েন বেস চুক্তিতে একই সাথে তিনটি চুক্তি রয়েছে, যা স্থায়ী বিটিসি ইউএসডি_পিইআরপি, কোয়ার্টার বিটিসি ইউএসডি_২০০৯২৫ এবং কোয়ার্টার বিটিসি ইউএসডি_২০১২২৫।

চিরস্থায়ী চুক্তিগুলি স্থির হিসাবে ব্যবহার করা যেতে পারে, সাধারণত দুটি চুক্তির জন্য মোট তিনটি পার্থক্য রয়েছেঃ মৌসুম-স্থায়ী, দ্বিতীয়-পরিণতিশীল, দ্বিতীয়-পরিণতিশীল, দ্বিতীয়-পরিণতিশীল। প্রজাপতি স্যুটটি তিনটি চুক্তি পরিচালনা করতে হবে, পার্থক্যটি হ'ল ((দ্বিতীয়-পরিণতিশীল) - (দ্বিতীয়-পরিণতিশীল)), অর্থাৎ পার্থক্য = দ্বিতীয়-পরিণতিশীল + স্থায়ী -২ * একই মৌসুমে। আরও পার্থক্যের জন্য আরও একটি দ্বিতীয় এবং স্থায়ী চুক্তি করা প্রয়োজন, এবং 2 টি মৌসুমী চুক্তি খালি করা দরকার।

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

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

যদি দামের গড় রেখা 100 হয়, বর্তমান দাম 200 হয়, পরবর্তী টিকিটের সংখ্যা 2 হয়, গ্রিড খোলা টিকিটের দাম 30 হয়, তবে এই মুহুর্তে হোল্ডিং হয়ঃ পরবর্তী মরসুমে 6 টি ফাঁকা, স্থায়ী ফাঁকা 6 টি, সেই মরসুমে 12 টি বেশি। স্পষ্ট নয়। আপনি নির্দিষ্টভাবে কোডটি দেখতে পারেন।

সতর্কতা

  • বিনিময় হারটি প্রায় একমুখী হোল্ডিংয়ের প্রয়োজন, অর্থাৎ একই সময়ে বিভিন্ন জায়গায় একাধিক স্থান ধরে রাখা।
  • তবে, এটি একটি সম্পূর্ণ স্টক মোড।
  • এই কৌশলটি মস্তিষ্কহীন অপারেটিং কৌশল নয়, নীতিগুলি বোঝার পরে সাবধানে পরীক্ষা করুন।
  • গবেষণার নিবন্ধের পুনর্বিবেচনা বাস্তব পরিস্থিতিতে হবে না, অতিরিক্ত অনুকূলিতকরণ পরামিতিগুলির প্রয়োজন নেই।
  • রোবটগুলি দীর্ঘ সময় ধরে কাজ করে না, এবং দামের খুব বড় পার্থক্য রোধ করার জন্য নতুন রোবট তৈরি করা প্রয়োজন।
  • গ্রিড অ্যাকাউন্ট খোলার দামের পার্থক্যের পরামিতি অবশ্যই অপারেশন ফি কভার করতে হবে, উদাহরণস্বরূপ, একক অপারেশন ফি 10,000, বিটকয়েন দাম 10,000, তবে এটি কমপক্ষে 8 * 10,000 * 0.0002 = 16 এর চেয়ে বড় হতে হবে, এবং একটি নির্দিষ্ট পরিমাণের সাথে 25-30 এ সেট করা যেতে পারে।
  • দ্বিতীয় প্রান্তিকে বিতরণ - এই মরসুম, এই মরসুম - স্থায়ী সময়ের পার্থক্য ক্রমবর্ধমান, অবশেষে এই মরসুমের কাছাকাছি স্থায়ী, প্রজাপতি সুইচটি আসলে দ্বিতীয় মরসুম এবং স্থায়ী মধ্যে সুইচ, এটি পরিচালনা করতে পারে না, বিতরণের 2 সপ্তাহ আগে থামানো বা চালিয়ে যাওয়া কিনা তা পর্যবেক্ষণ করা দরকার। একইভাবে নতুন চুক্তিও পর্যবেক্ষণ করা উচিত।
  • আইওসি ব্যবহার করে, যে অংশটি অবিলম্বে অর্ডার মূল্য (বা আরও ভাল মূল্য) এ সম্পন্ন করা যায়, সে অংশটি অবিলম্বে সম্পূর্ণরূপে সম্পন্ন করা যায় না তা বাতিল করা হবে; অতএব, প্রত্যাহারের প্রয়োজন নেই।
  • এই কৌশলটি সামান্য সংশোধন করা যেতে পারে এবং চলতি মৌসুম এবং স্থায়ী বা পরবর্তী মৌসুম এবং স্থায়ী মধ্যে সুদ পরিবর্তন করা যেতে পারে।
  • কৌশলটি হ'ল প্রায়শই পজিশনিং শুরু না করা এবং সম্ভবত একদিনে একটিও খোলা না হওয়া।
  • রোবটগুলি কেবলমাত্র তাদের কাজ শুরু করার পরে গড় মূল্যের পরিসংখ্যান শুরু করে, ইতিহাসের দিকে নজর না দিয়ে।
  • এই কৌশলটি সম্ভবত স্ব-অনুকূলিতকরণ করা যেতে পারে, কারণ এটি একটি একক পা দিয়ে তৈরি করা সম্ভব নয়।
  • নিম্নলিখিত কমান্ডটি স্লিপ মূল্যের সাথে যুক্ত হয়, যা ছোট খোলার সংখ্যার জন্য খুব বেশি প্রভাব ফেলে না, বড় খোলার সংখ্যার জন্য নিজের অপ্টিমাইজেশান প্রয়োজন, যেমন হিমশৈল অর্ডার।

if(IsVirtual()){
    throw '不能回测,回测参考研究文章 https://www.fmz.com/digest-topic/6102'
}
if(exchange.GetName() != 'Futures_Binance'){
    throw '只支持币安期货交易所,和现货交易所不同,需要单独添加,名称为Futures_Binance'
}
if(Grid == 0){
    throw '需要设置网格差价,需要覆盖8份手续费,可设置为当前价*fee*15'
}

exchange.SetBase("https://dapi.binance.com") //切换至交割合约

var exchange_info = HttpQuery('https://dapi.binance.com/dapi/v1/exchangeInfo')
if(!exchange_info){
    throw '无法连接币安网络,需要非公用海外托管者'
}
exchange_info = JSON.parse(exchange_info)
trade_info = {} //合约基础信息
trade_contract = {NEXT_QUARTER:'',CURRENT_QUARTER:'',PERPETUAL:''} //需要交易的合约代码
for (var i=0; i<exchange_info.symbols.length; i++){
   trade_info[exchange_info.symbols[i].symbol] =  exchange_info.symbols[i]
   if(exchange_info.symbols[i].baseAsset == Symbol && exchange_info.symbols[i].contractType in trade_contract && exchange_info.symbols[i].contractStatus == 'TRADING'){
       trade_contract[exchange_info.symbols[i].contractType] = exchange_info.symbols[i].symbol
   }
}
if(!(trade_contract.NEXT_QUARTER && trade_contract.CURRENT_QUARTER && trade_contract.PERPETUAL)){
    throw '无法找到蝶式对冲的三个合约'
}
var pricePrecision = trade_info[trade_contract.PERPETUAL].pricePrecision //价格精度

var ticker = {}
var account = {}
var position = {}

var diff_mean = null //差价均价
if(_G('diff_mean') && _G('symbol') == Symbol){ //防止切换币种,差价出错
    diff_mean = _G('diff_mean')
}else{
    _G('symbol',Symbol)
}

var diff_buy = 0 //做多的差价
var diff_sell = 0 //做空的差价
Trade_value = _N(Trade_value, 0)
 
var init_asset = 0 //初始资金
if(_G('init_asset')){
    init_asset = _G('init_asset')
}else{
    updateAccount()
    init_asset = parseFloat(account[Symbol].marginBalance)
    _G('init_asset', init_asset)
}
var update_status_time = 0
var update_account_time = Date.now()

function onexit(){
    _G('diff_mean', diff_mean)
}

function updateTicker(){
    var bookTicker =  HttpQuery('https://dapi.binance.com/dapi/v1/ticker/bookTicker')
    try {
        bookTicker = JSON.parse(bookTicker)
        for(var i=0;i<bookTicker.length;i++){
            ticker[bookTicker[i].symbol] = bookTicker[i]
        }
    } catch (e) {
        Log('无法获取行情')
    }
}

function updateAccount(){
    var acc = exchange.IO("api", "GET", "/dapi/v1/account", "timestamp="+Date.now())
    if(!acc){
        Log('无法获取账户')
        return
    }
    for(var i=0;i<acc.assets.length;i++){
        account[acc.assets[i].asset] = acc.assets[i]
    }
}

function updatePosition(){
    var pos = exchange.IO("api", "GET", "/dapi/v1/positionRisk", "timestamp="+Date.now())
    if(!pos){
        Log('无法获取仓位')
        return
    }
    for(var i=0;i<pos.length;i++){
        position[pos[i].symbol] = pos[i]
    }
}

function updateStatus(){
    if(Date.now() - update_status_time < 4000){
        return
    }
    update_status_time = Date.now()
    if(Date.now() - update_account_time >  5*60*1000){
        update_account_time = Date.now()
        updateAccount()
        LogProfit(_N(parseFloat(account[Symbol].marginBalance) - init_asset, 5))
    }
    
    $.PlotLine('buy', _N(diff_buy, pricePrecision))
    $.PlotLine('sell', _N(diff_sell, pricePrecision))
    $.PlotLine('mean', _N(diff_mean, pricePrecision+3))
    
    var table1 = {type: 'table', title: '账户信息', 
             cols: ['账户余额', '未实现盈亏', '保证金余额',  '可用余额', '维持保证金', '起始保证金', 'BNB', '初始余额', '收益', '平均差价', '做多差价', '做空差价', '下单量'],
             rows: [[_N(parseFloat(account[Symbol].walletBalance),5), _N(parseFloat(account[Symbol].unrealizedProfit),5), _N(parseFloat(account[Symbol].marginBalance),5), 
                     _N(parseFloat(account[Symbol].availableBalance),5),  _N(parseFloat(account[Symbol].maintMargin),5), _N(parseFloat(account[Symbol].initialMargin),5), 
                     _N(parseFloat(account.BNB.walletBalance),5), _N(init_asset,5),
                      _N(parseFloat(account[Symbol].marginBalance) - init_asset,5), _N(diff_mean, pricePrecision+1),
                     _N(diff_buy, pricePrecision),_N(diff_sell, pricePrecision), Trade_value
                    ]]}
    var table2 = {type: 'table', title: '对冲信息', 
             cols: ['合约', '持仓张数', 'Bid', 'Ask', '持仓价值', '杠杆', '开仓均价', '未实现盈亏'],
             rows: []}
    for(var contract in trade_contract){
        var symbol = trade_contract[contract]
        table2.rows.push([symbol, position[symbol].positionAmt, ticker[symbol].bidPrice, ticker[symbol].askPrice, 
                          parseInt(position[symbol].positionAmt)*parseInt(trade_info[symbol].contractSize), position[symbol].leverage,
                         position[symbol].entryPrice, position[symbol].unRealizedProfit])
    }
    var logString = _D()+'  策略代码最后更新时间9月29日\n'
    LogStatus(logString + '`' + JSON.stringify(table1) + '`'+'\n'+'`' + JSON.stringify(table2) + '`')
}

function trade(symbol, side, price, amount){
    //IOC下单,未成交部分会自动撤销
    exchange.Log(side == 'BUY' ? LOG_TYPE_BUY : LOG_TYPE_SELL, price, amount, ' buy: ' + _N(diff_buy, pricePrecision) + ' sell: '+ _N(diff_sell, pricePrecision) + ' mean: '+_N(diff_mean, pricePrecision+3))
    exchange.IO("api", "POST","/dapi/v1/order","symbol="+symbol+"&side="+side+"&type=LIMIT&timeInForce=IOC&quantity="+amount+"&price="+price+"&timestamp="+Date.now())
}


function onTicker(){
    
    //由于是吃单,需要分别计算做多和做空的差价
    diff_sell = parseFloat(ticker[trade_contract.NEXT_QUARTER].bidPrice) + parseFloat(ticker[trade_contract.PERPETUAL].bidPrice) -
                2*parseFloat(ticker[trade_contract.CURRENT_QUARTER].askPrice)
    diff_buy = parseFloat(ticker[trade_contract.NEXT_QUARTER].askPrice) + parseFloat(ticker[trade_contract.PERPETUAL].askPrice)  -
                2*parseFloat(ticker[trade_contract.CURRENT_QUARTER].bidPrice)

    
    if(!diff_mean){diff_mean = (diff_buy+diff_sell)/2}
    diff_mean = diff_mean*(1-Alpha) + Alpha*(diff_buy+diff_sell)/2 //差价均价的更新
    
    
    var aim_buy_amount = -Trade_value*(diff_buy - diff_mean)/Grid
    var aim_sell_amount = -Trade_value*(diff_sell - diff_mean)/Grid 
    
    if(aim_buy_amount - parseFloat(position[trade_contract.PERPETUAL].positionAmt) > Trade_value){ //做多差价,价格加了滑价
        trade(trade_contract.PERPETUAL, 'BUY', _N(parseFloat(ticker[trade_contract.PERPETUAL].askPrice)*1.01, pricePrecision), _N(Math.min(aim_buy_amount-parseFloat(position[trade_contract.PERPETUAL].positionAmt),Ice_value),0))
    }
    if(aim_buy_amount - parseFloat(position[trade_contract.NEXT_QUARTER].positionAmt) > Trade_value){
        trade(trade_contract.NEXT_QUARTER, 'BUY', _N(parseFloat(ticker[trade_contract.NEXT_QUARTER].askPrice)*1.01,pricePrecision), _N(Math.min(aim_buy_amount-parseFloat(position[trade_contract.NEXT_QUARTER].positionAmt),Ice_value),0))
    }
    if(-2*aim_buy_amount - parseFloat(position[trade_contract.CURRENT_QUARTER].positionAmt) < -2*Trade_value){
        trade(trade_contract.CURRENT_QUARTER, 'SELL', _N(parseFloat(ticker[trade_contract.CURRENT_QUARTER].bidPrice)*0.99,pricePrecision), _N(2*Math.min(aim_buy_amount+parseFloat(position[trade_contract.CURRENT_QUARTER].positionAmt),Ice_value),0))
    }
    
    if(aim_sell_amount - parseFloat(position[trade_contract.PERPETUAL].positionAmt) < -Trade_value){ //做空差价
        trade(trade_contract.PERPETUAL, 'SELL', _N(parseFloat(ticker[trade_contract.PERPETUAL].bidPrice)*0.99,pricePrecision), _N(Math.min(parseFloat(position[trade_contract.PERPETUAL].positionAmt)-aim_sell_amount,Ice_value),0))
    }
    if(aim_sell_amount - parseFloat(position[trade_contract.NEXT_QUARTER].positionAmt) < -Trade_value){
        trade(trade_contract.NEXT_QUARTER, 'SELL', _N(parseFloat(ticker[trade_contract.NEXT_QUARTER].bidPrice)*0.99,pricePrecision), _N(Math.min(parseFloat(position[trade_contract.NEXT_QUARTER].positionAmt)-aim_sell_amount,Ice_value),0))
    }
    if(-2*aim_sell_amount - parseFloat(position[trade_contract.CURRENT_QUARTER].positionAmt) > 2*Trade_value){
        trade(trade_contract.CURRENT_QUARTER, 'BUY', _N(parseFloat(ticker[trade_contract.CURRENT_QUARTER].askPrice)*1.01,pricePrecision), _N(-2*Math.min(aim_sell_amount-parseFloat(position[trade_contract.CURRENT_QUARTER].positionAmt),Ice_value),0))
    }
}

function main() {
    updateAccount()
    updatePosition()
    while(true){
        updateTicker()
        updatePosition()
        onTicker()
        updateStatus()
        Sleep(1*1000)
    }
}

সম্পর্কিত

আরো

ডিং গায়অ্যাকাউন্টের তথ্য অ্যাক্সেস করতে না পারার কারণ কি?

উচ্চ নিমজ্জন নিমজ্জনআপনি যদি একটি বিট-এ-বিক্রয় মূল্যের উপর ভিত্তি করে পার্থক্য গণনা করেন, তাহলে আপনি কি এটিকে আরও ভাল করতে পারেন, কারণ ট্রেড-ভ্যালু পরিমাণটি সম্ভবত একটি বিট-এ-বিক্রয় পরিমাণের তুলনায় অনেক বেশি, এবং তারপর এটি হয়ে যায়

ব্র্যান্ড_মুভডকেন diff_sell দুটি bidPrice-askPrice নেয়, diff_buy দুটি askPrice-bidPrice নেয়?

অজানা শীতকালএটা তো একটা জঘন্য ঘটনা!

ওহ!গ্রাস দেবতার পবিত্র কাপাস

gavin.abcগ্রীস গড গম্ভীর ((শব্দ বিচ্ছিন্ন)!!!

জিংফেংজঘাসের দেবতা