You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1068 lines
41 KiB

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)
}