func newCycle(symbol string) (expirations []Datetime, price decimal.Decimal, err error) {
	url := buildOptionsURL(OptionsURL, symbol, NewDatetime(time.Now()))
	result, err := fetchOptions(url)
	if err != nil {
		return expirations, price, err
	}
	return result.Expirations, toDecimal(result.Price), err
}
newCycle fetches the expiration dates for an option cycle.
package finance
import (
	"time"
	"github.com/shopspring/decimal"
)
type (
	OptionsCycle struct {
		Symbol          string
		UnderlyingPrice decimal.Decimal
		Expirations     []Datetime
	}
	Contract struct {
		ID            string
		Security      string
		Strike        decimal.Decimal
		Price         decimal.Decimal
		Change        decimal.Decimal
		ChangePercent decimal.Decimal
		Bid           decimal.Decimal
		Ask           decimal.Decimal
		Volume        int
		OpenInterest  int
	}
)
func newContract(option map[string]string) Contract {
	c := Contract{
		ID:           option["cid"],
		Security:     option["s"],
		Strike:       toDecimal(option["strike"]),
		Price:        toDecimal(option["p"]),
		Change:       toDecimal(option["c"]),
		Bid:          toDecimal(option["b"]),
		Ask:          toDecimal(option["a"]),
		Volume:       toInt(option["vol"]),
		OpenInterest: toInt(option["oi"]),
	}
	if c.Price.IntPart() != 0 {
		hundred, _ := decimal.NewFromString("100")
		c.ChangePercent = ((c.Change).Div(c.Price.Sub(c.Change))).Mul(hundred).Truncate(2)
	}
	return c
}