Move factor helper to a classmethod
							parent
							
								
									e008f69505
								
							
						
					
					
						commit
						eb5a4f7eeb
					
				| 
						 | 
					@ -17,6 +17,7 @@
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
numpy data source coversion helpers.
 | 
					numpy data source coversion helpers.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					from __future__ import annotations
 | 
				
			||||||
from typing import Any
 | 
					from typing import Any
 | 
				
			||||||
import decimal
 | 
					import decimal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,16 +99,43 @@ class Symbol(BaseModel):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    key: str
 | 
					    key: str
 | 
				
			||||||
    type_key: str  # {'stock', 'forex', 'future', ... etc.}
 | 
					    tick_size: float = 0.01
 | 
				
			||||||
    tick_size: float
 | 
					    lot_tick_size: float = 0.0  # "volume" precision as min step value
 | 
				
			||||||
    lot_tick_size: float  # "volume" precision as min step value
 | 
					    tick_size_digits: int = 2
 | 
				
			||||||
    tick_size_digits: int
 | 
					    lot_size_digits: int = 0
 | 
				
			||||||
    lot_size_digits: int
 | 
					 | 
				
			||||||
    broker_info: dict[str, dict[str, Any]] = {}
 | 
					    broker_info: dict[str, dict[str, Any]] = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # specifies a "class" of financial instrument
 | 
					    # specifies a "class" of financial instrument
 | 
				
			||||||
    # ex. stock, futer, option, bond etc.
 | 
					    # ex. stock, futer, option, bond etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # @validate_arguments
 | 
				
			||||||
 | 
					    @classmethod
 | 
				
			||||||
 | 
					    def from_broker_info(
 | 
				
			||||||
 | 
					        cls,
 | 
				
			||||||
 | 
					        broker: str,
 | 
				
			||||||
 | 
					        symbol: str,
 | 
				
			||||||
 | 
					        info: dict[str, Any],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # XXX: like wtf..
 | 
				
			||||||
 | 
					    # ) -> 'Symbol':
 | 
				
			||||||
 | 
					    ) -> None:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        tick_size = info.get('price_tick_size', 0.01)
 | 
				
			||||||
 | 
					        lot_tick_size = info.get('lot_tick_size', 0.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return Symbol(
 | 
				
			||||||
 | 
					            key=symbol,
 | 
				
			||||||
 | 
					            tick_size=tick_size,
 | 
				
			||||||
 | 
					            lot_tick_size=lot_tick_size,
 | 
				
			||||||
 | 
					            tick_size_digits=float_digits(tick_size),
 | 
				
			||||||
 | 
					            lot_size_digits=float_digits(lot_tick_size),
 | 
				
			||||||
 | 
					            broker_info={broker: info},
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def type_key(self) -> str:
 | 
				
			||||||
 | 
					        return list(self.broker_info.values())[0]['asset_type']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def brokers(self) -> list[str]:
 | 
					    def brokers(self) -> list[str]:
 | 
				
			||||||
        return list(self.broker_info.keys())
 | 
					        return list(self.broker_info.keys())
 | 
				
			||||||
| 
						 | 
					@ -138,32 +166,6 @@ class Symbol(BaseModel):
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@validate_arguments
 | 
					 | 
				
			||||||
def mk_symbol(
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    key: str,
 | 
					 | 
				
			||||||
    type_key: str,
 | 
					 | 
				
			||||||
    tick_size: float = 0.01,
 | 
					 | 
				
			||||||
    lot_tick_size: float = 0,
 | 
					 | 
				
			||||||
    broker_info: dict[str, Any] = {},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
) -> Symbol:
 | 
					 | 
				
			||||||
    '''
 | 
					 | 
				
			||||||
    Create and return an instrument description for the
 | 
					 | 
				
			||||||
    "symbol" named as ``key``.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    '''
 | 
					 | 
				
			||||||
    return Symbol(
 | 
					 | 
				
			||||||
        key=key,
 | 
					 | 
				
			||||||
        type_key=type_key,
 | 
					 | 
				
			||||||
        tick_size=tick_size,
 | 
					 | 
				
			||||||
        lot_tick_size=lot_tick_size,
 | 
					 | 
				
			||||||
        tick_size_digits=float_digits(tick_size),
 | 
					 | 
				
			||||||
        lot_size_digits=float_digits(lot_tick_size),
 | 
					 | 
				
			||||||
        broker_info=broker_info,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def from_df(
 | 
					def from_df(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    df: pd.DataFrame,
 | 
					    df: pd.DataFrame,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue