Sumber daya yang dimuat... Pemuatan...

Versi baru dari Dynamic Balance

Penulis:Kebaikan, Dibuat: 2018-08-28 12:05:37, Diperbarui: 2019-12-03 17:26:27

Versi baru dari Dynamic Balancewww.fmz.comminggu lalu saya memperkenalkan strategi perdagangan yang sangat efektif dan tinggi pengembalian, yang disebut "strategi keseimbangan dinamis". ini adalah strategi perdagangan yang sangat klasik berasal dari mentor Warren Buffett yang hebat, Benjamin Graham, pernah disebutkan dalam buku <> sebuah model perdagangan di mana saham dan obligasi secara dinamis seimbang.

Strategi asli dapat dilihat di:https://fmzquant.quora.com/Blockchain-Quantitative-Investment-Series-Dynamic-Balance-Strategy

Hari ini, para programmer berpengalaman tim kami telah membuat bagian pengkodean strategi ini lebih singkat dan lebih mudah dimengerti.

var Coin = ''
var Fiat = ''
var RefreshLoop = 0
var Account = ''
var Depth = ''
var Orders = ''
var BuyWeighted = 0
var SellWeighted = 0
var MidPrice = 0
var InitialBalance = exchange.GetAccount().Balance + exchange.GetAccount().Stocks * exchange.GetDepth().Bids[0].Price

function CancelPendingOrders() {
    for (var j = 0; j < Orders.length; j++) {
          exchange.CancelOrder(Orders[j].Id, Orders[j])}
}

function UpdateAll() {
    Account = exchange.GetAccount()
    Depth = exchange.GetDepth()
    Orders = exchange.GetOrders()
    //Log("UpdateAll")
}

function UpdatePrice() {
    //MidPrice = (Depth.Asks[0].Price+Depth.Bids[0].Price)/2
    BuyWeighted = Depth.Asks[0].Price * (1+SPREAD/100)
    SellWeighted = Depth.Bids[0].Price * (1-SPREAD/100)
    //Log("UpdatePrice")
}

function onTick(){
    // Refresh account balance and market data
    //Log("UpdateAll")
    UpdateAll()
    var Buy = Depth.Asks[0].Price
    var Sell = Depth.Bids[0].Price
    
    // Calculate the weighted price
    //Log("UpdatePrice")
    UpdatePrice()
    
    // Check current order that exist
    if (Orders.length==2){
        return
    }
    if (Orders.length>2){
        CancelPendingOrders()
    }
    // Processing a single order
    if (Orders.length==1){
        Order = Orders[0]
        Price=Order.Price
        if (Order.Type==0){
            if (Price/(1-SPREAD/100) > Sell){
                return
            }else{
                CancelPendingOrders()
                UpdateAll()
            }
        }else{
            if (Price/(1+SPREAD/100) < Buy){
                return
            }else{
                CancelPendingOrders()
                UpdateAll()
            }
        }
    }
    
    // Calculate the value of the position held
    var ValueByBuy = Account.Stocks * BuyWeighted
    var ValueBySell = Account.Stocks * SellWeighted
    Log(Coin + " Value By Weighted Ask - " + Fiat +" Balance : " + (ValueByBuy-Account.Balance))
    Log(Fiat + " Balance - " + Coin +" Value By Weighted Bid : " +(Account.Balance-ValueBySell))
    //Log(ValueByBuy)
    //Log(ValueBySell)
    
    // The value of the currency is higher than the price of coin. sell the coin.
    if (ValueByBuy > Account.Balance){
        ToBeSold = (ValueByBuy - Account.Balance)/2/BuyWeighted
        if (ToBeSold > AMOUNT_MINIMUM){
            ToBeSold = _N(Math.floor(ToBeSold / AMOUNT_INCREMENT) * AMOUNT_INCREMENT)
            Log("Will be sold " + Coin + " Quantity:" + ToBeSold)
            exchange.Sell(BuyWeighted,ToBeSold)
        }
    }
    // The value of the currency is smaller than the coin. buy the coin.
    if (ValueBySell < Account.Balance){
        ToBeBought = (Account.Balance - ValueBySell)/2/SellWeighted
        if (ToBeBought > AMOUNT_MINIMUM){
            ToBeBought = _N(Math.floor(ToBeBought / AMOUNT_INCREMENT) * AMOUNT_INCREMENT)
            Log("Will be brought " + Coin + " Quantity:" + ToBeBought)
            exchange.Buy(SellWeighted,ToBeBought)
        }
    }
    Log(Fiat + " Quantity:" + Account.Balance)
    Log(Coin + " Quantity:" + Account.Stocks)
    
    RefreshLoop = RefreshLoop+1
    if (RefreshLoop>60) {
        var Profit = _N(Account.Stocks*Sell) + _N(Account.Balance) - _N(InitialBalance)
        LogProfit(Profit)
        RefreshLoop = 0
    }
}
function main(){
    var Pair = exchange.GetCurrency()
    LogReset()
    LogProfitReset()
    LogProfit(0)
    UpdateAll()
    CancelPendingOrders()
    Coin = Pair.split("_")[0]
    Fiat = Pair.split("_")[1]
    while (true){
        try {
            onTick()
        } catch (err) {
            Log(err)
        }
        Sleep(DELAY*1000)
    }
}

Lebih banyak

Penemu Kuantitas - Mimpi KecilBagus sekali!