/
strategy_sell_everyday_if_higher_than.go
80 lines (61 loc) · 2.85 KB
/
strategy_sell_everyday_if_higher_than.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package order
import (
"strconv"
"github.com/go-co-op/gocron"
"github.com/sunglim/systemtrading/log"
"github.com/sunglim/systemtrading/order/koreainvestment"
ki "github.com/sunglim/systemtrading/pkg/koreainvestment"
)
type StrategrySellEveryDayIfBelowOrder = CodeAndQuantityAndPrice
func NewStrategySellEveryDayIfAverageIsHigherThanAveragePercentage(buytime string, codeQuantityPrice []StrategrySellEveryDayIfBelowOrder) *StrategySellEveryDayIfAverageIsHigherThanAveragePercentage {
return &StrategySellEveryDayIfAverageIsHigherThanAveragePercentage{buytime, codeQuantityPrice}
}
type StrategySellEveryDayIfAverageIsHigherThanAveragePercentage struct {
buyTime string
codeQuantityPrice []StrategrySellEveryDayIfBelowOrder
}
func (f StrategySellEveryDayIfAverageIsHigherThanAveragePercentage) Start() *gocron.Scheduler {
s := NewSeoulScheduler().Every(1).Day().At(f.buyTime)
logger := log.Default().With("name", "StrategySellEveryDayIfAverageIsHigherThanAveragePercentage")
s.Do(f.order, f.codeQuantityPrice, logger)
s.StartAsync()
return s
}
func (f StrategySellEveryDayIfAverageIsHigherThanAveragePercentage) order(codeQuantityPrice []StrategrySellEveryDayIfBelowOrder, logger *log.Logger) {
logger.Info("triggered")
api := ki.NewApiInquireBalance(koreainvestment.GetDefaultAccount(),
koreainvestment.GetDefaultKoreaInvestmentInstance().GetCredential(),
koreainvestment.GetDefaultKoreaInvestmentInstance().GetBearerAccessToken())
balanceResponse, err := api.Call()
if (balanceResponse != nil && !balanceResponse.IsSucess()) || err != nil {
logger.Error("Getting blance failed" + err.Error())
return
}
for _, output := range balanceResponse.Output1 {
// filter with codequantity
f.orderCash(output, codeQuantityPrice, logger)
}
}
func (f StrategySellEveryDayIfAverageIsHigherThanAveragePercentage) orderCash(balanceResponseOutput ki.ApiInquireBalanceResponseOutput, codeQuantity []StrategrySellEveryDayIfBelowOrder, logger *log.Logger) {
gain_percentage, _ := strconv.ParseFloat(balanceResponseOutput.EvluPflsRt, 32)
// DO NOT SELL IF GAIN IS LESS THAN 3%!
if gain_percentage < 3.0 {
return
}
logger.Info("Gain is above 3%", "name", balanceResponseOutput.PrdtName, "gain", gain_percentage)
//code := balanceResponseOutput.PdNo
//numbersToSell := getQuantityByCode(code, codeQuantity)
/* WIP
api := ki.NewApiOrderCash(code, getQuantityByCode(code, codeQuantity),
koreainvestment.GetDefaultKoreaInvestmentInstance().GetCredential(),
koreainvestment.GetDefaultAccount(),
koreainvestment.GetDefaultKoreaInvestmentInstance().GetBearerAccessToken())
response := api.Call()
if !response.IsSuccess() {
logger.Printf("Getting Api sell cash failed from the strategry")
logger.Printf("Error[%s]", response.Msg1)
return
}
logger.Info("Sell order is successfully sent", "name", balanceResponseOutput.PrdtName, "response", response.Msg1)
*/
}