وسائل لوڈ ہو رہے ہیں... لوڈنگ...

باین این معاہدے پرتیبھا سودے (کئی ہزاروں کی جنگ کی حکمت عملی 3)

مصنف:گھاس، تاریخ: 2020-09-09 13:45:11
ٹیگز:ہیجبائننس

اس کے علاوہ ، اس کے بارے میں مزید معلومات حاصل کرنے کے لئے ، آپ کو اس کے بارے میں مزید جاننے کی ضرورت ہوگی:https://www.fmz.com/digest-topic/6102

اس حکمت عملی کے دستی کو مکمل کرنے کی ضرورت ہے ، اور یہ بغیر دماغ کے کام نہیں کرسکتا ہے۔ حکمت عملی کا کوڈ صرف حوالہ کے لئے ہے ، ضرورت کے مطابق ترمیم کی جاسکتی ہے ، اور رائے کا خیرمقدم کیا جاتا ہے۔

حکمت عملی کے اصول

بٹ کوائن کے مقامی معاہدے جیسے بی ٹی سی ، ای ٹی ایچ ، اور اسی طرح کے تین معاہدے ہیں ، یعنی مستقل بی ٹی سی یو ایس ڈی _ پی ای آر پی ، اس سہ ماہی میں بی ٹی سی یو ایس ڈی _ 200925 ، اور اگلے سہ ماہی میں بی ٹی سی یو ایس ڈی _ 201225۔

مستقل معاہدہ فوری طور پر کیا جاسکتا ہے ، عام طور پر دو معاہدوں میں مجموعی طور پر تین فرق ہوتے ہیں: موجودہ سیزن - مستقل ، ثانوی سیزن - مستقل ، ثانوی سیزن - مستقل ؛ تیتلی سودے میں تین معاہدوں کو چلانے کی ضرورت ہوتی ہے ، فرق ہے ((دوسری سہ ماہی - موجودہ سیزن) - ((موسم - مستقل) ، یعنی فرق = ثانوی سیزن + مستقل - 2 * موجودہ سیزن ؛ زیادہ فرق کرنے کے لئے ایک سے زیادہ ثانوی اور مستقل معاہدہ کرنے کی ضرورت ہوتی ہے ، جس میں 2 خالی موسم کے معاہدے ہوتے ہیں۔

حکمت عملی کے پیرامیٹرز

  • تجارت کی کرنسی: تین اقسام کی مستقل ، موجودہ اور آئندہ موسموں میں ایک ساتھ موجودگی کی ضرورت ہے۔
  • اگلی شیٹ کی تعداد: ہر گرڈ میں اگلی شیٹ کی تعداد۔
  • نیٹ ورک کھولنے کی قیمت: ہر ایک قیمت کی طرف سے ایک فرق، زیادہ یا ایک خالی.
  • فرق ہموار پیرامیٹر الفا: فرق کے حساب کے لئے استعمال کیا جاتا ہے ، جو پہلے سے طے شدہ یا خود کو دوبارہ جانچنے کے قابل ہے۔
  • آئس مونڈ ٹرانسفر کی تعداد: اگر کھولنے کی تعداد بہت بڑی ہے تو ، ایک ہی ٹانگ کے رجحان کو کم کرنے کے لئے ، ہر بار کم سے کم کھولنے کی تعداد مقرر کی جاسکتی ہے ، نقصان یہ ہے کہ قیمتوں میں تاخیر ہے۔ آئس مونڈ کو اس پیرامیٹر کی ترتیب کی ضرورت نہیں ہے جیسے اگلے نمبر کی تعداد۔

اگر فرق کی اوسط لائن 100 ہے ، موجودہ فرق 200 ہے ، اگلی اشاعت کی تعداد 2 ہے ، گرڈ کھولنے کی قیمت 30 ہے ، تو اس وقت ہولڈنگ ہے: اگلے سہ ماہی میں 6 خالی ، مستقل خالی 6 خالی ، اس موسم میں 12 سے زیادہ۔ واضح نہیں ہے۔ آپ کوڈ کو دیکھ سکتے ہیں۔

نوٹ

  • تبادلہ تناسب میں ایک طرفہ ہولڈنگ کی ضرورت ہوتی ہے ، یعنی ایک ہی وقت میں متعدد خالی جگہیں رکھنا۔
  • اس کے علاوہ، اس کے پاس بہت سے دوسرے اختیارات ہیں جو اس کی مدد کرسکتے ہیں۔
  • یہ حکمت عملی بے ہوشوں کی حکمت عملی نہیں ہے، اصولوں کو سمجھنے کے بعد احتیاط سے جانچ پڑتال کریں۔
  • تحقیق کے مضامین کا جائزہ لینے کے لئے حقیقی حالات نہیں ہوں گے، پیرامیٹرز کو زیادہ سے زیادہ بہتر بنانے کی ضرورت نہیں ہے.
  • روبوٹ طویل عرصے تک کام نہیں کرتے ہیں اور قیمتوں میں بہت زیادہ فرق کو روکنے کے لئے نئے روبوٹ کی ضرورت ہوتی ہے۔
  • گرڈ کھولنے کی قیمت کے فرق کی پیرامیٹرز کو لازمی طور پر رسومات کا احاطہ کرنا چاہئے۔ مثال کے طور پر ، ایک رسومات کی قیمت 2،000 ہے ، اور بٹ کوائن کی قیمت 10،000 ہے ، اس کے بعد یہ کم از کم 8 * 10000 * 0.0002 = 16 سے زیادہ ہونا چاہئے ، اس کے علاوہ ایک خاص توازن بھی شامل ہے ، جسے 25-30 میں ترتیب دیا جاسکتا ہے۔
  • قریب آنے والی ترسیل کے لئے ، سیزن 2 - سیزن ، سیزن - مستقل وقت کا فرق بڑھتا جارہا ہے ، اور آخر کار سیزن قریب آنے کے لئے ، تتلی والا سودہ دراصل سیزن 2 اور مستقل کے مابین سودہ ہے ، اور یہ کام نہیں کرسکتا ہے ، ترسیل سے 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ہم نے اس کے بارے میں کیا سوچا ہے؟

جینگ فینگزگھاس کے دیوتا