六种订单类型

一般的成熟的证券市场有这样六种订单类型:市价买入、市价卖出,限价买入、限价卖出,止损买入、止损卖出。其他什么电话预警订单...就属于扯淡类型的了也可以理解为三种(市价订单、限价订单、止损订单)。Buy-Market order,Entry limit,Entry stop;Sell-Market order,Entry limit,Entry stop. Bid-Ask.
  第一种市价订单是最好理解的,但中国股市目前还没有。就是以目前的市价成交,无论buy or sell都会立即成交,当然当出现重大数据时这种订单比较冒险,价格会瞬间跳动,可能成交不理想,但据我了解,绝大多数的市场参与者都用这种订单.
第二种和第三种比较难分清,因为只有在可以做空的市场才有这两种订单,中国股市就是这种“限价订单”吧,输入自己想成交的价格就可以了。但美国股市或外汇市场却不一样,比如现在25美金一股YHOO,我26元买入叫止损买入,26元卖出是限价卖出;24元买入是限价买入,24元卖出是止损卖出。先插一句这个止损买入或卖出是直接下订单,而不是我已经25元揸(买入)10股了,我在26元设置限价(止赢)在24元设置止损,这个要区别开。总之, 我是这样理解的止损订单属于追涨杀跌,而限价订单属于高抛低吸!
有人肯定对止损订单很奇怪,其实这种订单在市场中要比限价用的还多。举个例子:我们假设现在中海发展6元一股,止损买入就是说要比市价6元高买入,那我就设置7元买入。这样不是很赔吗?明明6元能买到为什么要等到它7元。如果你是trader肯定不会奇怪,因为现在6元我不确定它是否能涨还是跌,可能6元到6.8元之间是成交密集区或者是套牢比较多,所以6.8很难突破,一旦突破6.8可以马上就有冲击8元的可能。但是如果我现在6元就买入,可能有50%的几率下跌,那何不等它突破6.8后有80%的几率上涨时在做!所以设置止损买入,因为股价可以冲破6.8后迅速跳空来不及买入所以先止损买入,在止损买入的情况下可以设置这单的止损(比如6.7),但股价冲破6.8不能上去又回来时止损出局。
做投机要有自己的系统才可以,听说现在先进的系统都已经设置程序直接用计算机买卖了。你的系统很重要,哪些指标、形态、数据符合系统才能进场,买入后如果下跌怎么办?如果震荡怎么办?如果上涨怎么办?价格的支撑位和阻力位是多少?你的盈利目标和亏损承受是多少?你何时加仓或锁单,连续盈利或连续亏损怎么办?单边市和震荡市你如何应对?大盘涨跌平你怎样应对?你的风险组合是怎样?你了解自己吗,你适合长线还是短线?喜欢追涨还是求稳?(这里成熟的市场主要靠技术分析,很多东西都是相对对称的,或者是局部有规律整体没规律的,多因素共振的市场)价格围绕价值上下波动,除去技术因素最重要的还是资金管理、风险管理和人性管理。千元的单子很多人能很快翻倍,但上万元的单子可能你就不赚钱了,道理很简单!
市场中的一切都是数字,我们要的就是概率!风报比(风险报酬比)至关重要,只有好的风报比才能入场,比如你可能10单只做对3单,但你每次做对时盈利50%,做错时亏损20%,但总体上来讲你还是盈利的!具体就不多说了。
<think>好的,用户想在Spring Boot中实现订单类型的枚举类型,并询问最佳实践。我需要先回顾Spring Boot中枚举的使用场景,尤其是在订单类型这类有限选项的情况下。枚举在Java中非常适合表示固定的常量集合,比如订单类型可能有购买、退货、兑换等。 首先,用户可能需要将枚举存储到数据库中,这时候通常会使用JPA的@Enumerated注解。这里需要注意EnumType.ORDINAL和STRING的区别,ORDINAL存储的是枚举的顺序,而STRING存储的是枚举的名称。最佳实践是使用STRING,因为即使枚举顺序改变,数据也不会出错。 接下来,考虑如何在REST API中处理枚举。Spring MVC默认可以将字符串参数转换为枚举类型,但为了更好的前后端交互,可能需要自定义序列化和反序列化逻辑。例如,使用@JsonValue和@JsonCreator注解,确保JSON中使用的是用户友好的名称而不是枚举的name()值。 另外,用户可能需要在数据库中存储枚举的描述信息,而不仅仅是名称。这时候可以在枚举中定义额外的字段,比如code和description,并在构造函数中初始化。这样在实体类中,可以通过@Enumerated(EnumType.STRING)来存储code,同时提供可读的description用于前端显示。 还有,验证用户输入是否为有效的枚举值。可以使用@Valid注解配合自定义验证器,或者在DTO中使用@Pattern注解限制输入的字符串必须匹配枚举的某个值。不过更推荐使用Spring的Converter或转换服务,自动处理参数绑定时的类型转换,并抛出有意义的错误信息。 此外,考虑国际化的需求,可能需要根据不同的语言返回不同的描述信息。这时候可以将description设计为从资源文件中读取,但通常在枚举中直接定义多语言的字段可能更简单,或者在后端处理翻译逻辑。 测试也是重要的一环,确保枚举值能够正确持久化到数据库,并且在API请求中能够正确转换。可以编写单元测试和集成测试,使用@DataJpaTest和@WebMvcTest来分别测试持久层和控制器层。 最后,参考Spring官方文档和社区的最佳实践,比如使用Project Lombok的@Getter简化代码,保持枚举类的简洁和可维护性。同时,确保枚举的命名清晰,符合业务需求,避免将来扩展时的冲突。</think>在Spring Boot中实现订单类型枚举的最佳实践可分为以下几个关键步骤: ### 一、基础枚举定义 ```java public enum OrderType { PURCHASE("PURCHASE", "购买订单"), RETURN("RETURN", "退货订单"), EXCHANGE("EXCHANGE", "兑换订单"); private final String code; private final String description; OrderType(String code, String description) { this.code = code; this.description = description; } // 使用@JsonValue确保序列化时输出code @JsonValue public String getCode() { return code; } @JsonCreator public static OrderType fromCode(String code) { return Arrays.stream(OrderType.values()) .filter(type -> type.code.equalsIgnoreCase(code)) .findFirst() .orElseThrow(() -> new IllegalArgumentException("无效的订单类型")); } } ``` ### 二、数据库映射 在JPA实体中使用`@Enumerated`注解: ```java @Entity public class Order { @Enumerated(EnumType.STRING) // 推荐使用STRING而非ORDINAL @Column(length = 20) private OrderType orderType; } ``` 此方式会将枚举的`code`值存储为字符串,保证数据库可读性和枚举顺序无关性[^1] ### 三、DTO序列化处理 ```java public class OrderDto { @Schema(description = "订单类型", example = "PURCHASE") @NotNull(message = "订单类型不能为空") private OrderType orderType; } ``` Spring Boot会自动处理枚举与JSON字符串的转换[^2] ### 四、验证增强 1. 自定义验证注解: ```java @Target({FIELD, PARAMETER}) @Retention(RUNTIME) @Constraint(validatedBy = ValidOrderTypeValidator.class) public @interface ValidOrderType { String message() default "无效的订单类型"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } ``` 2. 验证器实现: ```java public class ValidOrderTypeValidator implements ConstraintValidator<ValidOrderType, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { return Arrays.stream(OrderType.values()) .anyMatch(type -> type.getCode().equalsIgnoreCase(value)); } } ``` ### 五、国际化支持 在`messages.properties`中配置: ```properties enum.OrderType.PURCHASE=Purchase Order enum.OrderType.RETURN=Return Order ``` 通过MessageSource获取本地化描述: ```java public String getLocalizedDescription(OrderType type, Locale locale) { return messageSource.getMessage("enum.OrderType." + type.name(), null, locale); } ``` ### 六、最佳实践建议 1. **不可变性**:确保枚举字段为final 2. **文档化**:使用Swagger的`@Schema`注解说明枚举值 3. **异常处理**:在`@ExceptionHandler`中处理`IllegalArgumentException` 4. **性能优化**:缓存`values()`数组的遍历结果 5. **测试覆盖**: ```java @Test void should_convert_from_code() { assertThat(OrderType.fromCode("PURCHASE")).isEqualTo(OrderType.PURCHASE); } ``` ### 七、进阶实现 1. **数据库转换器**(适用于复杂映射): ```java @Converter(autoApply = true) public class OrderTypeConverter implements AttributeConverter<OrderType, String> { @Override public String convertToDatabaseColumn(OrderType attribute) { return attribute.getCode(); } @Override public OrderType convertToEntityAttribute(String dbData) { return OrderType.fromCode(dbData); } } ``` 2. **Spring Data查询支持**: ```java public interface OrderRepository extends JpaRepository<Order, Long> { List<Order> findByOrderType(OrderType orderType); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值