Я использую цикл for, который проходит через серию точек данных и выясняет, как классифицировать тренд, который показывают данные
Вот логика для отметки точек:
- Если 6 точек подряд имеют тенденцию к уменьшению / увеличению, пометить как «Тенденция к снижению» / «Тенденция к увеличению»
- , в противном случае, если 7 точек подряд находятся ниже / выше среднего, пометить как «Ниже среднего "/" Выше среднего "
Мы отдаем приоритет растущему / убывающему тренду выше или выше среднего
Я думаю, что логика, которую я использую, неверна, но яЯ не уверен, почему.Вот некоторая логика в предложении для серии:
"Для каждой точки, если следующие 5 точек ниже этой, а затем их предыдущий партнер, отметьте все эти точки как" Снижение тренда ". Иначе, еслиточка не отмечена трендом, посмотрите, все ли следующие 6 точек из этой точки выше или ниже среднего значения "
Вы можете скопировать и вставить это в совокупности:
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
type points struct {
quantity float64
lowerBound float64
upperBound float64
mean float64
pattern string
}
func main() {
var pointsToUse = []points{
points{quantity: 3.5, lowerBound: 1, upperBound: 4.8,, mean: 4, pattern: "Common Variation"},
points{
quantity: 3.4,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.2,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.19,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.17,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.14,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.12,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.09,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 4.1,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.16,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.11,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.12,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.14,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.13,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.17,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Commons Variation",
},
}
for i, point := range pointsToUse {
if len(pointsToUse) >= 6 && len(pointsToUse)-(i+1) >= 5 {
if point.quantity > pointsToUse[i+1].quantity && pointsToUse[i+1].quantity > pointsToUse[i+2].quantity && pointsToUse[i+2].quantity > pointsToUse[i+3].quantity && pointsToUse[i+3].quantity > pointsToUse[i+4].quantity && pointsToUse[i+4].quantity > pointsToUse[i+5].quantity {
point.pattern = "Decreasing Trend"
pointsToUse[i+1].pattern = "Decreasing Trend"
pointsToUse[i+2].pattern = "Decreasing Trend"
pointsToUse[i+3].pattern = "Decreasing Trend"
pointsToUse[i+4].pattern = "Decreasing Trend"
pointsToUse[i+5].pattern = "Decreasing Trend"
continue
} else if point.quantity < pointsToUse[i+1].quantity && pointsToUse[i+1].quantity < pointsToUse[i+2].quantity && pointsToUse[i+2].quantity < pointsToUse[i+3].quantity && pointsToUse[i+3].quantity < pointsToUse[i+4].quantity && pointsToUse[i+4].quantity < pointsToUse[i+5].quantity {
point.pattern = "Increasing Trend"
pointsToUse[i+1].pattern = "Increasing Trend"
pointsToUse[i+2].pattern = "Increasing Trend"
pointsToUse[i+3].pattern = "Increasing Trend"
pointsToUse[i+4].pattern = "Increasing Trend"
pointsToUse[i+5].pattern = "Increasing Trend"
continue
}
}
if (point.pattern != "Decreasing Trend" || point.pattern != "Increasing Trend") && len(pointsToUse)-(i+1) >= 6 {
if point.quantity < pointsToUse[i].mean && pointsToUse[i+1].quantity < pointsToUse[i].mean && pointsToUse[i].quantity < pointsToUse[i].mean && pointsToUse[i+3].quantity < pointsToUse[i].mean && pointsToUse[i+4].quantity < pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
pointsToUse[i].pattern = "Below Mean"
pointsToUse[i+1].pattern = "Below Mean"
pointsToUse[i+2].pattern = "Below Mean"
pointsToUse[i+3].pattern = "Below Mean"
pointsToUse[i+4].pattern = "Below Mean"
pointsToUse[i+5].pattern = "Below Mean"
pointsToUse[i+6].pattern = "Below Mean"
} else if point.quantity > pointsToUse[i].mean && pointsToUse[i+1].quantity > pointsToUse[i].mean && pointsToUse[i].quantity > pointsToUse[i].mean && pointsToUse[i+3].quantity > pointsToUse[i].mean && pointsToUse[i+4].quantity > pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
pointsToUse[i].pattern = "Above Mean"
pointsToUse[i+1].pattern = "Above Mean"
pointsToUse[i+2].pattern = "Above Mean"
pointsToUse[i+3].pattern = "Above Mean"
pointsToUse[i+4].pattern = "Above Mean"
pointsToUse[i+5].pattern = "Above Mean"
pointsToUse[i+6].pattern = "Above Mean"
}
}
}
fmt.Println(pointsToUse)
}
Вывод, который мне нужно показать, таков:
3.50 | Decreasing Trend
3.40 | Decreasing Trend
3.20 | Decreasing Trend
3.19 | Decreasing Trend
3.17 | Decreasing Trend
3.14 | Decreasing Trend
3.12 | Decreasing Trend
3.09 | Decreasing Trend
4.1 | Common Variation
3.16 | Below Mean
3.00 | Below Mean
3.00 | Below Mean
3.11 | Below Mean
3.12 | Below Mean
3.14 | Below Mean
3.13 | Below Mean
3.17 | Below Mean
Может кто-нибудь определить, где я ошибаюсь?