리소스 로딩... 로딩...

위안부 지속가능한 다화폐 헤지핑 전략 원본 (多超跌做空超) 4월 13일 최신 중단 손실 모듈

저자:초목, 날짜: 2020-04-04 21:24:43
태그:바이낸스

이 정책의 요금 업그레이드는 이제 사용 가능하며, 위크톡 wangweibing_ustb를 추가하여 자세히 알아보십시오.

중요한 내용!

  • 이 연구결과에 대해 더 자세히 알아보도록 하겠습니다.https://www.fmz.com/digest-topic/5294■ 전략 원리, 위험, 거래의 필터링 방법, 매개 변수 설정, 개설 및 총 자본 비율 등 다양한 문제를 이해하십시오.
  • 이전 연구 보고서는 다운로드하여 자신의 연구 환경에 업로드해야 합니다. 실제 변경은 다시 실행됩니다. 이 보고서를 보셨다면 최근 최신 주 데이터를 업데이트했습니다.
  • 로봇이 오래 멈춰서 다시 시작하면 데이터를 다시 설정하거나 새로운 로봇을 만들어야 합니다.
  • 전략은 직접적으로 재검토할 수 없고 연구 환경에서 재검토해야 합니다.
  • 전략 코드 및 기본 매개 변수는 연구용으로만 사용되며, 실제 디스크 운영은 신중해야 하며, 자신의 연구 기준으로 매개 변수를 결정해야 합니다.위험성
  • 전략은 매일 수익을 창출할 수 없습니다. 역사를 살펴보면, 1~2주 간 간격 및 역퇴는 정상이며, 올바른 대우가 필요합니다.
  • 코드는 공개되어 있으며, 스스로 수정할 수 있으며, 어떤 문제가 있으면 댓글 피드백을 환영하며, 발명자 바이안 워크샵에 가입하는 것이 좋습니다 (연구 보고서에 가입하는 방법이 있습니다) 업데이트 알림을 받을 수 있습니다.
  • 전략은 오직 이안 선물만을 지원하며, 전체 포지션 모드에서 동작해야 하며, 쌍방향 포지션을 설정하지 마십시오!!, 로봇을 만들 때 기본 거래 쌍과 K 라인 주기를 사용할 수 있습니다.
  • 다른 전략과 수동 조작이 충돌하고 있으므로 주의가 필요합니다.
  • 실제 디스크 운영은 해외 호스트가 필요합니다. 테스트 단계에서는 플랫폼에서 알리 클라우드 홍콩 서버를 한 번의 클릭으로 렌터 할 수 있습니다. 자신의 월 전체 임대료는 더 저렴합니다.https://www.fmz.com/bbs-topic/2848)
  • 아이의 선물과 현금은 별도로 추가해야 합니다.Futures_Binance
  • 이 전략은 재시작에 영향을 미치지 않지만 새로운 로봇은 역사 데이터를 다시 기록합니다.
  • 정책은 사용자 피드백에 따라 업데이트 될 수 있습니다. 직접 Ctrl + A 복사 코드 덮어 저장 (일반적으로 파라미터를 업데이트하지 않습니다) 로봇을 다시 시작하면 최신 코드가 사용할 수 있습니다.
  • 전략은 처음 거래하지 않고, 처음 시작할 때 데이터를 기록하고, 시장의 변화를 기다려야 거래가 가능합니다.

4.16 업데이트

손상을 멈추는 버그가 변경되었습니다.

기본 변수를 변경했습니다:

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

4.13 업데이트

스톱_loss 설정은 0.8로, 자금이 초기 자금의 80% 이하에 도달하면 스톱_loss, 모든 포지션을 비어, 중지 전략을 나타냅니다. 전략이 실행되면 스톱_loss를 1보다 크게 설정할 수 있습니다. 예를 들어 1000에서 1500까지, 스톱_loss 설정을 1.3로 설정하면 1300원까지 스톱 손실로 되돌릴 수 있습니다. 이 매개 변수를 설정하는 것은 매우 작습니다. 모든 사람들이 이러한 스톱 손실을 사용하여 손실을 증가시킬 위험이 있습니다. 초기 자금이 상태에서있는 init_balance 필드, 현금 등 작업이 영향을 줄 수 있습니다.

Max_diff 및 Min_diff는 자신의 거래 가치, 총자금 및 위험 부담 능력에 따라 스스로 결정해야 할 정도의 편차를 제한합니다.

