Guest User

Untitled

a guest
Nov 7th, 2023
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.77 KB | Source Code | 0 0
  1. package main
  2.  
  3. import (
  4.     "errors"
  5.     "fmt"
  6.     "log"
  7.     "crypto/tls"
  8.     "golang.org/x/net/context"
  9.     "google.golang.org/grpc"
  10.     "google.golang.org/grpc/credentials"
  11.     "./consors"
  12.     "github.com/davecgh/go-spew/spew"
  13.     "github.com/DavidGamba/go-getoptions"
  14.     "github.com/PuerkitoBio/goquery"
  15.  
  16.     "os"
  17.     "strconv"
  18.     "strings"
  19.     "time"
  20. )
  21.  
  22. func main() {
  23.     // Parse options
  24.     var exchange string
  25.     var authtoken string
  26.         opt := getoptions.New()
  27.     opt.StringVar(&exchange, "exchange", "TRG")
  28.     opt.StringVar(&authtoken, "token", "foobar")
  29.     _, _ = opt.Parse(os.Args[1:])
  30.  
  31.     // Setup TLS parameters
  32.     // The certificate has to be CN=localhost but we don't check the chain!
  33.     tlsconfig := tls.Config{ServerName: "localhost", InsecureSkipVerify: true}
  34.     creds := credentials.NewTLS(&tlsconfig)
  35.  
  36.     // Dial in blocking mode to check and check for errors
  37.     conn, err := grpc.Dial(":40443", grpc.WithTransportCredentials(creds), grpc.WithBlock(), grpc.WithTimeout(5*time.Second))
  38.     if err != nil {
  39.         log.Fatalf("Could not connect: %s", err)
  40.     }
  41.     defer conn.Close()
  42.  
  43.     // Authenticate to get token
  44.     token := login(conn, authtoken)
  45.     if token == `` {
  46.         log.Fatal("Could not authenticate")
  47.     }
  48.  
  49.     myaccounts := get_accounts(conn, token)
  50.     var grandtotal float64
  51.     for _, account := range myaccounts {
  52.         grandtotal += get_balance(conn, token, account)
  53.         grandtotal += get_depot_value(conn, token, account, exchange)
  54.     }
  55.  
  56.     fmt.Println(int64(grandtotal))
  57.     os.Exit(0)
  58. }
  59.  
  60. func exchange_exists (conn *grpc.ClientConn, token string, id string) (bool) {
  61.     client := consors_tapi.NewStockExchangeServiceClient(conn)
  62.     atoken := consors_tapi.AccessTokenRequest{AccessToken: token}
  63.     result, err := client.GetStockExchanges(context.Background(), &atoken)
  64.     if err != nil { return false }
  65.  
  66.     spew.Dump(result.StockExchangeInfos)
  67.     for _, exchange := range result.StockExchangeInfos {
  68.         if exchange.StockExchange.Id == id {
  69.             return true
  70.         }
  71.     }
  72.  
  73.     return false
  74. }
  75.  
  76. func get_balance (conn *grpc.ClientConn, token string, account *consors_tapi.TradingAccount) (float64) {
  77.     client := consors_tapi.NewAccountServiceClient(conn)
  78.     tar := consors_tapi.TradingAccountRequest{AccessToken: token,
  79.                         TradingAccount: account,
  80.                     }
  81.     streamer, err := client.StreamTradingAccount(context.Background(), &tar)
  82.     if err != nil { return -1 }
  83.  
  84.     for {
  85.         data, _ := streamer.Recv()
  86.         if data.Balance > 0 {
  87.             return data.Balance
  88.             break
  89.         }
  90.     }
  91.  
  92.     return -1
  93. }
  94.  
  95. func get_depot_value (conn *grpc.ClientConn, token string, account *consors_tapi.TradingAccount, exchange string) (float64) {
  96.     client := consors_tapi.NewDepotServiceClient(conn)
  97.     atoken := consors_tapi.TradingAccountRequest{AccessToken: token,
  98.                              TradingAccount: account}
  99.     streamer, err := client.StreamDepot(context.Background(), &atoken)
  100.     if err != nil {
  101.         return -1
  102.     }
  103.  
  104.     var total float64
  105.     data, err := streamer.Recv()
  106.     for _, n := range data.Entries {
  107.         position, err := get_last_price_parser(conn, token, n.SecurityCode.Code, exchange)
  108.         if err == nil { total = total + (position * n.TotalAmount)}
  109.         if err != nil { log.Printf("Failed to get_last_price for %s: %s\n", n.SecurityCode.Code, err) }
  110.     }
  111.  
  112.     return total
  113. }
  114.  
  115. func get_accounts (conn *grpc.ClientConn, token string) ([]*consors_tapi.TradingAccount) {
  116.     atoken := consors_tapi.AccessTokenRequest{AccessToken: token}
  117.     client := consors_tapi.NewAccountServiceClient(conn)
  118.     accresponse, err := client.GetTradingAccounts(context.Background(), &atoken)
  119.     if err != nil { return nil }
  120.     return accresponse.Accounts
  121. }
  122.  
  123. func login (conn *grpc.ClientConn, secret string) (string) {
  124.     lr := consors_tapi.LoginRequest{Secret: secret}
  125.     client := consors_tapi.NewAccessServiceClient(conn)
  126.     response, err := client.Login(context.Background(), &lr)
  127.     if err != nil { return `` }
  128.     return response.AccessToken
  129. }
Add Comment
Please, Sign In to add comment