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 <
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)
}
}
Penemu Kuantitas - Mimpi KecilBagus sekali!