Browse Source

vrvp stream

main
strange 6 months ago
parent
commit
31555633ca
  1. 35
      internal/trading/sig/indicator_summary.go
  2. 3
      internal/trading/trading_service.go
  3. 5
      pkg/indicator/vrvp.go
  4. 5
      pkg/strategy/bollgrid.go

35
internal/trading/sig/indicator_summary.go

@ -1,7 +1,6 @@
package sig package sig
import ( import (
"fmt"
"sig-pub/pkg/indicator" "sig-pub/pkg/indicator"
) )
@ -22,30 +21,30 @@ func NewIndicatorSummary(summaryIndicatorNewer func() indicator.ISummaryIndicato
// Summary 0 10, 0 20, 1 30 // Summary 0 10, 0 20, 1 30
func (s *IndicatorSummary) Summary(offset, count int16) (summary any, rok bool) { func (s *IndicatorSummary) Summary(offset, count int16) (summary any, rok bool) {
key := fmt.Sprintf("%d,%d", offset, count) // key := fmt.Sprintf("%d,%d", offset, count)
summaryIndicator, ok := s.cachedSummaryIndicators[key] // summaryIndicator, ok := s.cachedSummaryIndicators[key]
if ok { // if ok {
s.indicatorContext.AddOffset(offset + count + 1) // s.indicatorContext.AddOffset(offset + count + 1)
eliminater, ok := summaryIndicator.(indicator.ISummaryIndicatorEliminater) // eliminater, ok := summaryIndicator.(indicator.ISummaryIndicatorEliminater)
if ok { // if ok {
eliminater.Eliminate(s.indicatorContext) // eliminater.Eliminate(s.indicatorContext)
} // }
s.indicatorContext.AddOffset(-(offset + count + 1)) // s.indicatorContext.AddOffset(-(offset + count + 1))
s.indicatorContext.AddOffset(offset) // s.indicatorContext.AddOffset(offset)
summaryIndicator.Accumulate(s.indicatorContext) // summaryIndicator.Accumulate(s.indicatorContext)
summary, ok = summaryIndicator.Summary(s.indicatorContext) // summary, ok = summaryIndicator.Summary(s.indicatorContext)
s.indicatorContext.AddOffset(-offset) // s.indicatorContext.AddOffset(-offset)
return // return
} // }
// 初始化, 计算全量数据 // 初始化, 计算全量数据
summaryIndicator = s.summaryIndicatorNewer() summaryIndicator := s.summaryIndicatorNewer()
if err := summaryIndicator.Init(s.indicatorContext.Input()); err != nil { if err := summaryIndicator.Init(s.indicatorContext.Input()); err != nil {
panic(err) panic(err)
} }
s.cachedSummaryIndicators[key] = summaryIndicator // s.cachedSummaryIndicators[key] = summaryIndicator
// 设置当前相对offset // 设置当前相对offset
offset = offset + count offset = offset + count

3
internal/trading/trading_service.go

@ -19,6 +19,7 @@ import (
"sig-pub/pkg/utils/times" "sig-pub/pkg/utils/times"
"sig-pub/pkg/zlog" "sig-pub/pkg/zlog"
"sort" "sort"
"time"
"sig-pub/internal/trading/backtest" "sig-pub/internal/trading/backtest"
"sig-pub/internal/trading/sig" "sig-pub/internal/trading/sig"
@ -449,6 +450,8 @@ func (svc *TradingService) StrategySeries(ctx context.Context, req *pb.ReqStrate
rsp.Times = append(rsp.Times, ktime) rsp.Times = append(rsp.Times, ktime)
return return
}) })
lastK := iiks.Get(driverInstId, interval).MustGet(0)
fmt.Println("lastK: ", lastK, lastK.Ts, time.UnixMilli(lastK.Ts))
return return
} }

5
pkg/indicator/vrvp.go

@ -3,7 +3,6 @@ package indicator
import ( import (
"math" "math"
"sig-pub/pkg/types" "sig-pub/pkg/types"
"sig-pub/pkg/zlog"
) )
const ( const (
@ -202,8 +201,8 @@ func (v *VRVP) halveResolution() {
// Summary 计算最终的成交量分布结果 // Summary 计算最终的成交量分布结果
// 在所有K线Accumulate完成后调用 // 在所有K线Accumulate完成后调用
func (v *VRVP) Summary(ctx IIndicatorContext) (summary any, ok bool) { func (v *VRVP) Summary(ctx IIndicatorContext) (summary any, ok bool) {
zlog.Debugf("VRVP Summary: klines=%d, skts=%d, ekts=%d, minPrice=%.2f, maxPrice=%.2f, baseStep=%.2f", // zlog.Debugf("VRVP Summary: klines=%d, skts=%d, ekts=%d, minPrice=%.2f, maxPrice=%.2f, baseStep=%.2f",
v.klines, v.skts, v.ekts, v.minPrice, v.maxPrice, v.baseStep) // v.klines, v.skts, v.ekts, v.minPrice, v.maxPrice, v.baseStep)
if v.minPrice >= v.maxPrice { if v.minPrice >= v.maxPrice {
return nil, false return nil, false
} }

5
pkg/strategy/bollgrid.go

@ -2,6 +2,7 @@ package strategy
import ( import (
"sig-pub/pkg/types" "sig-pub/pkg/types"
"sig-pub/pkg/zlog"
) )
// BollGrid 布林带网格策略 // BollGrid 布林带网格策略
@ -50,6 +51,10 @@ func (s *BollGrid) Update(ctx ISingleSigStrategyContext) (side types.Side) {
// 128 根k线的成交量分布图 // 128 根k线的成交量分布图
summary, ok := ctx.SummaryIndicator("VRVP", types.Input{"buckets": 48}).Summary(0, 128) summary, ok := ctx.SummaryIndicator("VRVP", types.Input{"buckets": 48}).Summary(0, 128)
_, _ = summary, ok _, _ = summary, ok
ts := ctx.Get(0).Ts
if ts == 1763685000000 {
zlog.Infof("last summary: %#v", summary)
}
// 获取指标数据 // 获取指标数据
// BOLL指标 Calculate 返回值为 mb (中轨) // BOLL指标 Calculate 返回值为 mb (中轨)

Loading…
Cancel
Save