Tài nguyên đang được tải lên... tải...

Binance Sustainable Multi-currency Hedging Strategy bản gốc ((Để làm nhiều quá giảm làm không quá cao) 13 tháng 4 mới nhất stop loss module

Tác giả:Cỏ nhỏ, Ngày: 2020-04-04 21:24:43
Tags:Binance

Chính sách này đã được nâng cấp để có thể sử dụng, cộng với WeChat wangweibing_ustb để biết thêm chi tiết.

Nội dung quan trọng!

  • Bạn nên xem nghiên cứu này trước.https://www.fmz.com/digest-topic/5294Bạn có thể tìm hiểu các nguyên tắc chiến lược, rủi ro, cách lọc giao dịch, cách thiết lập các tham số, tỷ lệ đầu tư và tổng vốn.
  • Một báo cáo nghiên cứu trước đây cần phải được tải xuống và tải lên môi trường nghiên cứu của bạn. Thực tế sửa đổi chạy lại. Nếu bạn đã xem báo cáo này, bạn đã cập nhật dữ liệu mới nhất trong tuần gần đây.
  • Robot dừng hoạt động trong một thời gian dài và bắt đầu hoạt động lại, bạn phải cài đặt lại dữ liệu hoặc xây dựng robot mới.
  • Chiến lược không thể được kiểm tra trực tiếp, nó cần phải được kiểm tra trong môi trường nghiên cứu.
  • Các mã chiến lược và các tham số mặc định chỉ dành cho nghiên cứu, thực tế là cần thận trọng, dựa trên nghiên cứu của riêng mình quyết định các tham số.Mối nguy hiểm
  • Chiến lược không thể kiếm được lợi nhuận mỗi ngày, nhìn lại lịch sử, một hoặc hai tuần quay ngược và rút lại là bình thường, cần phải được xử lý đúng cách.
  • Mã là công khai, bạn có thể tự sửa đổi, nếu có bất kỳ vấn đề nào, hãy chào đón phản hồi, tốt nhất là tham gia nhóm tin tức của nhà phát minh (có cách tham gia trong báo cáo nghiên cứu) để được thông báo cập nhật.
  • Chiến lược chỉ hỗ trợ tiền tệ tương lai, cần phải chạy trong chế độ toàn kho, không thiết lập giữ hai chiều!!, khi tạo robot có thể sử dụng các cặp giao dịch mặc định và chu kỳ đường K, chiến lược không sử dụng đường K.
  • Chiến thuật và chiến thuật khác và hoạt động thủ công là xung đột, cần lưu ý
  • Trong giai đoạn thử nghiệm, người dùng có thể thuê máy chủ Ali Cloud Hong Kong trên nền tảng chỉ bằng một cú bấm, thuê riêng hàng tháng rẻ hơn ((còn cấu hình tối thiểu, triển khai hướng dẫn:https://www.fmz.com/bbs-topic/2848)
  • Tiền tương lai và tiền mặt của đồng tiền tệ cần được thêm riêng biệt, tiền tương lai của đồng tiền tệ làFutures_Binance
  • Chiến lược khởi động lại không ảnh hưởng, nhưng robot mới sẽ ghi lại dữ liệu lịch sử.
  • Chính sách có thể được cập nhật dựa trên phản hồi của người dùng, chỉ cần Ctrl + A sao chép mã che phủ lưu (thường không cập nhật các tham số), khởi động lại robot để có thể sử dụng mã mới nhất.
  • Chiến lược không giao dịch khi bắt đầu, lần đầu tiên khởi động cần ghi lại dữ liệu, cần chờ thay đổi thị trường để giao dịch

Nội dung được cập nhật ngày 4.16

Thay đổi lỗi dừng mất mát

Thay đổi tham số mặc định:

var Alpha = 0.001 //指数移动平均的Alpha参数,设置的越大,基准价格跟踪越敏感,最终持仓也会越低,降低了杠杆,但会降低收益,具体需要根据回测结果自己权衡
var Update_base_price_time_interval = 60 //多久更新一次基准价格, 单位秒,和Alpha参数相关,Alpha 设置的越小,这个间隔也可以设置的更小

4.13 Nâng cấp nội dung

Stop_loss được thiết lập là 0.8 cho thấy khi số tiền đạt dưới 80% số tiền ban đầu, dừng lỗ, xóa tất cả các vị trí, dừng chiến lược. Khi chiến lược được chạy, Stop_loss có thể được thiết lập lớn hơn 1 ((khởi động lại hiệu lực), ví dụ từ 1000 đồng đến 1500, Stop_loss được thiết lập là 1.3, sau đó rút lại đến 1300 đồng dừng lỗ. Không muốn dừng lỗ có thể đặt tham số này rất nhỏ. Rủi ro là tất cả mọi người sẽ sử dụng loại dừng lỗ này để tạo ra đạp chân, gia tăng lỗ.

Max_diff và Min_diff giới hạn mức độ sai lệch, cần tự xác định dựa trên giá trị giao dịch, tổng vốn và khả năng chịu rủi ro của mình.

Ví dụ đơn giản, nếu giao dịch 20 đồng tiền, một trong số các đồng tiền tăng dần đến độ sai 0.4 và không còn giao dịch, giá của các đồng tiền khác không thay đổi, mất 7 lần giá trị giao dịch.

var Stop_loss = 0.8 
var Max_diff = 0.4 //当偏差diff大于0.4时,不继续加空仓, 自行设置
var Min_diff = -0.3 //当diff小于-0.3时,不继续加多仓, 自行设置

4.10 Nâng cấp nội dung

Sao chép mã chính sách vào chính sách cục bộ, ngay lập tức lấp trên lưu, khởi động lại máy để có hiệu quả, nhưng vẫn giữ vị trí ban đầu

Địa chỉ mã: Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binance, Binancehttps://www.fmz.com/bbs-topic/5364

Các chiến lược ban đầu của đồng tiền mã hóa chỉ số = mean ((sum)) (((giá tiền mã hóa / giá Bitcoin) / ((giá tiền mã hóa / giá Bitcoin)));; vấn đề lớn nhất là sự tương phản giữa giá mới nhất và giá ban đầu của chiến lược khởi động, với sự phát triển của thời gian, sẽ ngày càng sai lệch, một đồng tiền có thể nắm giữ nhiều vị trí, rủi ro cao, cuối cùng sẽ nắm giữ nhiều vị trí, tăng rủi ro và rút lại.

Chỉ số đồng xu mới nhất = mean ((sum)) = giá đồng xu / giá Bitcoin) / EMA ((giá đồng xu / giá Bitcoin))), tức là so sánh với giá đường trung tuyến, có thể theo dõi sự thay đổi giá gần đây nhất, linh hoạt hơn, kiểm tra lại và tìm thấy đã làm giảm chiến lược nắm giữ, cũng giảm rút lại. ổn định hơn. Quan trọng nhất là chiến lược ban đầu nếu kết hợp một vài cặp giao dịch bất thường, nguy cơ rất cao, có khả năng bùng nổ, nhưng hiện hầu như không bị ảnh hưởng.

Để nâng cấp một cách liền mạch, hai trong số các tham số được viết vào hai dòng đầu tiên của mã chiến lược và thay đổi khi cần thiết.

Alpha = 0.04 Các tham số Alpha của bảng xếp hạng chuyển động chỉ số, càng lớn, giá chuẩn theo dõi càng nhạy cảm, giao dịch càng ít, và cuối cùng nắm giữ cũng sẽ thấp hơn, làm giảm đòn bẩy, nhưng sẽ làm giảm lợi nhuận, làm giảm mức độ khôi phục tối đa, có thể tăng giao dịch, cụ thể cần tự cân nhắc dựa trên kết quả kiểm tra lại. Update_base_price_time_interval = 30 * 60 Thời gian cập nhật giá cơ sở, đơn vị giây, liên quan đến tham số Alpha, khoảng thời gian này có thể được đặt càng nhỏ

Nếu bạn đọc bài viết và muốn giao dịch tất cả các loại tiền tệ, đây là danh sáchETH,BCH,XRP,EOS,LTC,TRX,ETC,LINK,XLM,ADA,XMR,DASH,ZEC,XTZ,BNB,ATOM,ONT,IOTA,BAT,VET,NEO,QTUM,IOST

Tham gia nhóm WeChat để nhận thông tin mới nhất về cuộc chiến Binance

Sau đó, thêm vào tín hiệu nhỏ dưới đây, trả lời Bitcoin Anhui và tự động kéo vào nhóm:

https://www.fmz.comimg

Nguyên tắc chiến lược

Các đồng tiền có giá cao hơn chỉ số giá Bitcoin-Bitcoin sẽ được xóa bỏ, và các đồng tiền có giá thấp hơn chỉ số sẽ bị sai lệch càng nhiều, thì vị trí càng lớn.img

Logic chiến lược

1. cập nhật thị trường và tài khoản lưu trữ, lần đầu tiên chạy sẽ ghi lại giá ban đầu ((tiền tệ mới được thêm vào được tính theo thời gian gia nhập) 2. Cập nhật chỉ số, chỉ số là đồng xu - chỉ số giá Bitcoin = mean(sum((giá đồng xu / giá Bitcoin) / ((giá đồng xu / giá Bitcoin)))) 3. Xác định vị trí dựa trên chỉ số sai lệch 4. Đặt hàng, số lượng đặt hàng được Ice Mountain ủy thác, 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: {code:-2011,msg:Unknown order sent.}, hiện tượng bình thường) 5.再次循环

Đòn bẩy trong hàng trạng thái đại diện cho số tiền bảo hiểm đã được sử dụng và cần được giữ ở mức thấp để đáp ứng các vị trí mở mới

Các tham số chiến lược

img

  • Trade_symbols: đồng tiền giao dịch, cần tự sàng lọc dựa trên nền tảng nghiên cứu của mình, cũng có thể tham gia BTC
  • Trade_value: Giá đồng xu (BTC) có giá trị 1% theo chỉ số sai lệch, cần phải quyết định dựa trên tổng số vốn đầu tư và sở thích rủi ro của mình, nên đặt thành 3-10% tổng số vốn. Có thể xem xét lại kích thước đòn bẩy thông qua môi trường nghiên cứu, Trade_value có thể nhỏ hơn Adjust_value, chẳng hạn như một nửa Adjust_value, tương đương với giá trị giữ sai lệch chỉ số 2%.
  • Adjust_value: Giá hợp đồng (USDT) điều chỉnh giá trị sai lệch. Khi chỉ số sai lệch * Trade_value - hiện tại nắm giữ > Adjust_value, tức là chênh lệch giữa nắm giữ mục tiêu và nắm giữ hiện tại vượt quá giá trị này, giao dịch sẽ bắt đầu. Điều chỉnh quá lớn chậm, giao dịch quá nhỏ thường xuyên, không thể thấp hơn 10, nếu không sẽ không đạt được giao dịch tối thiểu, nên đặt trên 40% giá trị Trade_value.
  • Ice_value: giá trị ủy thác của tảng băng trôi, cũng không thể thấp hơn 10, thực tế chỉ cần chọn Adjust_value với giá trị Ice_value nhỏ hơn, nếu số tiền có thể được thiết lập tương đối lớn hơn, điều chỉnh như vậy sẽ nhanh hơn, nên không thấp hơn 20% của Adjust_value, vì vậy 5 lần tảng băng trôi sẽ hoàn thành giao dịch, tất nhiên, khi Trade_value không lớn, Ice_value có thể được thiết lập tương đối lớn, một hoặc hai lần có thể được điều chỉnh.
  • Interval: Thời gian ngủ tròn, có thể được đặt nhỏ hơn, chẳng hạn như 1s, nhưng không thể vượt quá giới hạn tần số Binance.
  • Reset: Lập lại dữ liệu lịch sử, sẽ đặt lại giá ban đầu của tham chiếu chính sách sang giá hiện tại, thường không cần thiết lập

Rủi ro chiến lược

Lưu ý rằng nếu một đồng tiền ra khỏi thị trường độc lập, ví dụ như tăng nhiều lần so với chỉ số, sẽ tích lũy nhiều vị trí trống trên đồng tiền đó, và sự sụt giảm lớn tương tự cũng sẽ làm cho chiến lược nhiều hơn.




var Alpha = 0.001 //指数移动平均的Alpha参数,设置的越大,基准价格跟踪越敏感,最终持仓也会越低,降低了杠杆,但会降低收益,具体需要根据回测结果自己权衡
var Update_base_price_time_interval = 60 //多久更新一次基准价格, 单位秒,和Alpha参数相关,Alpha 设置的越小,这个间隔也可以设置的更小

//Stop_loss设置为0.8表示当资金达到低于初始资金的80%时,止损,清空所有仓位,停止策略。
//随着策略运行,Stop_loss可以设置大于1(重启生效),比如从1000赚到1500,Stop_loss设置为1.3,则回撤到1300元止损。不想止损可以把这个参数设置的很小。
//风险是大家都用这种止损会形成踩踏,加大亏损。
//初始资金在状态栏的init_balance字段,注意提现等操作会影响,别不小心止损了。
//如果还是怕黑天鹅事件,比如某个币归0等,可以手动提现出来。

var Stop_loss = 0.8 
var Max_diff = 0.4 //当偏差diff大于0.4时,不继续加空仓, 自行设置
var Min_diff = -0.3 //当diff小于-0.3时,不继续加多仓, 自行设置

if(IsVirtual()){
    throw '不能回测,回测参考 https://www.fmz.com/digest-topic/5294 '
}
if(exchange.GetName() != 'Futures_Binance'){
    throw '只支持币安期货交易所,和现货交易所不同,需要单独添加,名称为Futures_Binance'
}
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 update_base_price_time= Date.now()
var assets = {}
var init_prices = {}


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, 
                                                     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, init_balance:0, stop_balance:0, short_value:0, long_value:0, profit:0}

function updateAccount(){ //更新账户和持仓
    exchange.SetContractType('swap')
    var account = exchange.GetAccount()
    var pos = exchange.GetPosition()
    if (!account || !pos){
        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
    } 
    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(trade_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)
    if(assets.USDT.init_balance == 0){
        if(_G('init_balance')){
            assets.USDT.init_balance = _N(_G('init_balance'),2)
        }else{
            assets.USDT.init_balance = assets.USDT.total_balance 
            _G('init_balance',assets.USDT.init_balance)
        }
    }
    assets.USDT.profit = _N(assets.USDT.margin_balance - assets.USDT.init_balance, 2)
    assets.USDT.stop_balance = _N(Stop_loss*assets.USDT.init_balance, 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(trade_symbols.indexOf(coin) < 0){continue}
            if(pos[k].positionSide != 'BOTH'){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(){ //更新指数
    
    if(!_G('init_prices') || Reset){
        Reset = false
        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')
        if(Date.now() - update_base_price_time > Update_base_price_time_interval*1000){
            update_base_price_time = Date.now()
            for(var i=0; i<trade_symbols.length; i++){ //更新初始价格
                init_prices[trade_symbols[i]] = init_prices[trade_symbols[i]]*(1-Alpha)+Alpha*(assets[trade_symbols[i]].ask_price+assets[trade_symbols[i]].bid_price)/(assets.BTC.ask_price+assets.BTC.bid_price)
            }
            _G('init_prices',init_prices)
        }
        var temp = 0
        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(!(trade_symbols[i] in init_prices)){
                Log('添加新的币种',trade_symbols[i])
                init_prices[trade_symbols[i]] = assets[trade_symbols[i]].btc_price / index
                _G('init_prices',init_prices)
            }
            assets[trade_symbols[i]].btc_change = _N(assets[trade_symbols[i]].btc_price/init_prices[trade_symbols[i]],4)
            temp += assets[trade_symbols[i]].btc_change
        }
        index = _N(temp/trade_symbols.length, 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
    }
    assets.USDT.short_value = 0
    assets.USDT.long_value = 0
    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)
        if(trade_symbols.indexOf(coin) < 0){continue}
        if(assets[coin].amount<0){
            assets.USDT.short_value += Math.abs((assets[coin].ask_value+assets[coin].bid_value)/2)
        }else{
            assets.USDT.long_value += Math.abs((assets[coin].ask_value+assets[coin].bid_value)/2)
        }
        assets.USDT.short_value = _N(assets.USDT.short_value,0)
        assets.USDT.long_value = _N(assets.USDT.long_value,0)
    }
    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)+1)
        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) //订单会立即撤销
    }
    return 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, 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 stopLoss(){ //止损函数
    while(true){
        if(assets.USDT.margin_balance < Stop_loss*assets.USDT.init_balance && assets.USDT.init_balance > 0){
            Log('触发止损,当前资金:', assets.USDT.margin_balance, '初始资金:', assets.USDT.init_balance)
            Ice_value = 200 //止损的快一些,可修改
            updateAccount()
            updateTick()
            var trading = false //是否正在交易
            for(var i=0; i<trade_symbols.length; i++){
                var symbol = trade_symbols[i]
                if(assets[symbol].ask_price == 0){ continue }
                if(assets[symbol].bid_value >= trade_info[symbol].minQty*assets[symbol].bid_price){
                    trade(symbol, 'sell', assets[symbol].bid_value)
                    trading = true
                }
                if(assets[symbol].ask_value <= -trade_info[symbol].minQty*assets[symbol].ask_price){
                    trade(symbol, 'buy', -assets[symbol].ask_value)
                    trading = true
                }
            }
            Sleep(1000)
            if(!trading){
                throw '止损结束,如果需要重新运行策略,需要调低止损'
            }
        }else{ //不用止损
            return
        }
    }    
}

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,3)
        if(aim_value - assets[symbol].ask_value >= Adjust_value && assets[symbol].btc_diff > Min_diff && assets.USDT.long_value-assets.USDT.short_value <= 1.1*Trade_value){
            trade(symbol,'buy', aim_value - assets[symbol].ask_value)
        }
        if(aim_value - assets[symbol].bid_value <= -Adjust_value && assets[symbol].btc_diff < Max_diff && assets.USDT.short_value-assets.USDT.long_value <= 1.1*Trade_value){
            trade(symbol,'sell', -(aim_value - assets[symbol].bid_value))
        }
    }
}

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

