실거래 주문이 브로커에 도달하기 전에 kill switch와 계정별 주문 한도를 검증해야 한다. API, CLI, client parser surface와 완료된 review archive를 함께 정리한다.
91 lines
4.5 KiB
Go
91 lines
4.5 KiB
Go
package contracts
|
|
|
|
import (
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
altv1 "git.toki-labs.com/toki/alt/packages/contracts/gen/go/alt/v1"
|
|
protoSocket "git.toki-labs.com/toki/proto-socket/go"
|
|
)
|
|
|
|
func messageFactories() []func() proto.Message {
|
|
return []func() proto.Message{
|
|
func() proto.Message { return &altv1.HelloRequest{} },
|
|
func() proto.Message { return &altv1.HelloResponse{} },
|
|
// market read surface: instruments and bars
|
|
func() proto.Message { return &altv1.ListInstrumentsRequest{} },
|
|
func() proto.Message { return &altv1.ListInstrumentsResponse{} },
|
|
func() proto.Message { return &altv1.ListBarsRequest{} },
|
|
func() proto.Message { return &altv1.ListBarsResponse{} },
|
|
// market import command: daily bars
|
|
func() proto.Message { return &altv1.ImportDailyBarsRequest{} },
|
|
func() proto.Message { return &altv1.ImportDailyBarsResponse{} },
|
|
// backtest surface: start / list / detail / result / compare
|
|
func() proto.Message { return &altv1.StartBacktestRequest{} },
|
|
func() proto.Message { return &altv1.StartBacktestResponse{} },
|
|
func() proto.Message { return &altv1.GetBacktestRunRequest{} },
|
|
func() proto.Message { return &altv1.GetBacktestRunResponse{} },
|
|
func() proto.Message { return &altv1.GetBacktestResultRequest{} },
|
|
func() proto.Message { return &altv1.GetBacktestResultResponse{} },
|
|
func() proto.Message { return &altv1.BacktestResult{} },
|
|
func() proto.Message { return &altv1.ListBacktestRunsRequest{} },
|
|
func() proto.Message { return &altv1.ListBacktestRunsResponse{} },
|
|
func() proto.Message { return &altv1.GetBacktestRunDetailRequest{} },
|
|
func() proto.Message { return &altv1.GetBacktestRunDetailResponse{} },
|
|
func() proto.Message { return &altv1.CompareBacktestRunsRequest{} },
|
|
func() proto.Message { return &altv1.CompareBacktestRunsResponse{} },
|
|
// paper trading surface: start / state
|
|
func() proto.Message { return &altv1.StartPaperTradingRequest{} },
|
|
func() proto.Message { return &altv1.StartPaperTradingResponse{} },
|
|
func() proto.Message { return &altv1.GetPaperTradingStateRequest{} },
|
|
func() proto.Message { return &altv1.GetPaperTradingStateResponse{} },
|
|
func() proto.Message { return &altv1.PaperTradingState{} },
|
|
// paper order lifecycle surface: submit / cancel / fill
|
|
func() proto.Message { return &altv1.SubmitPaperOrderRequest{} },
|
|
func() proto.Message { return &altv1.SubmitPaperOrderResponse{} },
|
|
func() proto.Message { return &altv1.CancelPaperOrderRequest{} },
|
|
func() proto.Message { return &altv1.CancelPaperOrderResponse{} },
|
|
func() proto.Message { return &altv1.FillPaperOrderRequest{} },
|
|
func() proto.Message { return &altv1.FillPaperOrderResponse{} },
|
|
// live trading surface: broker capability probe
|
|
func() proto.Message { return &altv1.GetLiveBrokerCapabilitiesRequest{} },
|
|
func() proto.Message { return &altv1.GetLiveBrokerCapabilitiesResponse{} },
|
|
func() proto.Message { return &altv1.LiveBrokerCapability{} },
|
|
// live order lifecycle surface: submit / cancel / get
|
|
func() proto.Message { return &altv1.SubmitLiveOrderRequest{} },
|
|
func() proto.Message { return &altv1.SubmitLiveOrderResponse{} },
|
|
func() proto.Message { return &altv1.CancelLiveOrderRequest{} },
|
|
func() proto.Message { return &altv1.CancelLiveOrderResponse{} },
|
|
func() proto.Message { return &altv1.GetLiveOrderRequest{} },
|
|
func() proto.Message { return &altv1.GetLiveOrderResponse{} },
|
|
// live risk/kill switch surface: policy query, kill switch query/set
|
|
func() proto.Message { return &altv1.GetLiveRiskPolicyRequest{} },
|
|
func() proto.Message { return &altv1.GetLiveRiskPolicyResponse{} },
|
|
func() proto.Message { return &altv1.LiveRiskPolicy{} },
|
|
func() proto.Message { return &altv1.GetLiveKillSwitchRequest{} },
|
|
func() proto.Message { return &altv1.GetLiveKillSwitchResponse{} },
|
|
func() proto.Message { return &altv1.SetLiveKillSwitchRequest{} },
|
|
func() proto.Message { return &altv1.SetLiveKillSwitchResponse{} },
|
|
func() proto.Message { return &altv1.LiveKillSwitchState{} },
|
|
// live risk decision: included in SubmitLiveOrderResponse when risk blocked
|
|
func() proto.Message { return &altv1.LiveRiskDecision{} },
|
|
}
|
|
}
|
|
|
|
func ParserMap() protoSocket.ParserMap {
|
|
factories := messageFactories()
|
|
pm := make(protoSocket.ParserMap, len(factories))
|
|
for _, factory := range factories {
|
|
pm[protoSocket.TypeNameOf(factory())] = parserFor(factory)
|
|
}
|
|
return pm
|
|
}
|
|
|
|
func parserFor(factory func() proto.Message) func([]byte) (proto.Message, error) {
|
|
return func(data []byte) (proto.Message, error) {
|
|
msg := factory()
|
|
if err := proto.Unmarshal(data, msg); err != nil {
|
|
return nil, err
|
|
}
|
|
return msg, nil
|
|
}
|
|
}
|