Strategy 模式

证券交易费用

https://www.hkex.com.hk/Services/Rules-and-Forms-and-Fees/Fees/Securities-(Hong-Kong)/Trading/Transaction?sc_lang=en

在香港一港元是等于100仙的,一仙就是大陆的1分钱。十个一仙就是一毫(即一角)。


买卖HKM中的证券时,要缴付的费用如下:
佣金 brokerage
经纪商(券商)可以与客户自用商议佣金收费。
证监会交易征费 SFC Transaction Levy
由2014年11月1日起,买卖双方须分别缴纳每宗交易金额0.0027%的证监会交易征费(计至最接近的仙位数)予证券及期货事务监察委员会。证券庄家交易则获豁免。
财务汇报局交易征费 FRC Transaction Levy
由2022年1月1日起,买卖双方须分别缴纳每宗交易金额0.00015%的财务汇报局交易征费(计至最接近的仙位数)予财务汇报局。证券庄家交易则获豁免。
交易费 Trading Fee
买卖双方须各付每宗交易金额0.005%的交易费(计至最接近的仙位数)予交易所。
不同类别的交易所买卖产品之证券庄家交易将采用不同的交易费用豁免率。
交易系统使用费 Trading Tariff
买卖双方均须各付每宗交易港币0.50元的交易系统使用费。自2021年5月31日起,固定收益或货币市场交易所买卖基金之任何交易,
均获豁免缴交交易系统使用费直至另行通知。至于经纪是否会将交易系统使用费转嫁投资者,则属其商业决定。
股票印花税 Stamp Duty on Stock Transaction
除非另有指示外,股票转让时,买卖双方均须分别缴纳每宗交易金额0.13%的股票印花税(不足一元亦作一元计)。
请按此下载毋须缴纳香港印花税的证券名单。所有股票期权庄家经销交易、证券庄家交易则获减免。
转手纸印花税 Transfer Deed Stamp Duty
不论股份数目多少,每张新转手纸须缴纳转手纸印花税港币5元予政府,由注册股份持有人,即卖方负责缴付。
过户费用 Transfer Fee
不论股份数目多少,上市公司之过户登记处收取新发股票费用,收费每张港币2.50元,由买方支付。

Strategy 模式解决的问题

Strategy 模式和 Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。
Strategy 模式将逻辑(算法)封装到一个类(Context)里面,
通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。
// Transaction Tax Charged
class  transaction_tax_charged_strategy {
public:
    // 计算费用
    virtual double calculate(const transaction_tax_charged_context & ctx) = 0;
    
    virtual ~transaction_tax_charged_strategy() { }
};

// 委托单的交易费用的计算 包括bid、ask类型的订单费用
class entrust_order_ttc_strategy : public transaction_tax_charged_strategy {
    virtual double calculate(const transaction_tax_charged_context & ctx) {
        
    }
};

// 部成单的交易费用的计算 包括bid、ask类型的订单费用
class partially_filled_order_ttc_strategy : public transaction_tax_charged_strategy {
    virtual double calculate(const transaction_tax_charged_context & ctx) {
        
    }
};

// 全成成单的交易费用的计算 包括bid、ask类型的订单费用
class filled_order_ttc_strategy : public transaction_tax_charged_strategy {
    virtual double calculate(const transaction_tax_charged_context & ctx) {
        
    }
};

// 改单的交易费用的计算 包括bid、ask类型的订单费用
// 委托改单可不用处理
class amend_order_ttc_strategy : public transaction_tax_charged_strategy {
    virtual double calculate(const transaction_tax_charged_context & ctx) {
        
    }
};

// Strategy 通过“组合”(委托)方式实现算法(实现)的异构,
// 而 Template 模 式则采取的是继承的方式 
// 这两个模式的区别也是继承和组合两种实现接口重用的方式的区别
class order_transaction_tax_carged {
private:
    transaction_tax_charged_strategy *ttc_ptr_;
    
public:
    order_transaction_tax_cargedv(ttcs_factory *ttcsf) {
        this->ttc_ptr_ = ttcsf->create_ttc_strategy();
    }
    
    ~order_transaction_tax_cargedv() {
        delete ttc_ptr_;
    }
    
    double calc_ttc() {
        transaction_tax_charged_context ctx;
        //...
        return ttc_ptr->calculate(ctx);
    }
};

Strategy 模式和 Template 模式实际是实现一个抽象接口的两种方式:继承和组合之 间的区别。要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体 的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象 中,将抽象接口放在组合类中。这两种方式各有优缺点,先列出来:

继承:

  • 优点
  1. 易于修改和扩展那些被复用的实现。
  • 缺点
  1. 破坏了封装性,继承中父类的实现细节暴露给子类了;
  2. “白盒”复用,原因在 1)中;
  3. 当 父类的实现更改时,其所有子类将不得不随之改变
  4. 从父类继承而来的实现在运行期间不能改变(编译期间就已经确定了)。

组合

  • 优点
  1. “黑盒”复用,因为被包含对象的内部细节对外是不可见的;
  2. 封装性好,原因为 1);
  3. 实现和抽象的依赖性很小(组合对象和被组合对象之间的依赖性小);
  4. 可以在运行期间动态定义实现(通过一个指向相同类型的指针,典型的是抽象 基类的指针)。
  • 缺点
  1. 系统中对象过多。

-- 因此在面向对象的设计中的有一条很重要的原则就是:优先使用(对象)组合,而非(类)继承(Favor Composition Over Inheritance)。

你可能感兴趣的:(Strategy 模式)