金融バタリー・スロット・戦略は,再測できない.https://www.fmz.com/digest-topic/6102
このシートマニュアルを読み終える必要があります. 脳のない実機では実行できません. シートコードは参照のみで,必要に応じて変更され,フィードバックは歓迎します.
ビンコイン本位契約は,BTC,ETHなどの3つの契約が同時に存在します.これは,永続的なBTCUSD_PERP,今季BTCUSD_200925および次季BTCUSD_201225です.
永続契約は現金として使用され,通常,2つの契約は3つの差額で負債を担保する.当期-永続,次期-永続,次期-同期.蝶式配当は3つの契約を操作する必要があります.差額は ((次期-同期) - ((同期-永続),すなわち差額=次期+永続-2*同期.より多くの差額は,さらに1つの次期と永続契約を開設し,空き2つの同期契約を開設する必要があります.
格差の平均線が100であり,現在の格差が200であり,次の单行件数は2であり,格子開封の格差は30である場合,この時点で保持は:次期空き6枚,永続空き6枚,当期余り12枚である. 詳細は不明です. コードを見てください.
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+"×tamp="+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は2つのbidPrice-askPriceを取っているのに,diff_buyは2つのaskPrice-bidPriceを取っているのはなぜですか?
春と夏が異なっています暴力を振るう!
ほら草神聖杯
gavin.abc草の神 野蛮な (音)!!!
ジングフェンズ草の神様