Có liên quan

Thêm nữa

tiagombalsa@tmbs95 Thêm tôi vào điện tín, quan tâm

Cô dâu cũng vậy.Xin vui lòng cho tôi biết, trong hàm onTick ((), có một dòng như thế này, assets.USDT.long_value-assets.USDT.short_value <= 1.1*Trade_value, tôi hiểu rằng nó được thiết lập như vậy để ngăn chặn sự mất cân bằng quá lớn, nhưng giới hạn này có thể ảnh hưởng nghiêm trọng đến tốc độ mở giao dịch.

MikelslWeChat không tìm thấy?

Đầu tư chuỗiMax_diff và Min_diff không phải là 0.04 và -0.03?

Không quân không bao giờ là nô lệ.Hãy cho vòng tròn này một chút ánh sáng mặt trời.

Cỏ nhỏ/upload/asset/1b39347a88aa4cff916.jpg

Số lượng lớp họcMột cá nhân đề nghị làm nhiều quá giảm làm không quá cao chiến lược để loại bỏ BNB, giao dịch này là BNB muốn thu hút sự phổ biến, dự đoán sẽ quá cao; không thể nhìn vào lịch sử bây giờ

Cô dâu cũng vậy.Đó là hai điều.

Cô dâu cũng vậy.Một đồng tiền ra khỏi thị trường độc lập, thiết lập cân bằng nhiều không gian này có thể ngăn ngừa tổn thất lớn, vì vậy quyết định không thể mất cân bằng. Chỉ có thể tìm cách mở danh sách đầu cơ.

Cỏ nhỏNhầm rồi, wangweibing_ustb

izhangsanTrong thực tế, nhìn vào mã, kết quả kiểm tra lại toàn bộ đồng tiền đã được biết, không cần phải lo lắng. Trong khi tham gia, Alpha = 0.05, thêm LINK, ETC, BNB vào, lần khôi phục ban đầu trong lịch sử là 3%, thị trường cực đoan có mức khôi phục tối đa dưới 25%, Trade_Value sử dụng toàn bộ đồng tiền an toàn quá mức 3%.