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