mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-10 09:11:55 +00:00
shakegrid: allocate grid object
This commit is contained in:
parent
f56214699a
commit
4968fbf540
|
@ -399,16 +399,32 @@ func (s *Strategy) Run(ctx context.Context, orderExecutor bbgo.OrderExecutor, se
|
||||||
// kline.GetLowerShadowRatio()
|
// kline.GetLowerShadowRatio()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: 1) Find the previous top and then find the bottom of the previous top
|
|
||||||
dataStore, ok := session.MarketDataStore(s.Symbol)
|
dataStore, ok := session.MarketDataStore(s.Symbol)
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Errorf("market data store %s does not exist", s.Symbol)
|
log.Errorf("market data store %s does not exist", s.Symbol)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1) Find the previous top and then find the bottom of the previous top
|
||||||
kLines := dataStore.KLineWindows[s.Interval]
|
kLines := dataStore.KLineWindows[s.Interval]
|
||||||
tops := findTopKLine(kLines, 10)
|
if s.grid == nil {
|
||||||
_ = tops
|
topIndexes := findTopKLine(kLines, 10)
|
||||||
|
if len(topIndexes) == 0 {
|
||||||
|
log.Warnf("no any top found")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bottomIndexes := findBottomKLinesFrom(kLines, 10, topIndexes[0])
|
||||||
|
if len(bottomIndexes) == 0 {
|
||||||
|
log.Warnf("no any bottom found")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bottomKLine := kLines[bottomIndexes[0]]
|
||||||
|
upperPrice := fixedpoint.NewFromFloat(bottomKLine.Low)
|
||||||
|
lowerPrice := fixedpoint.NewFromFloat(kline.Low)
|
||||||
|
s.grid = NewGrid(lowerPrice, upperPrice, fixedpoint.NewFromInt(s.GridNum))
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: 2) Allocate grid object here
|
// TODO: 2) Allocate grid object here
|
||||||
|
|
||||||
|
@ -430,9 +446,36 @@ func (s *Strategy) Run(ctx context.Context, orderExecutor bbgo.OrderExecutor, se
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func findTopKLine(kLines types.KLineWindow, window int) (tops []types.KLine) {
|
func findBottomKLinesFrom(kLines types.KLineWindow, window, offset int) (indexes []int) {
|
||||||
|
if len(kLines) < window + offset {
|
||||||
|
return indexes
|
||||||
|
}
|
||||||
|
|
||||||
|
NextKLine:
|
||||||
|
for i := offset; i > window ; i-- {
|
||||||
|
cur := kLines[i]
|
||||||
|
for j := 1; j < window ; j++ {
|
||||||
|
left := kLines[i - j]
|
||||||
|
if left.Low < cur.Low {
|
||||||
|
continue NextKLine
|
||||||
|
}
|
||||||
|
|
||||||
|
right := kLines[i + j]
|
||||||
|
if right.Low < cur.Low {
|
||||||
|
continue NextKLine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we get here, it means it's the local top
|
||||||
|
indexes = append(indexes, i)
|
||||||
|
}
|
||||||
|
|
||||||
|
return indexes
|
||||||
|
}
|
||||||
|
|
||||||
|
func findTopKLine(kLines types.KLineWindow, window int) (indexes []int) {
|
||||||
if len(kLines) < window {
|
if len(kLines) < window {
|
||||||
return tops
|
return indexes
|
||||||
}
|
}
|
||||||
|
|
||||||
NextKLine:
|
NextKLine:
|
||||||
|
@ -451,8 +494,8 @@ NextKLine:
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we get here, it means it's the local top
|
// if we get here, it means it's the local top
|
||||||
tops = append(tops, cur)
|
indexes = append(indexes, i)
|
||||||
}
|
}
|
||||||
|
|
||||||
return tops
|
return indexes
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user