संसाधन लोड हो रहा है... लोड करना...

Hedge_BTC/ETH डेमो

लेखक:आविष्कारक मात्रा - छोटे सपने, दिनांक: 2017-07-24 17:40:08
टैगःहेज

बीटीसी और ईटीएच के लिए विविधतापूर्ण हेजिंग विचार परीक्षण मूल्य अनुपात के आधार पर चार्ट बनाएं, विश्लेषण करें, मूल्य अनुपात में बदलाव, लाभ की तलाश करें। एक छात्र ने कहा, "हमने एक बार फिर से एक नई रणनीति बनाई है, और हम इसे लागू करने के लिए तैयार हैं।

लिटिलड्रीम द्वारा


/*exchanges
A : BTC
B : ETH
*/

var RateUpDateTime = new Date().getTime()
var UpDateCyc = 60 * 60 * 1000
var SumInCyc = 0
var AddCounts = 1
var RateArray = []

var BTC_hold_amount = 0
var ETH_hold_amount = 0

var IDLE = 0
var PLUS = 1
var STATE = IDLE

var fee_btc = {
    buy : 0.2,    // 0.2 % , 千分之四
    sell : 0.2
}

var fee_eth = {
    buy : 0.2,
    sell : 0.2
}

var ModeStr = ["BOLL", "SMA"][Mode]

function CalcPriceForNoFee(price, fee, type){
    if(type == "buy"){
        return price * (1 - fee / 100)
    }else if(type == "sell"){
        return price * (1 + fee / 100)
    }
}

function loop(nowTime){
    var depthA = exchanges[0].GetDepth()
    var depthB = exchanges[1].GetDepth()
    var sma120 = null
    var sma10 = null
    
    var boll = null
    
    if(!depthA || !depthB || depthA.Asks.length == 0 || depthA.Bids.length == 0 || depthB.Asks.length == 0 || depthB.Bids.length == 0){
        return    
    }
    
    var Rate = CalcPriceForNoFee((depthA.Bids[0].Price + depthA.Asks[0].Price) / 2, 0.2, "buy") / CalcPriceForNoFee((depthB.Bids[0].Price + depthB.Asks[0].Price) / 2, 0.2, "sell") 
        
    if(nowTime - RateUpDateTime > UpDateCyc){
        RateArray.push(Rate)
        
        $.PlotLine("avgRate", RateArray[RateArray.length - 2], RateUpDateTime)
        
        if(RateArray.length > 60){
            if(ModeStr == "SMA"){
                sma120 = talib.SMA(RateArray, 60)
                sma10 = talib.SMA(RateArray, 10)
            
                $.PlotLine("sma120", sma120[sma120.length - 2], RateUpDateTime)
                $.PlotLine("sma10", sma10[sma10.length - 2], RateUpDateTime)
            }else if(ModeStr == "BOLL"){            
                boll = TA.BOLL(RateArray, 20, 2.5)
                $.PlotLine("up", boll[0][boll[0].length - 2], RateUpDateTime)
                $.PlotLine("down", boll[2][boll[2].length - 2], RateUpDateTime)
            }
        }
        
        RateUpDateTime += UpDateCyc
        SumInCyc = 0
        AddCounts = 1
    }else{
        SumInCyc += Rate
        AddCounts++
        
        RateArray[RateArray.length - 1] = (SumInCyc / AddCounts)
        
        $.PlotLine("avgRate", RateArray[RateArray.length - 1], RateUpDateTime)
        if(RateArray.length > 60){
            if(ModeStr == "SMA"){
                sma120 = talib.SMA(RateArray, 60)
                sma10 = talib.SMA(RateArray, 10)
            
                $.PlotLine("sma120", sma120[sma120.length - 1], RateUpDateTime)
                $.PlotLine("sma10", sma10[sma10.length - 1], RateUpDateTime)
            }else if(ModeStr == "BOLL"){          
                boll = TA.BOLL(RateArray, 20, 2.5)
                $.PlotLine("up", boll[0][boll[0].length - 1], RateUpDateTime)
                $.PlotLine("down", boll[2][boll[2].length - 1], RateUpDateTime)
            }
        }
    }
    
    if(ModeStr == "SMA"){
        if(STATE == IDLE && (sma120 && sma10) && sma120[sma120.length - 2] > sma10[sma10.length - 2] && sma120[sma120.length - 1] < sma10[sma10.length - 1]){
            // PLUS
            var SellInfo = $.Sell(exchanges[1], 5)
            var sumMoney = SellInfo.price * SellInfo.amount
            var amount = _N(sumMoney / depthA.Asks[0].Price, 2)
            var BuyInfo = $.Buy(exchanges[0], amount)
        
            ETH_hold_amount = SellInfo.amount
            BTC_hold_amount = amount
            STATE = PLUS
            // throw "stop"  // ceshi
        }
    
        if(STATE == PLUS && (sma120 && sma10) && sma120[sma120.length - 2] < sma10[sma10.length - 2] && sma120[sma120.length - 1] > sma10[sma10.length - 1]){
            // COVER
            var BuyInfo = $.Buy(exchanges[1], ETH_hold_amount)
            var SellInfo = $.Sell(exchanges[0], BTC_hold_amount)
        
            ETH_hold_amount = 0
            BTC_hold_amount = 0
            STATE = IDLE
            Log(exchanges[0].GetAccount(), exchanges[1].GetAccount())
        }
    }
}




function main() {
    var AccountA = exchanges[0].GetAccount()
    var AccountB = exchanges[1].GetAccount()
    
    Log("AccountA:", AccountA, "AccountB:", AccountB)
    
    while(true){
        var beginTime = new Date().getTime()
        loop(beginTime)
        Sleep(500)
    }

}

संबंधित

अधिक

dayTrader2018समस्या यह है कि यह फ़ंक्शन PlotLine कहाँ से आता है और इसके लिए क्या काम करता है

कुबोयक्या आप लिखना चाहते हैं?

कुबोयक्या आप लिखना चाहते हैं?

लोगासपने में वीरता

आविष्कारक मात्रा - छोटे सपनेक्वेरी रेखांकन वर्ग पुस्तकालय क्वेरी टेम्पलेट में निर्यात फ़ंक्शन, टेम्पलेट में कोड को लागू करना।

आविष्कारक मात्रा - छोटे सपनेमुख्य रूप से यह आसान है, बस कुछ सरल वाक्य लिखें और देखें कि क्या यह संभव है, उदाहरण के लिए।