func TestCalculateNeededArb(t *testing.T) { // Test without FX neededArbTests := []neededArb{ {500, -500, .02}, {-500, 500, -.01}, {500, 500, .005}, {-100, -100, .005}, {0, 0, .005}, {-250, 250, -.0025}, {250, -250, .0125}, {100, -100, .008}, {0, -200, .008}, {-200, 0, .002}, {-100, 100, .002}, } buyExg := okcoin.New("", "", "", "usd", 1, 0.002, 500, 0) buyExg.SetMaxPos(500) sellExg := bitfinex.New("", "", "", "usd", 2, 0.001, 500, 0) sellExg.SetMaxPos(500) for _, neededArb := range neededArbTests { buyExg.SetPosition(neededArb.buyExgPos) sellExg.SetPosition(neededArb.sellExgPos) arb := calcNeededArb(buyExg, sellExg) if math.Abs(arb-neededArb.arb) > .000001 { t.Errorf("For %.4f / %.4f expect %.4f, got %.4f\n", buyExg.Position(), sellExg.Position(), neededArb.arb, arb) } } // Test with FX neededArbTests = []neededArb{ {500, -500, .03}, {-500, 500, 0}, {500, 500, .015}, {-100, -100, .015}, {0, 0, .015}, {-250, 250, .0075}, {250, -250, .0225}, {100, -100, .018}, {0, -200, .018}, {-200, 0, .012}, {-100, 100, .012}, } buyExg = okcoin.New("", "", "", "cny", 1, 0.002, 500, 0) buyExg.SetMaxPos(500) sellExg = bitfinex.New("", "", "", "usd", 2, 0.001, 500, 0) sellExg.SetMaxPos(500) for _, neededArb := range neededArbTests { buyExg.SetPosition(neededArb.buyExgPos) sellExg.SetPosition(neededArb.sellExgPos) arb := calcNeededArb(buyExg, sellExg) if math.Abs(arb-neededArb.arb) > .000001 { t.Errorf("For %.4f / %.4f expect %.4f, got %.4f\n", buyExg.Position(), sellExg.Position(), neededArb.arb, arb) } } }
// Initialize exchanges func setExchanges() { exchanges = []exchange.Interface{ bitfinex.New(os.Getenv("BITFINEX_KEY"), os.Getenv("BITFINEX_SECRET"), cfg.Sec.Symbol, "usd", 1, 0.001, cfg.Sec.AvailShortBitfinex, cfg.Sec.AvailFundsBitfinex), okcoin.New(os.Getenv("OKUSD_KEY"), os.Getenv("OKUSD_SECRET"), cfg.Sec.Symbol, "usd", 1, 0.002, cfg.Sec.AvailShortOKusd, cfg.Sec.AvailFundsOKusd), okcoin.New(os.Getenv("OKCNY_KEY"), os.Getenv("OKCNY_SECRET"), cfg.Sec.Symbol, "cny", 1, 0.000, cfg.Sec.AvailShortOKcny, cfg.Sec.AvailFundsOKcny), btcchina.New(os.Getenv("BTC_KEY"), os.Getenv("BTC_SECRET"), cfg.Sec.Symbol, "cny", 1, 0.000, cfg.Sec.AvailShortBTC, cfg.Sec.AvailFundsBTC), } for _, exg := range exchanges { log.Printf("Using exchange %s with priority %d and fee of %.4f", exg, exg.Priority(), exg.Fee()) } currencies = append(currencies, "cny") }
// Tester program for displaying Bitfinex book data to terminal package main import ( "bitfx/bitfinex" "bitfx/exchange" "fmt" "log" "os" "os/exec" ) var bf = bitfinex.New("", "", "ltc", "usd", 0, 0, 0, 0) func main() { filename := "bfbook.log" logFile, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { log.Fatal(err) } log.SetOutput(logFile) log.Println("Starting new run") bookChan := make(chan exchange.Book) if book := bf.CommunicateBook(bookChan); book.Error != nil { log.Fatal(book.Error) } inputChan := make(chan rune) go checkStdin(inputChan)