100 lines
2.2 KiB
Go
100 lines
2.2 KiB
Go
package account
|
||
|
||
import (
|
||
"encoding/json"
|
||
"log"
|
||
"time"
|
||
|
||
"git.apinb.com/quant/strategy/internal/core/trade"
|
||
"git.apinb.com/quant/strategy/internal/models"
|
||
)
|
||
|
||
var (
|
||
BaseAssets string
|
||
PlanKeyName string
|
||
IsDebug bool = false
|
||
UpdHistory bool = false
|
||
)
|
||
|
||
// 根据基本币,监控帐号可用资金变动,仓位,以及最近7天的交易情况
|
||
func NewAccountByBinance(base string, p *trade.Spec, debug, updHistory bool) {
|
||
BaseAssets = base
|
||
PlanKeyName = p.PlanKeyName
|
||
IsDebug = debug
|
||
UpdHistory = updHistory
|
||
|
||
trade.NewAccounts()
|
||
|
||
if p.Api.Exchange == "BINANCE" {
|
||
//trade.InitExchange_Binance(p.BinanceFuturesClient, p.AllowSymbols, p.StrategyConf.Leverage)
|
||
InitAccount_Binance(p)
|
||
}
|
||
|
||
go WatchPositions(p)
|
||
if UpdHistory {
|
||
// go WatchHistory(p)
|
||
}
|
||
}
|
||
|
||
func InitAccount_Binance(p *trade.Spec) {
|
||
var err error
|
||
ac, err := p.BinanceClient.GetFuturesAccountBalance()
|
||
if err != nil {
|
||
log.Println(err)
|
||
return
|
||
} else {
|
||
trade.AccountsAssets.Set(BaseAssets, ac[BaseAssets])
|
||
}
|
||
|
||
log.Println("WatchAccount", PlanKeyName, BaseAssets, "Account Equity:", ac[BaseAssets].AccountEquity, "Account Available:", ac[BaseAssets].Available)
|
||
|
||
orders, err := trade.RefreshPositions(p)
|
||
if err != nil {
|
||
log.Println(err)
|
||
return
|
||
}
|
||
log.Println("Positions Number", len(orders))
|
||
}
|
||
|
||
func WatchAccount_Binance(p *trade.Spec) {
|
||
for {
|
||
var err error
|
||
ac, err := p.BinanceClient.GetFuturesAccountBalance()
|
||
if err != nil {
|
||
log.Println(err)
|
||
} else {
|
||
trade.AccountsAssets.Set(BaseAssets, ac[BaseAssets])
|
||
log.Println("WatchAccount", PlanKeyName, BaseAssets, "Account Equity:", ac[BaseAssets].AccountEquity, "Account Available:", ac[BaseAssets].Available)
|
||
}
|
||
|
||
time.Sleep(1 * time.Hour)
|
||
}
|
||
}
|
||
|
||
func WatchPositions(p *trade.Spec) {
|
||
for {
|
||
orders, err := trade.RefreshPositions(p)
|
||
if err != nil {
|
||
log.Println(err)
|
||
}
|
||
|
||
if IsDebug {
|
||
jsonBytes, _ := json.Marshal(orders)
|
||
log.Println("WatchPositions", string(jsonBytes))
|
||
}
|
||
|
||
time.Sleep(2 * time.Second)
|
||
}
|
||
}
|
||
|
||
func WatchHistory(p *trade.Spec) {
|
||
for {
|
||
trade, pl := trade.RefreshHistoryTotal(p)
|
||
models.UpdateTotalTrans(PlanKeyName, trade, pl)
|
||
if IsDebug {
|
||
log.Println("WatchHistory", "Trade Number", trade, "Trade RealizedPnl", pl)
|
||
}
|
||
time.Sleep(10 * time.Minute)
|
||
}
|
||
}
|