美文网首页
tick的整数倍

tick的整数倍

作者: antony已经被占用 | 来源:发表于2020-08-13 08:32 被阅读0次

订单(order)有效性检查是交易系统一个重要的基础功能。当一个订单从柜台进入交易系统后,会经历几十项不同规则的检查,主要涉及订单自身的合法性、以及当时交易系统和合约的状态、权限等等不同的领域。
其中一个典型的检查是,价格是否是最小变动价位(tick)的整数倍。这是之前介绍价格波动带时提到的合约价格不连续的问题的延伸。

  合约乘数:每点300元
  报价单位:指数点
   最小变动价位:0.2点

以上述合约表中的描述来说,因为tick=0.2,我们会在某些交易软件的五档行情表中看到类似这样的价格列表:

image.png
来源:
https://www.wenhuacaijing.hk/wenti/174.html

那么,这个问题就转换成了一个简单的数学问题:
如何判断一个数是另外一个数的倍数?

JAVA BigDecimal的实现

package com.github.tdd.finance;

import java.math.BigDecimal;

public class TickCheckRule {
    public boolean checkTick(BigDecimal price, BigDecimal tick) throws Exception {
        if (tick.compareTo(BigDecimal.ZERO)==0)
            throw new Exception("tick should not be ZERO");
       //取余
        BigDecimal number= price.remainder(tick);
        if(number.compareTo(BigDecimal.ZERO) == 0) {
            return true;
        } else
            return false;
    }
}

然后写几个用例来测试一下

package com.github.tdd.finance;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.math.BigDecimal;

import static org.assertj.core.api.Assertions.assertThat;

public class TestTick {

    TickCheckRule rule = new TickCheckRule();

    @Test
    public void tickShouldNotBeZero(){
        BigDecimal price = BigDecimal.valueOf(2.3);
        BigDecimal tick = new BigDecimal("0");
        Assertions.assertThrows(Exception.class, () -> {
            rule.checkTick(price,tick);
        });
    }
    @Test
    public void NotTickVerySmall() throws Exception {
        BigDecimal price = new BigDecimal("100.10000001");
        BigDecimal tick = new BigDecimal("0.1");
      assertThat(rule.checkTick(price,tick)).isFalse();
    }
    @Test
    public void DividedByTick() throws Exception {
        BigDecimal price = new BigDecimal("0.10");
        BigDecimal tick = new BigDecimal("0.1");
        assertThat(rule.checkTick(price,tick)).isTrue();
    }
    @Test
    public void notValidEndless() throws Exception {
        BigDecimal price = new BigDecimal("4");
        BigDecimal tick = new BigDecimal("3");
        assertThat(rule.checkTick(price,tick)).isFalse();
    }
}

那么问题来了,在现实中代码是用C++编写,并没有使用类似BigDecimal的库来专门处理数学运算。价格是一个float类型的浮点数。

JAVA Float版本

相关文章

  • tick的整数倍

    订单(order)有效性检查是交易系统一个重要的基础功能。当一个订单从柜台进入交易系统后,会经历几十项不同规则的检...

  • 2022-05-03

    fastadmin 打卡 tick 淘宝币 打卡 tick write log 打卡 tick. 背单词...

  • 《Tick Tick Boom》

    其实我一直在思考到底Jon听见的倒数是什么?当然从本人的经历来看,这很有可能是生命时刻的倒数,但在我看来,这更像是...

  • 2022-05-02

    fastadmin 打卡 tick 淘金币 打卡 tick 背英语单词 打卡 tick 今日必做之事: 找...

  • [shared hook]GM/Tick

    原文链接:GM/Tick 函数原型: GM:Tick() 描述: 每一server tick都会被调用, 在服务器...

  • Tick or Tick 时钟问题

    一个很绕的计算题 hdu~[Tick and Tick]http://acm.hdu.edu.cn/showpro...

  • linux tickGet()

    tickGet()返回的是从系统启动开始tick计数后的总的tick数目。 tick是啥,是“滴答”,它是一个数值...

  • 10. ggplot2坐标轴刻度位置(breaks)和标签(la

      axis tick marks和legend tick marks是scale breaks的特殊案例,通过s...

  • 杭电-1006 Tick and Tick

    这题需要一些耐心,准备好了就来吧。 我们理解题目意思的时候注意,A hand is happy if it is ...

  • matplotlib中如何将坐标轴的刻度设置向内或向外

    什么是坐标轴的Tick 坐标轴的tick就是指坐标轴的刻度。Tick的意思有时钟的滴答声,也有钩号的意思。参考下面...

网友评论

      本文标题:tick的整数倍

      本文链接:https://www.haomeiwen.com/subject/jeaydktx.html