간단한 예로, 20개의 동전을 거래하는 경우, 동전 중 하나의 가치가 0.4의 오차로 상승하여 거래가 중단되고, 다른 동전의 가격은 변하지 않고, 무역_값의 7배를 잃습니다.

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

4.10 업데이트

정책 코드를 로컬 정책으로 복사하고, 바로 저장을 덮고, 다시 시작할 수 있습니다.

아래 선물은 빈 오버 아웃 오버 하락 전략 중요 노트북 코드 주소:https://www.fmz.com/bbs-topic/5364

원래 전략 도토리 지수 = mean ((sum)) 도토리 가격/비트코인 가격) / ((도토리 초기 가격/비트코인 초기 가격));; 가장 큰 문제는 최신 가격과 전략 시작 초기 가격의 대조이며, 시간이 지남에 따라 점점 더 벗어날 것입니다. 한 코인은 많은 포지션을 보유 할 수 있으며, 위험이 높으며, 결국 많은 포지션을 보유하게 될 것입니다. 위험과 탈퇴를 증가시킵니다.

최신 동전 지수 = mean ((sum ((((동전 가격/비트코인 가격) /EMA ((동전 가격/비트코인 가격))), 즉 평선 가격과 비교하여 최신 가격 변화를 추적할 수 있으며, 더 유연하며, 재검토를 통해 전략 보유를 줄이고 탈퇴를 줄인 것으로 나타났습니다. 더 안정적입니다. 가장 중요한 것은 원래 전략이 몇 개의 비정상적인 거래 쌍을 추가하면 위험성이 매우 높고 폭발 가능성이 높지만 지금은 거의 영향을받지 않습니다.

원활한 업그레이드를 위해, 그 중 두 가지 파라미터는 전략 코드 첫 두 줄에 쓰여져 있으며, 필요에 따라 변경됩니다.

알파 = 0.04 지수 이동 평형의 알파 매개 변수, 설정될수록 큰 기준 가격 추적이 더 민감하고 거래가 적어지면 최종 보유도 낮아지고, 레버리지를 낮추지만 수익을 줄이고 최대 리드백을 낮추고, 트레이드를 증가시킬 수 있습니다. Update_base_price_time_interval = 30*60 기준값을 한 번 업데이트하는 시간이 더 오래되면, 단위초, 알파 파라미터와 관련이 있으며, 알파 설정이 작을수록 이 간격이 작을 수 있습니다.

만약 당신이 이 글을 읽고 모든 통화들을 거래하고 싶다면 여기 목록이 있습니다.ETH,BCH,XRP,EOS,LTC,TRX,ETC,LINK,XLM,ADA,XMR,DASH,ZEC,XTZ,BNB,ATOM,ONT,IOTA,BAT,VET,NEO,QTUM,IOST

위크소크 그룹에 가입하여 위크소크 대전에 참여하여 업데이트를 받으십시오.

다음의 마이크로 신호를 추가하면 동전 안에 대한 응답이 자동으로 그룹에 끌립니다:

https://www.fmz.comimg

전략적 원칙

카카오-비트코인 가격 인덱스보다 높은 가격으로 공허하게 할 수 있으며, 인덱스보다 낮은 가격으로 할 수 있으며, 오차가 커질수록 포지션이 커집니다. 이 전략은 BTC로 비대칭 포지션을 헤지하지 않고 BTC를 거래 쌍으로 추가 할 수 있습니다. 최근 두 달 동안의 성과 (약 3배 약 레버링, 데이터 업데이트 4.8):img

전략적 논리

1. 시장 및 계정 보유를 업데이트하고, 첫 번째 실행은 초기 가격을 기록합니다 (새로 추가된 화폐는 가입 시점에 따라 계산됩니다) 2. 지수를 업데이트합니다. 지수는 币-비트코인 가격 지수 = mean ((sum)) 币 가격/비트코인 가격) / ((币 초기 가격/비트코인 초기 가격)) 3. 오차 지수 판단에 따라 더 많은 공백을 수행하고 오차 크기에 따라 포지션을 판단합니다. 4. 주문을 하려면, 다음 주문 양은 아이스 산이 위탁하여 결정되며, 상대 가격에 따라 거래됩니다.아래 명령어 즉시 취소 (그래서 많은 취소 실패 문자를 볼 수 있습니다 400: {code:-2011,??msg:Unknown order sent.}, 정상 현상) 5.再次循环

상태 에 있는 레버리지는 보증금의 비중이 이미 사용되고 있으며, 새로운 입장을 충족시키기 위해 낮은 수준을 유지해야 한다는 것을 나타냅니다.

전략 매개 변수

img

  • 트레이드_시뮬러: 거래하는 화폐, 연구 플랫폼에 따라 직접 필터링을 필요로하는 화폐, BTC에 가입 할 수 있습니다.
  • 트레이드_밸류 (Trade_value): 동전 가격 (BTC 평가) 은 지수에서 1%의 오차에 따라 가치를 보유해야 하며, 자신의 투입 총 자본과 위험 선호도에 따라 결정해야 하며, 총 자본의 3-10%로 설정하는 것이 좋습니다. 연구 환경에 대한 리버리지 크기를 재검토하면, 트레이드_밸류는 Adjust_value보다 작을 수 있습니다. 예를 들어 Adjust_value의 절반, 즉 지수에서 2%의 오차에 해당하는 보유 가치입니다.
  • Adjust_value: 계약값 (USDT 가격) 의 오차값 조정. 지표가 오차하면 거래가 시작됩니다. * Trade_value - 현재 보유 > Adjust_value, 즉 목표 보유와 현재 보유의 차이는 이 값을 초과합니다. 너무 큰 조정이 느리고 너무 작은 거래가 자주, 10보다 낮을 수 없습니다. 그렇지 않으면 최소 거래에 도달하지 못할 것입니다. Trade_value의 40% 이상을 설정하는 것이 좋습니다.
  • Ice_value: 아이스만 위탁 값은 또한 10보다 낮을 수 없습니다. 실제로는 단위로 선택하면 Adjust_value와 Ice_value 중 작은 것을 선택합니다. 더 많은 자금이 설정될 수 있다면 이러한 조정이 상대적으로 더 빠르면 20% 이하의 Adjust_value를 권장합니다. 따라서 5번의 아이스만 거래가 완료 될 수 있습니다. 물론, Trade_value가 크지 않을 때, Ice_value가 설정될 수 있는 상대적으로 큰 경우 1번 또는 2번까지 조정할 수 있습니다.
  • 간격: 회전 휴면시간, 1s와 같은 작은 것을 설정할 수 있지만, 비안 주파수 제한을 초과할 수 없다.
  • 리셋: 역사 데이터를 다시 설정하여 정책 참조의 초기 가격을 현재 가격으로 다시 설정합니다. 일반적으로 설정이 필요하지 않습니다.

전략적 위험

만약 어떤 동전이 독립적인 시장에서 나왔다면, 예를 들어 지수에 비해 몇 배 상승하면, 동전에 대한 많은 공백 포지션이 축적될 것이며, 같은 큰 하락은 전략적으로 많은 일을 하게 할 수도 있다.




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)
    }
}

