You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.1 KiB
66 lines
1.1 KiB
package trader |
|
|
|
import "github.com/spf13/cast" |
|
|
|
// 指标注册/执行器系统分配 |
|
// k线频率, 执行时指定 |
|
// 指标数据(频率)存储, 实时计算 ? |
|
type IndicatorMeta struct { |
|
Name string |
|
Desc string |
|
Args []Arg |
|
} |
|
|
|
type Arg struct { |
|
Name string |
|
Desc string |
|
ArgType ArgType // 参数类型 |
|
Options []ArgOption // 单选/多选选项列表 |
|
} |
|
|
|
type ArgOption struct { |
|
Name string |
|
Desc string |
|
} |
|
|
|
// CastValidate 数据类型校验 |
|
func (t Arg) CastValidate(v string) bool { |
|
switch t.ArgType { |
|
default: |
|
return false |
|
case ArgTypeString: |
|
return true |
|
case ArgTypeInt: |
|
fallthrough |
|
case ArgTypeUInt: |
|
if r, e := cast.ToIntE(v); e != nil { |
|
return false |
|
} else if t.ArgType == ArgTypeUInt { |
|
return r >= 0 |
|
} |
|
return true |
|
case ArgTypeFloat: |
|
fallthrough |
|
case ArgTypeUFloat: |
|
if r, e := cast.ToFloat64E(v); e != nil { |
|
return false |
|
} else if t.ArgType == ArgTypeUFloat { |
|
return r >= 0 |
|
} |
|
return true |
|
} |
|
} |
|
|
|
// 参数类型 |
|
type ArgType int8 |
|
|
|
const ( |
|
_ ArgType = iota |
|
ArgTypeString |
|
ArgTypeInt |
|
ArgTypeUInt |
|
ArgTypeFloat |
|
ArgTypeUFloat |
|
ArgTypeSelect // 单选 |
|
ArgTypeCheckBox // 多选 |
|
)
|
|
|