func TestBaseLists(t *testing.T) { otc := NewOTCLists(tradingdays.FindRecentlyOpened(time.Now())) twselist := NewLists(tradingdays.FindRecentlyOpened(time.Now())) for _, v := range []BaseLists{otc, twselist} { if data, err := v.Get("02"); err == nil { t.Log(len(data)) } else { t.Error(err) } } }
func ExampleStockRealTime_NewFRMSA() { farmsa := NewFRMSA(tradingdays.FindRecentlyOpened(time.Now())) data, _ := farmsa.Get() fmt.Printf("%+v", data.Info) // output: // {Exchange:tse FullName: Name:寶島股價指數 No:FRMSA Ticker:FRMSA.tw Category:tidx.tw} }
func ExampleStockRealTime_NewWeight() { weight := NewWeight(tradingdays.FindRecentlyOpened(time.Now())) data, _ := weight.Get() fmt.Printf("%+v", data.Info) // output: // {Exchange:tse FullName: Name:發行量加權股價指數 No:t00 Ticker:t00.tw Category:tidx.tw} }
func ExampleStockRealTime_NewOTCI() { otc := NewOTCI(tradingdays.FindRecentlyOpened(time.Now())) data, _ := otc.Get() fmt.Printf("%+v", data.Info) // output: // {Exchange:otc FullName: Name:櫃買指數 No:o00 Ticker:o00.tw Category:oidx.tw} }
func ExampleStockRealTime_NewOTC() { otc := NewOTC("8446", tradingdays.FindRecentlyOpened(time.Now())) data, _ := otc.Get() fmt.Printf("%+v", data.Info) // output: // {Exchange:otc FullName:華研國際音樂股份有限公司 Name:華研 No:8446 Ticker:8446.tw Category:32} }
func BenchmarkGet(b *testing.B) { r := NewTWSE("2618", tradingdays.FindRecentlyOpened(time.Now())) for i := 0; i <= b.N; i++ { r.Get() } }
func TestStockRealTime(t *testing.T) { r := NewTWSE("2618", tradingdays.FindRecentlyOpened(time.Now())) t.Log(r.URL()) r.Get() t.Logf("%+v", r) }
func ExampleStockRealTime_NewTWSE() { twse := NewTWSE("2618", tradingdays.FindRecentlyOpened(time.Now())) data, _ := twse.Get() fmt.Printf("%+v", data.Info) // output: // {Exchange:tse FullName:長榮航空股份有限公司 Name:長榮航 No:2618 Ticker:2618.tw Category:15} }
func TestStockRealTime_noData(t *testing.T) { r := NewTWSE("26188", tradingdays.FindRecentlyOpened(time.Now())) _, err := r.Get() if err != errorNotEnoughData { t.Error("Should be \"No Data.\"") } }
func TestStockRealTimeIndexs(*testing.T) { var date = tradingdays.FindRecentlyOpened(time.Now()) weight := NewWeight(date) otc := NewOTCI(date) farmsa := NewFRMSA(date) weight.Get() otc.Get() farmsa.Get() }
func main() { flag.Parse() if flag.NFlag() == 0 { flag.PrintDefaults() os.Exit(0) } var ( datalist []*twse.Data l *twse.Lists o *twse.OTCLists otccatelist []string otcdelta int otclist []string twsecatelist []string twselist []string ) color.NoColor = !*showcolor if *showcatelist { var ( cateTitle = []string{"The same with TWSE/OTC", "OnlyTWSE", "OnlyOTC"} categoryList = twse.NewCategoryList() index int ) for i, cate := range []map[string]string{ categoryList.Same(), categoryList.OnlyTWSE(), categoryList.OnlyOTC(), } { index = 1 fmt.Println(white("---------- %s ----------", cateTitle[i])) for cateNo, cateName := range cate { fmt.Printf("%s\t", fmt.Sprintf("%s%s", green("%s", cateName), yellowBold("(%s)", cateNo))) if index%3 == 0 { fmt.Println("") } index++ } fmt.Println("") } } if *twseCate != "" { l = twse.NewLists(tradingdays.FindRecentlyOpened(time.Now())) for _, v := range strings.Split(*twseCate, ",") { for _, s := range l.GetCategoryList(v) { twsecatelist = append(twsecatelist, s.No) } } } if *otcCate != "" { o = twse.NewOTCLists(tradingdays.FindRecentlyOpened(time.Now())) for _, v := range strings.Split(*otcCate, ",") { for _, s := range o.GetCategoryList(v) { otccatelist = append(otccatelist, s.No) } } } if *twseNo != "" { twselist = strings.Split(*twseNo, ",") } if *otcNo != "" { otclist = strings.Split(*otcNo, ",") } datalist = make([]*twse.Data, len(twselist)+len(twsecatelist)+len(otclist)+len(otccatelist)) for i, no := range append(twselist, twsecatelist...) { datalist[i] = twse.NewTWSE(no, tradingdays.FindRecentlyOpened(time.Now())) } otcdelta = len(twselist) + len(twsecatelist) for i, no := range append(otclist, otccatelist...) { datalist[i+otcdelta] = twse.NewOTC(no, tradingdays.FindRecentlyOpened(time.Now())) } if len(datalist) > 0 { for _, check := range filter.AllList { fmt.Println(yellowBold("----- %v -----", check)) wg.Add(len(datalist)) for _, stock := range datalist { go func(check filter.CheckGroup, stock *twse.Data) { defer wg.Done() runtime.Gosched() if check.CheckFunc(stock) { fmt.Println(prettyprint(stock, check)) } }(check, stock) } wg.Wait() } } }
func TestOTCLists(t *testing.T) { o := NewOTCLists(tradingdays.FindRecentlyOpened(time.Now())) log.Println(o.GetCategoryList("04")) log.Println(o.Get("04")) }
func main() { app := cli.NewApp() app.Name = "twsedaily" app.Usage = "Get daily data and into DB." app.Flags = []cli.Flag{ cli.StringFlag{ Name: "twsecate", Value: "", Usage: "twsecate no", }, cli.StringFlag{ Name: "otccate", Value: "", Usage: "otccate no", }, cli.BoolFlag{ Name: "flushcache", Usage: "clear cache", }, cli.BoolFlag{ Name: "updatefilter", Usage: "update filter", }, } app.Action = func(c *cli.Context) { if c.NumFlags() == 0 { cli.ShowAppHelp(c) os.Exit(0) } flushcache = c.Bool("flushcache") otccate = c.String("otccate") twsecate = c.String("twsecate") updateFilter = c.Bool("updatefilter") } app.Run(os.Args) if flushcache { temppath := utils.GetOSRamdiskPath() utils.NewHTTPCache(temppath, "utf8").FlushAll() log.Println("Clear cache", temppath) } if updateFilter { updateFilterInfo() } recentlyOpened := tradingdays.FindRecentlyOpened(time.Now()) dailyreportdb := tdb.NewDailyReportDB() defer dailyreportdb.Close() stockList := makeStockList(twsecate, otccate, recentlyOpened) wg.Add(len(stockList)) for _, stock := range stockList { go func(stock *twse.Data, recentlyOpened time.Time) { defer wg.Done() runtime.Gosched() for i, result := range doCheck(stock) { if result { lastdateList := stock.GetDateList() if _, err := dailyreportdb.InsertRecode(stock.No, filter.AllList[i].No(), lastdateList[len(lastdateList)-1].Add(time.Duration(8)*time.Hour)); err == nil { log.Println(stock.No, filter.AllList[i]) } else { log.Println("InsertRecode Error", stock.No, i, err) } } } }(stock, recentlyOpened) } wg.Wait() }
package filter import ( "testing" "time" "github.com/toomore/gogrs/tradingdays" "github.com/toomore/gogrs/twse" ) var stock = twse.NewTWSE("2618", tradingdays.FindRecentlyOpened(time.Now())) func TestCheckGroup(t *testing.T) { for i, v := range AllList { t.Log(i, v.No(), v.String(), v.Mindata(), v.CheckFunc(stock)) } } func TestCheckGroup_String(t *testing.T) { for i, v := range AllList { t.Log(i, v.No(), v) } }
func TestStockRealTimeOTC(t *testing.T) { r := NewOTC("8446", tradingdays.FindRecentlyOpened(time.Now())) r.URL() t.Log(r.Get()) }