func main() { info := gofighter.TradingInfo{ Account: ACCOUNT, Venue: VENUE, Symbol: SYMBOL, ApiKey: KEY, BaseURL: BASE_URL, WebSocketURL: WS_URL, } // The market and position will be watched by 2 goroutines. In order to get info // back from them, we create 2 channels that we can use to request the current // state from them. We request the state by sending... a channel, of course. market_queries := make(chan chan gofighter.Market) go gofighter.MarketWatch(info, market_queries) position_queries := make(chan chan gofighter.Position) go gofighter.PositionWatch(info, position_queries) for { market := gofighter.GetMarket(market_queries) // Behind the scenes, this sends a channel // and gets the response through it. // The .Last member of the quote gets set to -1 if not present in the JSON from the server, // which usually means there is no activity yet... if market.Quote.Last == -1 { fmt.Printf("Waiting for market action to start...\n") time.Sleep(1 * time.Second) continue } pos := gofighter.GetPosition(position_queries) // This works like .GetMarket() above, but for position pos.Print(market.Quote.Last) // The argument here is the price to use when calculating NAV var order gofighter.ShortOrder order.OrderType = "limit" order.Qty = 50 + rand.Intn(50) // Buy if short. Sell if long. If neither, flip a coin... if pos.Shares > 0 || (pos.Shares == 0 && rand.Intn(2) == 0) { order.Direction = "sell" order.Price = market.Quote.Last + 50 } else { order.Direction = "buy" order.Price = market.Quote.Last - 50 } if order.Price < 0 { order.Price = 0 } go order_and_cancel(info, order) time.Sleep(500 * time.Millisecond) } }
func main() { // The following assumes game_start.exe has already been called, and thus that // there exists a file in the /gm/ directory which contains info about the level. info := gofighter.GetUserSelection("known_levels.json") market_queries := make(chan chan gofighter.Market) go gofighter.MarketWatch(info, market_queries) // How this works: the goroutine MarketWatch uses a WebSocket to keep track of // the market, and when we send a channel to it via its input channel, it sends // a copy of the market back to us along the channel we provided. for { market := gofighter.GetMarket(market_queries) // Behind the scenes, this sends a // one-time channel to the goroutine fmt.Printf(time.Now().Format("2006-01-02 15:04:05 ... ")) market.Print() time.Sleep(2 * time.Second) } }