관련

더 많은

티아고발사@tmbs95 텔레그램에 추가해줘요, 관심 있어요

신부도 마찬가지입니다.이 함수에서, assets.USDT.long_value-assets.USDT.short_value <= 1.1*Trade_value라는 줄이 있습니다.

마이클스이 글은 다른 글과 비교해 볼 수 있습니다.

융자 체인 자본Max_diff와 Min_diff는 0.04과 -0.03이 아닌가요?

공군은 결코 노예가 될 수 없습니다.이 닫힌 원을 햇빛으로 채워주세요.

초목/upload/asset/1b39347a88aa4cff916.jpg

지역급 정량개인이 제안 한 것은 BNB를 제거하는 것이 더 많은 오버락을 할 수 있다는 것입니다. 이 거래는 BNB가 인기를 끌고 싶어하는 거래입니다.

신부도 마찬가지입니다.두가지가 있습니다.

신부도 마찬가지입니다.동전이 독립 시장에서 나오면, 이 공백 균형 설정은 큰 손실을 방지 할 수 있으므로 불균형이 결정되지 않습니다. 단지 헤지프 목록을 여는 방법을 찾을 수 있습니다.

초목웨이빙_우스트브

실제로 코드를 보면 전체 코인의 리테스트 결과가 알 수 있습니다. 걱정할 필요가 없습니다. 가입, 알파 = 0.05, 링크, ETC, BNB를 추가하면, 역사의 초기 리크로드는 3%, 극심 시장 최대 리크로드는 25% 미만, 트레이드_밸류는 3% 안전 과잉 코인을 사용합니다.