tradepose-models 1.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. tradepose_models/__init__.py +44 -0
  2. tradepose_models/auth/__init__.py +13 -0
  3. tradepose_models/auth/api_keys.py +52 -0
  4. tradepose_models/auth/auth.py +20 -0
  5. tradepose_models/base.py +57 -0
  6. tradepose_models/billing/__init__.py +33 -0
  7. tradepose_models/billing/checkout.py +17 -0
  8. tradepose_models/billing/plans.py +32 -0
  9. tradepose_models/billing/subscriptions.py +34 -0
  10. tradepose_models/billing/usage.py +71 -0
  11. tradepose_models/broker/__init__.py +34 -0
  12. tradepose_models/broker/account_config.py +93 -0
  13. tradepose_models/broker/account_models.py +61 -0
  14. tradepose_models/broker/binding.py +54 -0
  15. tradepose_models/broker/connection_status.py +14 -0
  16. tradepose_models/commands/__init__.py +8 -0
  17. tradepose_models/commands/trader_command.py +80 -0
  18. tradepose_models/datafeed/__init__.py +19 -0
  19. tradepose_models/datafeed/events.py +132 -0
  20. tradepose_models/enums/__init__.py +47 -0
  21. tradepose_models/enums/account_source.py +42 -0
  22. tradepose_models/enums/broker_type.py +21 -0
  23. tradepose_models/enums/currency.py +17 -0
  24. tradepose_models/enums/engagement_phase.py +47 -0
  25. tradepose_models/enums/execution_mode.py +16 -0
  26. tradepose_models/enums/export_type.py +23 -0
  27. tradepose_models/enums/freq.py +32 -0
  28. tradepose_models/enums/indicator_type.py +46 -0
  29. tradepose_models/enums/operation_type.py +19 -0
  30. tradepose_models/enums/order_strategy.py +47 -0
  31. tradepose_models/enums/orderbook_event_type.py +29 -0
  32. tradepose_models/enums/persist_mode.py +28 -0
  33. tradepose_models/enums/stream.py +14 -0
  34. tradepose_models/enums/task_status.py +23 -0
  35. tradepose_models/enums/trade_direction.py +42 -0
  36. tradepose_models/enums/trend_type.py +22 -0
  37. tradepose_models/enums/weekday.py +30 -0
  38. tradepose_models/enums.py +32 -0
  39. tradepose_models/events/__init__.py +11 -0
  40. tradepose_models/events/order_events.py +79 -0
  41. tradepose_models/export/__init__.py +19 -0
  42. tradepose_models/export/request.py +52 -0
  43. tradepose_models/export/requests.py +75 -0
  44. tradepose_models/export/task_metadata.py +97 -0
  45. tradepose_models/gateway/__init__.py +19 -0
  46. tradepose_models/gateway/responses.py +37 -0
  47. tradepose_models/indicators/__init__.py +56 -0
  48. tradepose_models/indicators/base.py +42 -0
  49. tradepose_models/indicators/factory.py +254 -0
  50. tradepose_models/indicators/market_profile.md +60 -0
  51. tradepose_models/indicators/market_profile.py +333 -0
  52. tradepose_models/indicators/market_profile_developer.md +1782 -0
  53. tradepose_models/indicators/market_profile_trading.md +1060 -0
  54. tradepose_models/indicators/momentum.py +53 -0
  55. tradepose_models/indicators/moving_average.py +63 -0
  56. tradepose_models/indicators/other.py +40 -0
  57. tradepose_models/indicators/trend.py +80 -0
  58. tradepose_models/indicators/volatility.py +57 -0
  59. tradepose_models/instruments/__init__.py +13 -0
  60. tradepose_models/instruments/instrument.py +87 -0
  61. tradepose_models/scheduler/__init__.py +9 -0
  62. tradepose_models/scheduler/results.py +49 -0
  63. tradepose_models/schemas/__init__.py +15 -0
  64. tradepose_models/schemas/enhanced_ohlcv.py +111 -0
  65. tradepose_models/schemas/performance.py +40 -0
  66. tradepose_models/schemas/trades.py +64 -0
  67. tradepose_models/schemas.py +34 -0
  68. tradepose_models/shared.py +15 -0
  69. tradepose_models/strategy/__init__.py +52 -0
  70. tradepose_models/strategy/base.py +56 -0
  71. tradepose_models/strategy/blueprint.py +55 -0
  72. tradepose_models/strategy/config.py +142 -0
  73. tradepose_models/strategy/entities.py +104 -0
  74. tradepose_models/strategy/helpers.py +173 -0
  75. tradepose_models/strategy/indicator_spec.py +531 -0
  76. tradepose_models/strategy/performance.py +66 -0
  77. tradepose_models/strategy/portfolio.py +171 -0
  78. tradepose_models/strategy/registry.py +249 -0
  79. tradepose_models/strategy/requests.py +33 -0
  80. tradepose_models/strategy/trigger.py +77 -0
  81. tradepose_models/trading/__init__.py +55 -0
  82. tradepose_models/trading/engagement.py +160 -0
  83. tradepose_models/trading/orderbook.py +73 -0
  84. tradepose_models/trading/orders.py +137 -0
  85. tradepose_models/trading/positions.py +78 -0
  86. tradepose_models/trading/trader_commands.py +138 -0
  87. tradepose_models/trading/trades_execution.py +27 -0
  88. tradepose_models/types.py +35 -0
  89. tradepose_models/utils/__init__.py +13 -0
  90. tradepose_models/utils/rate_converter.py +112 -0
  91. tradepose_models/validators.py +32 -0
  92. tradepose_models-1.1.0.dist-info/METADATA +633 -0
  93. tradepose_models-1.1.0.dist-info/RECORD +94 -0
  94. tradepose_models-1.1.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,112 @@
