Futures_Binance
Chiến lược này sẽ phân tán giá trị tương đương với một chiếc đồng tiền khoá được chọn không, đồng thời giữ các vị trí tương đương với Bitcoin để giảm rủi ro và biến động.Về cơ bản, thời gian làm tiền ảo - Chỉ số giá BitcoinCác hoạt động trong hai tháng gần đây (tăng đòn bẩy khoảng 3 lần, dữ liệu được cập nhật đến 4.8) trong tuần gần đây, đồng tiền ảo đã tăng so với Bitcoin, do đó mất mát, nếu bạn nhìn vào nhiều đồng tiền ảo, bạn có thể thiết lập trong tham số làm trống Bitcoin làm nhiều đồng tiền ảo:
Phương pháp mặc định là làm nhiều Bitcoin làm tiền ảo, bạn cũng có thể ngược lại (nếu bạn nghĩ rằng tiền ảo ở đáy), quyền quyết định ở bên bạn.
1. cập nhật thị trường và tài khoản giữ
2. Cập nhật giá trị nắm giữ trống của mỗi đồng xu, để xác định xem liệu nắm giữ trống có cần điều chỉnh hay không
3. Cập nhật tổng số vị trí trống, xác định nhiều vị trí và quyết định xem có nên điều chỉnh nhiều vị trí hay không
4. Đặt hàng, số lượng đặt hàng được quyết định bởi Ice Mountain theo giá giao dịch đối thủ (mua bán một giá).Đặt hàng ngay lập tức bị hủy bỏ (vì vậy bạn sẽ thấy rất nhiều đơn hàng bị hủy bỏ không thành công 400: {
Điều này sẽ xác định giá trị giao dịch của mỗi đồng tiền có giá trị giao dịch nhiều hơn, giá trị hợp đồng của mỗi đồng tiền ít hơn là trung bình của giá trị cần được bảo hiểm.
Nếu chỉ có BTC trống, nhiều hơn TRX, DASH, ONT, QTUM, và Trade_value là 50, thì TRX, DASH, ONT, QTUM đều có nhiều hơn 50, và BTC giữ khoảng trống 50 * 4.
Nếu chỉ có nhiều BTC, TRX trống, DASH, ONT, QTUM, và Trade_value là 50, thì TRX, DASH, ONT, QTUM đều có khoảng trống 50, và BTC có nhiều vị trí 50 * 4.
Động thái này có thể được sử dụng để tạo ra một số lượng lớn các khoản đầu tư.
Khi giá của đồng tiền không tăng, giá trị hợp đồng tăng, tại thời điểm này là giảm giá, ngược lại là tăng giá. Điều này giúp giá trị hợp đồng tổng thể duy trì ổn định. Đồng tiền ngầm có khả năng ra khỏi thị trường độc lập, hiện nay nhìn từ chu kỳ một năm, đồng tiền ngầm có thể ở đáy và có khả năng tăng lên từ đáy. Tùy thuộc vào cách sử dụng, nếu bạn nhìn tốt về đồng tiền ngầm và cho rằng đã ở đáy, hướng có thể vận hành, làm nhiều chỉ số.
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) } }
Ồ.Có phải giá bán đơn giản hay giá thị trường?
wfwfaf1updateAccount (()) cần if ((pair.slice ((pair.length-4, pair.length) == "USDT") Vì có hợp đồng busd, khi cập nhật thông tin nắm giữ, cần phải quyết định liệu đó có phải là vị trí hợp đồng mục tiêu hay không. Nếu không, thông tin về nhiều vị trí sẽ bị xáo trộn, dẫn đến việc mở hàng vô hạn.