Closed rez1dent3 closed 3 years ago
Доброго дня Это можно сделать примерно вот так
client := sdk.NewRestClient("боевой токен")
accountID := "боевой accountID"
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
portfolio, err := client.Portfolio(ctx, accountID)
if err != nil {
log.Fatalln(err)
}
sandboxClient := sdk.NewSandboxRestClient("токен песочницы")
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
sandBoxAccount, err := sandboxClient.Register(ctx, sdk.AccountTinkoff)
if err != nil {
log.Fatalln(err)
}
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
for _, currency := range portfolio.Currencies {
err = sandboxClient.SetCurrencyBalance(ctx, sandBoxAccount.ID, currency.Currency, currency.Balance)
if err != nil {
log.Fatalln(err)
}
}
for _, position := range portfolio.Positions {
err = sandboxClient.SetPositionsBalance(ctx, sandBoxAccount.ID, position.FIGI, position.Balance)
if err != nil {
log.Fatalln(err)
}
}
sandBoxPortfolio, err := sandboxClient.Portfolio(ctx, sandBoxAccount.ID)
if err != nil {
log.Fatalln(err)
}
log.Printf("%+v\n", sandBoxPortfolio)
@necryin спасибо, но меня больше интересуют другие параметры: AveragePositionPrice, AveragePositionPriceNoNkd.
Если проставлять через SetPositionsBalance/SetCurrencyBalance параметров не будет.
{FIGI:BBG000BBGQF1 Ticker:AIR ISIN:US0003611052 InstrumentType:Stock Balance:5 Blocked:0 Lots:5 ExpectedYield:{Currency: Value:0} AveragePositionPrice:{Currency: Value:0} AveragePositionPriceNoNkd:{Currency: Value:0} Name:AAR Corp}
Пробовал через LimitOrder, тоже не вышло. Видимо бэкэнд отдает всегда нулевые параметры для sandbox.
for _, position := range portfolio.Positions {
if position.Lots == 0 { continue }
money := position.AveragePositionPrice.Value * position.Balance
_ = sandboxClient.SetCurrencyBalance(ctx, sandBoxAccount.ID, position.AveragePositionPrice.Currency, money)
_, err = sandboxClient.LimitOrder(ctx, sandBoxAccount.ID, position.FIGI, position.Lots, sdk.BUY, position.AveragePositionPrice.Value)
if err != nil {
log.Fatalln(err)
}
}
Есть ли возможность снепшотить боевое состояние и восстанавливать в тестовом окружении?
@NikitaMelnikov реально сделать такое?
@necryin @NikitaMelnikov, как я понимаю, нет технической возможности?
Техническая возможность есть, но пока что в планы не добавляли
Доброе время суток.
Необходима возможнасть создания снепшотов боевого состояния профиля. Те, сделаю запрос с боевым токеном и сохраняю состояние профиля в объект (акции, облигации, ...). Далее объект разворачиваю уже в песочнице для тестов. Иногда необходимо работать с более реальными данными.
Спасибо за простое и удобное SDK.