1
+ """Multi-currency rate converter module.
2
+
3
+ Provides currency conversion utilities with USD as the base currency.
4
+ All conversions A → B are executed as A → USD → B.
5
+ """
6
+
7
+ from decimal import Decimal
8
+
9
+ from tradepose_models.enums import Currency
10
+
11
+ # Default exchange rates (1 unit of currency = X USD)
12
+ DEFAULT_RATES: dict[Currency, Decimal] = {
13
+ # Base currencies
14
+ Currency.USD: Decimal("1"),
15
+ Currency.USDT: Decimal("1"),
16
+ # Fiat currencies
17
+ Currency.TWD: Decimal("1") / Decimal("32.5"), # 1 TWD ≈ 0.0308 USD
18
+ Currency.EUR: Decimal("1.08"), # 1 EUR = 1.08 USD
19
+ Currency.JPY: Decimal("1") / Decimal("157"), # 1 JPY ≈ 0.0064 USD
20
+ # Cryptocurrencies
21
+ Currency.BTC: Decimal("95000"), # 1 BTC = 95000 USD
22
+ Currency.ETH: Decimal("3400"), # 1 ETH = 3400 USD
23
+ # Commodities/Indices
24
+ Currency.XAU: Decimal("2600"), # 1 oz Gold = 2600 USD
25
+ Currency.TAIEX: Decimal("200") / Decimal("32.5"), # TAIEX point value: 200 TWD
26
+ }
27
+
28
+
29
+ class RateConverter:
30
+ """Multi-currency rate converter.
31
+
32
+ Uses USD as the base currency for a centralized conversion model.
33
+ All conversions A → B are executed as A → USD → B.
34
+
35
+ Example:
36
+ >>> rates = {Currency.USD: Decimal("1"), Currency.TWD: Decimal("0.0308")}
37
+ >>> converter = RateConverter(rates)
38
+ >>> converter.convert(Decimal("1000"), Currency.USD, Currency.TWD)
39
+ Decimal('32467.532467...')
40
+ """
41
+
42
+ def __init__(self, rates_to_usd: dict[Currency, Decimal]) -> None:
43
+ """Initialize the rate converter.
44
+
45
+ Args:
46
+ rates_to_usd: Exchange rates where each value represents
47
+ how many USD 1 unit of that currency equals.
48
+ Example: {Currency.BTC: Decimal("95000")} means 1 BTC = 95000 USD
49
+
50
+ Raises:
51
+ ValueError: If USD rate is not 1 or any rate is non-positive.
52
+ """
53
+ if rates_to_usd.get(Currency.USD) != Decimal("1"):
54
+ raise ValueError("USD 必須為基準貨幣,匯率必須為 1")
55
+ if any(rate <= 0 for rate in rates_to_usd.values()):
56
+ raise ValueError("所有匯率必須為正數")
57
+ self._rates = rates_to_usd.copy()
58
+
59
+ def convert(
60
+ self,
61
+ amount: Decimal,
62
+ from_currency: Currency,
63
+ to_currency: Currency,
64
+ ) -> Decimal:
65
+ """Convert an amount from one currency to another.
66
+
67
+ Args:
68
+ amount: The amount to convert.
69
+ from_currency: The source currency.
70
+ to_currency: The target currency.
71
+
72
+ Returns:
73
+ The converted amount in the target currency.
74
+
75
+ Raises:
76
+ ValueError: If either currency is not supported.
77
+ """
78
+ if from_currency not in self._rates or to_currency not in self._rates:
79
+ raise ValueError(f"不支援的幣種:{from_currency} 或 {to_currency}")
80
+
81
+ amount_in_usd = amount * self._rates[from_currency]
82
+ return amount_in_usd / self._rates[to_currency]
83
+
84
+ def get_rate(
85
+ self,
86
+ from_currency: Currency,
87
+ to_currency: Currency,
88
+ ) -> Decimal:
89
+ """Get the exchange rate between two currencies.
90
+
91
+ Args:
92
+ from_currency: The source currency.
93
+ to_currency: The target currency.
94
+
95
+ Returns:
96
+ The exchange rate (how many units of to_currency per 1 unit of from_currency).
97
+
98
+ Raises:
99
+ ValueError: If either currency is not supported.
100
+ """
101
+ if from_currency not in self._rates or to_currency not in self._rates:
102
+ raise ValueError(f"不支援的幣種:{from_currency} 或 {to_currency}")
103
+ return self._rates[from_currency] / self._rates[to_currency]
104
+
105
+
106
+ def get_default_converter() -> RateConverter:
107
+ """Get a converter initialized with default exchange rates.
108
+
109
+ Returns:
110
+ A RateConverter instance with DEFAULT_RATES.
111
+ """
112
+ return RateConverter(DEFAULT_RATES)
@@ -0,0 +1,32 @@
1
+ """Shared validation utilities (共用驗證工具).
2
+
3
+ This module contains reusable Pydantic validators and validation functions
4
+ that are used across multiple packages.
5
+
6
+ 這個模組包含跨多個包使用的可重用 Pydantic 驗證器和驗證函數。
7
+
8
+ Example usage:
9
+ from pydantic import BaseModel, field_validator
10
+ from tradepose_models.validators import validate_api_key_format
11
+
12
+ class APIKeyModel(BaseModel):
13
+ key: str
14
+
15
+ @field_validator('key')
16
+ @classmethod
17
+ def validate_key(cls, v):
18
+ return validate_api_key_format(v)
19
+ """
20
+
21
+ # Placeholder for shared validators
22
+ # Validators will be added here as needed
23
+ # 共用驗證器將根據需要添加到這裡
24
+
25
+ # Example structure:
26
+ # def validate_api_key_format(value: str) -> str:
27
+ # """Validate API key format."""
28
+ # if not value.startswith('sk_'):
29
+ # raise ValueError("API key must start with 'sk_'")
30
+ # return value
31
+
32
+ __all__ = []