package publicData import ( "fmt" "github.com/shopspring/decimal" "matchmaking-system/internal/data/memory" "matchmaking-system/internal/data/tradedeal/option" "matchmaking-system/internal/pkg/flags" "matchmaking-system/internal/pkg/setting" ) // OrderSub // @Description: type OrderSub struct { OrderId string // 订单ID Price string // 市价 OpenPrice string // 开盘价 Count int64 // 订单总数 Status string // 订单状态 Symbol string // 订阅Key Market string // 交易对 OrderNumber string // 仓位 TradeType int64 // 交易类型(1买涨,2买跌) FaceValue string // 合约面值 Type int64 // 市场类型 TradingType int64 // 交易方式: 1-BUY,2-SELLS ServiceCost string // 开仓手续费 UserId int64 // 用户ID } // OptionSum // @Description: type OptionSum struct { Type string // 类型 Value string // 统计数据 } // CheckSymbol // // @Description: 当前订阅订单交易对实时价格 // @param topIc // @param symbol // @return string // @return error func CheckSymbol(topIc, symbol string) (string, error) { var err error var price []byte switch topIc { case setting.SpotsSubscribe: // 用户现货订单订阅 price, err = memory.SpotsCache.Get(SymbolCache(flags.Xh, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.ContractSubscribe: // 用户合约订单订阅 price, err = memory.GetContractCache(SymbolCache(flags.Hy, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.SecondSubscribe: // 用户秒合约订单订阅 price, err = memory.GetSecondCache(SymbolCache(flags.Sd, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.ShareUsSubscribe: // 用户美股订单订阅 price, err = memory.GetShareUsCache(SymbolCache(flags.Us, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareUsClosePrice.Get(SymbolCache(flags.Us, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareMysSubscribe: // 用户马股订单订阅 price, err = memory.GetShareMysCache(SymbolCache(flags.Mys, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareMysClosePrice.Get(SymbolCache(flags.Mys, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareThaSubscribe: // 用户泰股订单订阅 price, err = memory.GetShareThaCache(SymbolCache(flags.Tha, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareThaClosePrice.Get(SymbolCache(flags.Tha, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareIdnSubscribe: // 用户印尼股订单订阅 price, err = memory.GetShareIdnCache(SymbolCache(flags.Idn, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareIdnClosePrice.Get(SymbolCache(flags.Idn, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareInrSubscribe: // 用户印度股订单订阅 price, err = memory.GetShareInrCache(SymbolCache(flags.Inr, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareInrClosePrice.Get(SymbolCache(flags.Inr, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareSgdSubscribe: // 用户新加坡股订单订阅 price, err = memory.GetShareSgdCache(SymbolCache(flags.Sgd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareSgdClosePrice.Get(SymbolCache(flags.Sgd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareHkdSubscribe: // 用户港股订单订阅 price, err = memory.GetShareHkdCache(SymbolCache(flags.Hkd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareHkdClosePrice.Get(SymbolCache(flags.Hkd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareGbxSubscribe: // 用户英股订单订阅 price, err = memory.GetShareGbxCache(SymbolCache(flags.Gbx, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareGbxClosePrice.Get(SymbolCache(flags.Gbx, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareEurSubscribe: // 用户德股订单订阅 price, err = memory.GetShareEurCache(SymbolCache(flags.Eur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareEurClosePrice.Get(SymbolCache(flags.Eur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareFurSubscribe: // 用户法股订单订阅 price, err = memory.GetShareFurCache(SymbolCache(flags.Fur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareFurClosePrice.Get(SymbolCache(flags.Fur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareJpySubscribe: // 用户日股订单订阅 price, err = memory.GetShareJpyCache(SymbolCache(flags.Jpy, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareJpyClosePrice.Get(SymbolCache(flags.Jpy, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareBrlSubscribe: // 用户巴西股订单订阅 price, err = memory.GetShareBrlCache(SymbolCache(flags.Brl, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareBrlClosePrice.Get(SymbolCache(flags.Brl, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminContractSubscribe: // 管理员合约订单订阅 price, err = memory.GetContractCache(SymbolCache(flags.Hy, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.AdminSecondSubscribe: // 管理员秒合约订单订阅 price, err = memory.GetSecondCache(SymbolCache(flags.Sd, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.AdminShareUsSubscribe: // 管理员美股订单订阅 price, err = memory.GetShareUsCache(SymbolCache(flags.Us, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareUsClosePrice.Get(SymbolCache(flags.Us, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareMysSubscribe: // 管理员马股订单订阅 price, err = memory.GetShareMysCache(SymbolCache(flags.Mys, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareMysClosePrice.Get(SymbolCache(flags.Mys, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareThaSubscribe: // 管理员泰股订单订阅 price, err = memory.GetShareThaCache(SymbolCache(flags.Tha, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareThaClosePrice.Get(SymbolCache(flags.Tha, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareIdnSubscribe: // 管理员印尼股订单订阅 price, err = memory.GetShareIdnCache(SymbolCache(flags.Idn, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareIdnClosePrice.Get(SymbolCache(flags.Idn, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareInrSubscribe: // 管理员印度股订单订阅 price, err = memory.GetShareInrCache(SymbolCache(flags.Inr, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareInrClosePrice.Get(SymbolCache(flags.Inr, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareSgdSubscribe: // 管理员新加坡股订单订阅 price, err = memory.GetShareSgdCache(SymbolCache(flags.Sgd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareSgdClosePrice.Get(SymbolCache(flags.Sgd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareHkdSubscribe: // 管理员港股订单订阅 price, err = memory.GetShareHkdCache(SymbolCache(flags.Hkd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareHkdClosePrice.Get(SymbolCache(flags.Hkd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareGbxSubscribe: // 管理员英股订单订阅 price, err = memory.GetShareGbxCache(SymbolCache(flags.Gbx, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareGbxClosePrice.Get(SymbolCache(flags.Gbx, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareEurSubscribe: // 管理员德股订单订阅 price, err = memory.GetShareEurCache(SymbolCache(flags.Eur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareEurClosePrice.Get(SymbolCache(flags.Eur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareFurSubscribe: // 管理员法股订单订阅 price, err = memory.GetShareFurCache(SymbolCache(flags.Fur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareFurClosePrice.Get(SymbolCache(flags.Fur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareJpySubscribe: // 管理员日股订单订阅 price, err = memory.GetShareJpyCache(SymbolCache(flags.Jpy, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareJpyClosePrice.Get(SymbolCache(flags.Jpy, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareBrlSubscribe: // 管理员巴西股订单订阅 price, err = memory.GetShareBrlCache(SymbolCache(flags.Brl, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareBrlClosePrice.Get(SymbolCache(flags.Brl, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } } return string(price), nil } func CheckSymbolBak(topIc, symbol string) (string, error) { var err error var price []byte switch topIc { case setting.SpotsSubscribe: // 用户现货订单订阅 price, err = memory.SpotsCache.Get(SymbolCache(flags.Xh, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.ContractSubscribe: // 用户合约订单订阅 price, err = memory.GetContractCache(SymbolCache(flags.Hy, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.SecondSubscribe: // 用户秒合约订单订阅 price, err = memory.GetSecondCache(SymbolCache(flags.Sd, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.ShareUsSubscribe: // 用户美股订单订阅 price, err = memory.GetShareUsCacheWs(SymbolCache(flags.Us, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareUsClosePrice.Get(SymbolCache(flags.Us, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareMysSubscribe: // 用户马股订单订阅 price, err = memory.GetShareMysCacheWs(SymbolCache(flags.Mys, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareMysClosePrice.Get(SymbolCache(flags.Mys, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareThaSubscribe: // 用户泰股订单订阅 price, err = memory.GetShareThaCacheWs(SymbolCache(flags.Tha, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareThaClosePrice.Get(SymbolCache(flags.Tha, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareIdnSubscribe: // 用户印尼股订单订阅 price, err = memory.GetShareIdnCacheWs(SymbolCache(flags.Idn, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareIdnClosePrice.Get(SymbolCache(flags.Idn, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareInrSubscribe: // 用户印度股订单订阅 price, err = memory.GetShareInrCacheWs(SymbolCache(flags.Inr, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareInrClosePrice.Get(SymbolCache(flags.Inr, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareSgdSubscribe: // 用户新加坡股订单订阅 price, err = memory.GetShareSgdCacheWs(SymbolCache(flags.Sgd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareSgdClosePrice.Get(SymbolCache(flags.Sgd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareHkdSubscribe: // 用户港股订单订阅 price, err = memory.GetShareHkdCacheWs(SymbolCache(flags.Hkd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareHkdClosePrice.Get(SymbolCache(flags.Hkd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareGbxSubscribe: // 用户英股订单订阅 price, err = memory.GetShareGbxCacheWs(SymbolCache(flags.Gbx, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareGbxClosePrice.Get(SymbolCache(flags.Gbx, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareEurSubscribe: // 用户德股订单订阅 price, err = memory.GetShareEurCacheWs(SymbolCache(flags.Eur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareEurClosePrice.Get(SymbolCache(flags.Eur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareFurSubscribe: // 用户法股订单订阅 price, err = memory.GetShareFurCacheWs(SymbolCache(flags.Fur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareFurClosePrice.Get(SymbolCache(flags.Fur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareJpySubscribe: // 用户日股订单订阅 price, err = memory.GetShareJpyCacheWs(SymbolCache(flags.Jpy, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareJpyClosePrice.Get(SymbolCache(flags.Jpy, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.ShareBrlSubscribe: // 用户巴西股订单订阅 price, err = memory.GetShareBrlCacheWs(SymbolCache(flags.Brl, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareBrlClosePrice.Get(SymbolCache(flags.Brl, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminContractSubscribe: // 管理员合约订单订阅 price, err = memory.GetContractCache(SymbolCache(flags.Hy, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.AdminSecondSubscribe: // 管理员秒合约订单订阅 price, err = memory.GetSecondCache(SymbolCache(flags.Sd, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } case setting.AdminShareUsSubscribe: // 管理员美股订单订阅 price, err = memory.GetShareUsCacheWs(SymbolCache(flags.Us, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareUsClosePrice.Get(SymbolCache(flags.Us, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareMysSubscribe: // 管理员马股订单订阅 price, err = memory.GetShareMysCacheWs(SymbolCache(flags.Mys, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareMysClosePrice.Get(SymbolCache(flags.Mys, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareThaSubscribe: // 管理员泰股订单订阅 price, err = memory.GetShareThaCacheWs(SymbolCache(flags.Tha, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareThaClosePrice.Get(SymbolCache(flags.Tha, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareIdnSubscribe: // 管理员印尼股订单订阅 price, err = memory.GetShareIdnCacheWs(SymbolCache(flags.Idn, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareIdnClosePrice.Get(SymbolCache(flags.Idn, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareInrSubscribe: // 管理员印度股订单订阅 price, err = memory.GetShareInrCacheWs(SymbolCache(flags.Inr, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareInrClosePrice.Get(SymbolCache(flags.Inr, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareSgdSubscribe: // 管理员新加坡股订单订阅 price, err = memory.GetShareSgdCacheWs(SymbolCache(flags.Sgd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareSgdClosePrice.Get(SymbolCache(flags.Sgd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareHkdSubscribe: // 管理员港股订单订阅 price, err = memory.GetShareHkdCacheWs(SymbolCache(flags.Hkd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareHkdClosePrice.Get(SymbolCache(flags.Hkd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareGbxSubscribe: // 管理员英股订单订阅 price, err = memory.GetShareGbxCacheWs(SymbolCache(flags.Gbx, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareGbxClosePrice.Get(SymbolCache(flags.Gbx, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareEurSubscribe: // 管理员德股订单订阅 price, err = memory.GetShareEurCacheWs(SymbolCache(flags.Eur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareEurClosePrice.Get(SymbolCache(flags.Eur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareFurSubscribe: // 管理员法股订单订阅 price, err = memory.GetShareFurCacheWs(SymbolCache(flags.Fur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareFurClosePrice.Get(SymbolCache(flags.Fur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareJpySubscribe: // 管理员日股订单订阅 price, err = memory.GetShareJpyCacheWs(SymbolCache(flags.Jpy, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareJpyClosePrice.Get(SymbolCache(flags.Jpy, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case setting.AdminShareBrlSubscribe: // 管理员巴西股订单订阅 price, err = memory.GetShareBrlCacheWs(SymbolCache(flags.Brl, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareBrlClosePrice.Get(SymbolCache(flags.Brl, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } } return string(price), nil } // CheckForexSymbol // // @Description: 外汇交易对买一卖一最新报价 // @param topIc // @param symbol // @param tradeType // @return string // @return error func CheckForexSymbol(topIc, symbol string, tradeType int64) (string, error) { var err error var priceNew []byte switch tradeType { case 1: priceNew, err = memory.GetForexCache(SymbolCache(flags.Wh, symbol, flags.TradeTypeBuy)) case 2: priceNew, err = memory.GetForexCache(SymbolCache(flags.Wh, symbol, flags.TradeTypeSell)) } if err != nil { return flags.SetNull, err } return string(priceNew), nil } // CheckForexImmediateSymbol // // @Description: 外汇交易即时报价 // @param topIc // @param symbol // @param tradeType // @return string // @return error func CheckForexImmediateSymbol(topIc, symbol string, tradeType int64) (string, error) { priceNew, err := memory.GetForexImmediateCache(SymbolCache(flags.Wh, symbol, flags.TradeTypePrice)) if err != nil { return flags.SetNull, err } return string(priceNew), nil } // CheckMoneyImmediateSymbol // // @Description: 综合(现货|合约|外汇)交易即时报价 // @param topIc // @param symbol // @param typeStatus // @return string // @return func CheckMoneyImmediateSymbol(topIc, symbol string, marketType int64) (string, error) { var err error var priceNew []byte var keyType int if flags.CheckEnvironment == flags.CheckAdmin { keyType = flags.TradeTypeAdminPrice } else { keyType = flags.TradeTypePrice } switch marketType { case flags.SpotsMarketType: // 现货 priceNew, err = memory.GetMoneySpotsCache(SymbolCache(flags.Xh, symbol, keyType)) if err != nil { return flags.SetNull, err } case flags.ContractMarketType: // 合约 priceNew, err = memory.GetMoneyContractCache(SymbolCache(flags.Hy, symbol, keyType)) if err != nil { return flags.SetNull, err } case flags.ForexMarketType: // 外汇 priceNew, err = memory.GetMoneyForexImmediateCache(SymbolCache(flags.Wh, symbol, keyType)) if err != nil { return flags.SetNull, err } default: } return string(priceNew), nil } // CheckSymbolBlock // // @Description: 大宗交易当前订阅订单交易队实时价格 // @param topIc // @param symbol // @param typeStatus // @return string // @return error func CheckSymbolBlock(topIc, symbol string, typeStatus int64) (string, error) { var err error var price []byte switch topIc { case setting.ShareBlkSubscribe: // 用户大宗交易订单订阅 switch typeStatus { case flags.ShareUsMarketType: // 美股 price, err = memory.GetShareUsCache(SymbolCache(flags.Us, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareUsClosePrice.Get(SymbolCache(flags.Us, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareThaMarketType: // 泰股 price, err = memory.GetShareThaCache(SymbolCache(flags.Tha, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareThaClosePrice.Get(SymbolCache(flags.Tha, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareMysMarketType: // 马股 price, err = memory.GetShareMysCache(SymbolCache(flags.Mys, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareMysClosePrice.Get(SymbolCache(flags.Mys, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareIdnMarketType: // 印尼股 price, err = memory.GetShareIdnCache(SymbolCache(flags.Idn, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareIdnClosePrice.Get(SymbolCache(flags.Idn, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareInrMarketType: // 印度股 price, err = memory.GetShareInrCache(SymbolCache(flags.Inr, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareInrClosePrice.Get(SymbolCache(flags.Inr, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareSgdMarketType: // 新加坡股 price, err = memory.GetShareSgdCache(SymbolCache(flags.Sgd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareSgdClosePrice.Get(SymbolCache(flags.Sgd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareHkdMarketType: // 港股 price, err = memory.GetShareHkdCache(SymbolCache(flags.Hkd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareHkdClosePrice.Get(SymbolCache(flags.Hkd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareGbxMarketType: // 英股 price, err = memory.GetShareGbxCache(SymbolCache(flags.Gbx, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareGbxClosePrice.Get(SymbolCache(flags.Gbx, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareEurMarketType: // 德股 price, err = memory.GetShareEurCache(SymbolCache(flags.Eur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareEurClosePrice.Get(SymbolCache(flags.Eur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareFurMarketType: // 法股 price, err = memory.GetShareFurCache(SymbolCache(flags.Fur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareFurClosePrice.Get(SymbolCache(flags.Fur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareJpyMarketType: // 日股 price, err = memory.GetShareJpyCache(SymbolCache(flags.Jpy, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareJpyClosePrice.Get(SymbolCache(flags.Jpy, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareBrlMarketType: // 巴西股 price, err = memory.GetShareBrlCache(SymbolCache(flags.Brl, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareBrlClosePrice.Get(SymbolCache(flags.Brl, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } } case setting.AdminShareBlkSubscribe: // 管理员大宗交易股-订单订阅 switch typeStatus { case flags.ShareUsMarketType: // 美股 price, err = memory.GetShareUsCache(SymbolCache(flags.Us, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareUsClosePrice.Get(SymbolCache(flags.Us, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareThaMarketType: // 泰股 price, err = memory.GetShareThaCache(SymbolCache(flags.Tha, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareThaClosePrice.Get(SymbolCache(flags.Tha, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareMysMarketType: // 马股 price, err = memory.GetShareMysCache(SymbolCache(flags.Mys, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareMysClosePrice.Get(SymbolCache(flags.Mys, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareIdnMarketType: // 印尼股 price, err = memory.GetShareIdnCache(SymbolCache(flags.Idn, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareIdnClosePrice.Get(SymbolCache(flags.Idn, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareInrMarketType: // 印度股 price, err = memory.GetShareInrCache(SymbolCache(flags.Inr, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareInrClosePrice.Get(SymbolCache(flags.Inr, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareSgdMarketType: // 新加坡股 price, err = memory.GetShareSgdCache(SymbolCache(flags.Sgd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareSgdClosePrice.Get(SymbolCache(flags.Sgd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareHkdMarketType: // 港股 price, err = memory.GetShareHkdCache(SymbolCache(flags.Hkd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareHkdClosePrice.Get(SymbolCache(flags.Hkd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareGbxMarketType: // 英股 price, err = memory.GetShareGbxCache(SymbolCache(flags.Gbx, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareGbxClosePrice.Get(SymbolCache(flags.Gbx, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareEurMarketType: // 德股 price, err = memory.GetShareEurCache(SymbolCache(flags.Eur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareEurClosePrice.Get(SymbolCache(flags.Eur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareFurMarketType: // 法股 price, err = memory.GetShareFurCache(SymbolCache(flags.Fur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareFurClosePrice.Get(SymbolCache(flags.Fur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareJpyMarketType: // 日股 price, err = memory.GetShareJpyCache(SymbolCache(flags.Jpy, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareJpyClosePrice.Get(SymbolCache(flags.Jpy, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareBrlMarketType: // 巴西股 price, err = memory.GetShareBrlCache(SymbolCache(flags.Brl, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareBrlClosePrice.Get(SymbolCache(flags.Brl, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } } } return string(price), nil } func CheckSymbolBlockBak(topIc, symbol string, typeStatus int64) (string, error) { var err error var price []byte switch topIc { case setting.ShareBlkSubscribe: // 用户大宗交易订单订阅 switch typeStatus { case flags.ShareUsMarketType: // 美股 price, err = memory.GetShareUsCacheWs(SymbolCache(flags.Us, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareUsClosePrice.Get(SymbolCache(flags.Us, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareThaMarketType: // 泰股 price, err = memory.GetShareThaCacheWs(SymbolCache(flags.Tha, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareThaClosePrice.Get(SymbolCache(flags.Tha, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareMysMarketType: // 马股 price, err = memory.GetShareMysCacheWs(SymbolCache(flags.Mys, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareMysClosePrice.Get(SymbolCache(flags.Mys, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareIdnMarketType: // 印尼股 price, err = memory.GetShareIdnCacheWs(SymbolCache(flags.Idn, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareIdnClosePrice.Get(SymbolCache(flags.Idn, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareInrMarketType: // 印度股 price, err = memory.GetShareInrCacheWs(SymbolCache(flags.Inr, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareInrClosePrice.Get(SymbolCache(flags.Inr, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareSgdMarketType: // 新加坡股 price, err = memory.GetShareSgdCacheWs(SymbolCache(flags.Sgd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareSgdClosePrice.Get(SymbolCache(flags.Sgd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareHkdMarketType: // 港股 price, err = memory.GetShareHkdCacheWs(SymbolCache(flags.Hkd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareHkdClosePrice.Get(SymbolCache(flags.Hkd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareGbxMarketType: // 英股 price, err = memory.GetShareGbxCacheWs(SymbolCache(flags.Gbx, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareGbxClosePrice.Get(SymbolCache(flags.Gbx, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareEurMarketType: // 德股 price, err = memory.GetShareEurCacheWs(SymbolCache(flags.Eur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareEurClosePrice.Get(SymbolCache(flags.Eur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareFurMarketType: // 法股 price, err = memory.GetShareFurCacheWs(SymbolCache(flags.Fur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareFurClosePrice.Get(SymbolCache(flags.Fur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareJpyMarketType: // 日股 price, err = memory.GetShareJpyCacheWs(SymbolCache(flags.Jpy, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareJpyClosePrice.Get(SymbolCache(flags.Jpy, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareBrlMarketType: // 巴西股 price, err = memory.GetShareBrlCacheWs(SymbolCache(flags.Brl, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareBrlClosePrice.Get(SymbolCache(flags.Brl, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } } case setting.AdminShareBlkSubscribe: // 管理员大宗交易股-订单订阅 switch typeStatus { case flags.ShareUsMarketType: // 美股 price, err = memory.GetShareUsCacheWs(SymbolCache(flags.Us, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareUsClosePrice.Get(SymbolCache(flags.Us, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareThaMarketType: // 泰股 price, err = memory.GetShareThaCacheWs(SymbolCache(flags.Tha, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareThaClosePrice.Get(SymbolCache(flags.Tha, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareMysMarketType: // 马股 price, err = memory.GetShareMysCacheWs(SymbolCache(flags.Mys, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareMysClosePrice.Get(SymbolCache(flags.Mys, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareIdnMarketType: // 印尼股 price, err = memory.GetShareIdnCacheWs(SymbolCache(flags.Idn, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareIdnClosePrice.Get(SymbolCache(flags.Idn, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareInrMarketType: // 印度股 price, err = memory.GetShareInrCacheWs(SymbolCache(flags.Inr, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareInrClosePrice.Get(SymbolCache(flags.Inr, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareSgdMarketType: // 新加坡股 price, err = memory.GetShareSgdCacheWs(SymbolCache(flags.Sgd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareSgdClosePrice.Get(SymbolCache(flags.Sgd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareHkdMarketType: // 港股 price, err = memory.GetShareHkdCacheWs(SymbolCache(flags.Hkd, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareHkdClosePrice.Get(SymbolCache(flags.Hkd, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareGbxMarketType: // 英股 price, err = memory.GetShareGbxCacheWs(SymbolCache(flags.Gbx, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareGbxClosePrice.Get(SymbolCache(flags.Gbx, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareEurMarketType: // 德股 price, err = memory.GetShareEurCacheWs(SymbolCache(flags.Eur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareEurClosePrice.Get(SymbolCache(flags.Eur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareFurMarketType: // 法股 price, err = memory.GetShareFurCacheWs(SymbolCache(flags.Fur, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareFurClosePrice.Get(SymbolCache(flags.Fur, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareJpyMarketType: // 日股 price, err = memory.GetShareJpyCacheWs(SymbolCache(flags.Jpy, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareJpyClosePrice.Get(SymbolCache(flags.Jpy, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } case flags.ShareBrlMarketType: // 法股 price, err = memory.GetShareBrlCacheWs(SymbolCache(flags.Brl, symbol, flags.TradeTypePrice)) if err != nil || len(price) == 0 { price, err = memory.ShareBrlClosePrice.Get(SymbolCache(flags.Brl, symbol, flags.TradeTypeClosePrice)) if err != nil { return flags.SetNull, err } } } } return string(price), nil } // CheckSymbolOption // // @Description: 期权数据浮动盈亏计算价格 // @param order func CheckSymbolOption(order option.OptionInrTallyCache) (string, error) { price := decimal.Zero // 买一价格 bidKey := SymbolCache(flags.Opi, order.Order.StockCode, flags.OptionBid) priceBid, err := memory.GetOptionInrBid(bidKey) if err != nil { return flags.SetNull, err } bid, _ := decimal.NewFromString(string(priceBid)) // 卖一价格 askKey := SymbolCache(flags.Opi, order.Order.StockCode, flags.OptionAsk) priceAsk, err := memory.GetOptionInrAsk(askKey) if err != nil { return flags.SetNull, err } ask, _ := decimal.NewFromString(string(priceAsk)) // 浮动盈亏 // buy-call 和 buy-put bid买一价 // sell-call 和 sell-put aSK卖一价 switch order.Order.TradeType { case flags.OptionCalls: // call switch order.Order.TradingType { case flags.OptionBuy: // call - buy if !bid.IsZero() { price = bid } case flags.OptionSell: // call - sell if !ask.IsZero() { price = ask } } case flags.OptionPuts: // put switch order.Order.TradingType { case flags.OptionBuy: // put - buy if !bid.IsZero() { price = bid } case flags.OptionSell: // put - sell if !ask.IsZero() { price = ask } } } if price.IsZero() { return flags.SetNull, nil } return price.String(), nil } // SymbolCache // // @Description: // @param mark // @param symbol // @param types // @return string func SymbolCache(mark, symbol string, types int) string { return fmt.Sprintf("%v-%v-%v", mark, symbol, types) }