标准类型参数

from typing import Sized


class TradeData:
    symbol: str = ''
    datatime: str = ''
    direction: str = ''
    price: float = 0.0
    volume: float = 0.0
    size: int = 0
    def __init__(
        self,
        symbol: str,
        datatime: str,
        direction: str,
        price: float,
        volume: float,
        size: int
    ):
        self.symbol = symbol
        self.datatime = datatime
        self.direction = direction
        self.price = price
        self.volume = volume
        self.size = size
    def calculate_trading_value(self, size:int) -> float:
        '''计算成交金额的对象方法'''
        value = self.price * self.volume * self.size
        return value
    def to_str(self)->str:
    
        text = (f'{self.datatime}{self.direction}{self.symbol}'
                f'{self.volume}手@{self.price}')
        return text
    def write_trade_log(self, strategy_name:str) -> None:
        ''''''
      
        print(f'{strategy_name}成交数据', self.to_str())


class StockTradeData(TradeData):

    def calculate_cash_change(self):
        '''计算股票现金变化'''
        value = self.price * self.volume * self.size    
        return value
    def write_trade_log(self, strategy_name:str) -> None:
        ''''''
      
        print(f'{strategy_name}股票成交数据', self.to_str())


class FuturesTradeData(TradeData):

    margin_rate = 0.0

    def __init__(
        self,
        symbol: str,
        datatime: str,
        direction: str,
        price: float,
        volume: float,
        size: int,
        margin_rate: float 
    ):
        super().__init__(symbol,datatime,direction,price,volume,size)
        self.margin_rate = margin_rate

    def calculate_cash_change(self):
        '''计算期货成交现金变化'''
        value = self.price * self.volume * self.size    
        return value
    def to_str(self)->str:
        ''''''
        cash_change = self.calculate_cash_change()
        text = (f'{self.datatime}{self.direction}{self.symbol}'
                f'{self.volume}手@{self.price} '
                f'消耗保证金{cash_change}')
            
        return text

    def write_trade_log(self, strategy_name:str) -> None:
        ''''''
      
        print(f'{strategy_name}期货成交数据', self.to_str())
    

def print_strategy_trade_twice(trade: TradeData, strategy_name: str):
    trade.write_trade_log(strategy_name)
    trade.write_trade_log(strategy_name)

In [5]: print_strategy_trade_twice(trade,'demo策略')
demo策略成交数据 20200916 10:45:00卖出EURUSD100000手@1.4
demo策略成交数据 20200916 10:45:00卖出EURUSD100000手@1.4

In [6]: print_strategy_trade_twice(stock_trade,'demo策略')
demo策略股票成交数据 20200916 9:46:00卖出6000361000手@30
demo策略股票成交数据 20200916 9:46:00卖出6000361000手@30

In [7]: print_strategy_trade_twice(futures_trade,'demo策略')
demo策略期货成交数据 2010220买入if20101手@4300 消耗保证金1290000
demo策略期货成交数据 2010220买入if20101手@4300 消耗保证金1290000

定义一个类,不管定义时用的是父类还是子类,在使用时,父类和子类中只要都有相同名字的方法,传入父类和子类都可以正确运行,这就是标准类型参数的好处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值