Skip to content

Commit 95f6dcb

Browse files
committed
pretty annotations & update deps
1 parent d3ce009 commit 95f6dcb

File tree

9 files changed

+1104
-988
lines changed

9 files changed

+1104
-988
lines changed

Makefile

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
PROGRAM_NAME = finam-trade-api
22

3-
.PHONY: help clean dep dep-test sort mypy flake8
3+
.PHONY: help clean dep dep-test sort mypy
44

55
.DEFAULT_GOAL := help
66

@@ -19,6 +19,3 @@ sort:
1919

2020
mypy:
2121
mypy finam_trade_api
22-
23-
flake8:
24-
flake8 finam_trade_api

examples/candles.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
)
99
from finam_trade_api.client import Client
1010

11-
token = os.getenv("TOKEN", "")
11+
token = os.getenv("TOKEN", "CAEQx4uXBhoY976DzzTuCEu0XXVtJ76bj2kvUAhgvX2a")
1212

1313

1414
async def get_day_candles():
@@ -26,10 +26,10 @@ async def get_day_candles():
2626
async def get_in_day_candles():
2727
client = Client(token)
2828
params = IntraDayCandlesRequestModel(
29-
securityBoard="TQBR",
30-
securityCode="SBER",
31-
timeFrame=IntraDayInterval.M1,
32-
intervalFrom="2023-06-07 08:33:52",
29+
securityBoard="FUT",
30+
securityCode="CRH5",
31+
timeFrame=IntraDayInterval.M5,
32+
intervalTo='2025-02-24 14:25:45',
3333
count=10
3434
)
3535
return await client.candles.get_in_day_candles(params)
@@ -38,6 +38,6 @@ async def get_in_day_candles():
3838
if __name__ == "__main__":
3939
import asyncio
4040

41-
print(asyncio.run(get_day_candles()))
41+
# print(asyncio.run(get_day_candles()))
4242

4343
print(asyncio.run(get_in_day_candles()))

finam_trade_api/candles/model.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from enum import Enum
2-
from typing import List, Optional
32

43
from pydantic import BaseModel
54

@@ -19,9 +18,9 @@ class IntraDayInterval(str, Enum):
1918
class BaseCandlesRequestModel(BaseModel):
2019
securityBoard: str
2120
securityCode: str
22-
intervalFrom: Optional[str]
23-
intervalTo: Optional[str]
24-
count: Optional[int]
21+
intervalFrom: str | None = None
22+
intervalTo: str | None
23+
count: int | None
2524

2625

2726
class DayCandlesRequestModel(BaseCandlesRequestModel):
@@ -50,7 +49,7 @@ class DayCandle(BaseCandleModel):
5049

5150

5251
class CandlesResponse(BaseModel):
53-
candles: List[DayCandle]
52+
candles: list[DayCandle]
5453

5554

5655
class DayCandlesResponse(BaseModel):
@@ -62,7 +61,7 @@ class IntraDayCandle(BaseCandleModel):
6261

6362

6463
class InDayCandlesResponse(BaseModel):
65-
candles: List[IntraDayCandle]
64+
candles: list[IntraDayCandle]
6665

6766

6867
class IntraDayCandlesResponse(BaseModel):

finam_trade_api/order/model.py

Lines changed: 60 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from enum import Enum
2-
from typing import List, Optional
32

43
from pydantic import BaseModel
54

@@ -52,20 +51,20 @@ class StopPriceUnits(str, Enum):
5251

5352
class OrdersRequestModel(BaseModel):
5453
clientId: str
55-
includeMatched: Optional[str] = None
56-
includeCanceled: Optional[str] = None
57-
includeActive: Optional[str] = None
54+
includeMatched: str | None = None
55+
includeCanceled: str | None = None
56+
includeActive: str | None = None
5857

5958

6059
class Condition(BaseModel):
6160
type: ConditionType
6261
price: float # цена активации
63-
time: Optional[str] = None
62+
time: str | None = None
6463

6564

6665
class ValidBefore(BaseModel):
6766
type: ValidBeforeType
68-
time: Optional[str] = None
67+
time: str | None = None
6968

7069

7170
class OrderStatus(str, Enum):
@@ -75,29 +74,57 @@ class OrderStatus(str, Enum):
7574
Matched = "Matched"
7675

7776

77+
class StopQuantity(BaseModel):
78+
value: float # Значение объема.
79+
units: StopQuantityUnits # Единицы объема стоп-заявки.
80+
81+
82+
class StopLossModel(BaseModel):
83+
activationPrice: float
84+
price: float | None = None
85+
marketPrice: bool
86+
quantity: StopQuantity
87+
time: int = 0 # Защитное время, сек.
88+
useCredit: bool = False
89+
90+
91+
class StopPrice(BaseModel):
92+
value: float # Значение объема.
93+
units: StopPriceUnits # Единицы объема стоп-заявки.
94+
95+
96+
class TakeProfitModel(BaseModel):
97+
activationPrice: float
98+
correctionPrice: StopPrice | None = None
99+
spreadPrice: StopPrice | None = None
100+
marketPrice: bool
101+
quantity: StopQuantity
102+
time: int = 0 # Защитное время, сек.
103+
useCredit: bool = False
104+
78105
class Order(BaseModel):
79106
orderNo: int
80107
transactionId: int
81-
securityCode: Optional[str] = None
82-
clientId: Optional[str] = None
108+
securityCode: str | None = None
109+
clientId: str | None = None
83110
status: OrderStatus
84111
buySell: OrderType
85-
createdAt: Optional[str] = None
86-
acceptedAt: Optional[str] = None
87-
price: float = 0 # В последующих версиях API поле для рыночных заявок будет равно null, а не 0.
112+
createdAt: str | None = None
113+
acceptedAt: str | None = None
114+
price: float | None = None
88115
quantity: int
89116
balance: int
90-
message: Optional[str] = None
91-
currency: Optional[str] = None
92-
condition: Optional[Condition] = None
93-
validBefore: Optional[ValidBefore] = None
94-
securityBoard: Optional[str] = None
117+
message: str | None = None
118+
currency: str | None = None
119+
condition: Condition | None = None
120+
validBefore: ValidBefore | None = None
121+
securityBoard: str | None = None
95122
market: Market
96123

97124

98125
class OrdersResponseData(BaseModel):
99126
clientId: str
100-
orders: List[Order]
127+
orders: list[Order]
101128

102129

103130
class OrdersResponseModel(BaseModel):
@@ -111,25 +138,25 @@ class StopOrder(BaseModel):
111138
market: Market
112139
clientId: str
113140
buySell: OrderType
114-
expirationDate: Optional[str] = None
141+
expirationDate: str | None = None
115142
linkOrder: int
116-
validBefore: Optional[ValidBefore] = None
143+
validBefore: ValidBefore | None = None
117144
status: OrderStatus
118-
message: Optional[str] = None
145+
message: str | None = None
119146
orderNo: int
120147
tradeNo: int
121-
acceptedAt: Optional[str] = None
122-
canceledAt: Optional[str] = None
123-
currency: Optional[str] = None
148+
acceptedAt: str | None = None
149+
canceledAt: str | None = None
150+
currency: str | None = None
124151
takeProfitExtremum: float
125152
takeProfitLevel: float
126-
stopLoss: Optional["StopLossModel"] = None
127-
takeProfit: Optional["TakeProfitModel"] = None
153+
stopLoss: StopLossModel | None = None
154+
takeProfit: TakeProfitModel | None = None
128155

129156

130157
class StopOrdersResponseData(BaseModel):
131158
clientId: str
132-
stops: List[StopOrder]
159+
stops: list[StopOrder]
133160

134161

135162
class StopOrdersResponseModel(BaseModel):
@@ -155,37 +182,8 @@ class CreateOrderRequestModel(BaseModel):
155182
useCredit: bool = False
156183
price: float | None = None
157184
property: PropertyType
158-
condition: Optional[Condition] = None
159-
validBefore: Optional[ValidBefore] = None
160-
161-
162-
class StopQuantity(BaseModel):
163-
value: float # Значение объема.
164-
units: StopQuantityUnits # Единицы объема стоп-заявки.
165-
166-
167-
class StopLossModel(BaseModel):
168-
activationPrice: float
169-
price: float = 0
170-
marketPrice: bool
171-
quantity: StopQuantity
172-
time: int = 0 # Защитное время, сек.
173-
useCredit: bool = False
174-
175-
176-
class StopPrice(BaseModel):
177-
value: float # Значение объема.
178-
units: StopPriceUnits # Единицы объема стоп-заявки.
179-
180-
181-
class TakeProfitModel(BaseModel):
182-
activationPrice: float
183-
correctionPrice: Optional[StopPrice] = None
184-
spreadPrice: Optional[StopPrice] = None
185-
marketPrice: bool
186-
quantity: StopQuantity
187-
time: int = 0 # Защитное время, сек.
188-
useCredit: bool = False
185+
condition: Condition | None = None
186+
validBefore: ValidBefore | None = None
189187

190188

191189
class CreateStopOrderRequestModel(BaseModel):
@@ -195,16 +193,16 @@ class CreateStopOrderRequestModel(BaseModel):
195193
buySell: OrderType
196194
stopLoss: StopLossModel
197195
takeProfit: TakeProfitModel
198-
expirationDate: Optional[str] = None
199-
linkOrder: Optional[int] = None
200-
validBefore: Optional[ValidBefore] = None
196+
expirationDate: str | None = None
197+
linkOrder: int | None = None
198+
validBefore: ValidBefore | None = None
201199

202200

203201
class CreateStopOrderData(BaseModel):
204202
clientId: str
205203
stopId: int
206-
securityCode: Optional[str] = None
207-
securityBoard: Optional[str] = None
204+
securityCode: str | None = None
205+
securityBoard: str | None = None
208206

209207

210208
class CreateStopOrderResponseModel(BaseModel):

finam_trade_api/portfolio/model.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from typing import List
2-
31
from pydantic import BaseModel
42

53
from finam_trade_api.models import Market
@@ -61,9 +59,9 @@ class PortfolioResponseData(BaseModel):
6159
content: PortfolioContent
6260
equity: float
6361
balance: float
64-
positions: List[Position]
65-
currencies: List[Currency]
66-
money: List[Money]
62+
positions: list[Position]
63+
currencies: list[Currency]
64+
money: list[Money]
6765

6866

6967
class PortfolioResponseModel(BaseModel):

finam_trade_api/securities/model.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from typing import List, Optional
2-
31
from pydantic import BaseModel
42

53
from finam_trade_api.models import Market
@@ -12,19 +10,19 @@ class Security(BaseModel):
1210
decimals: int
1311
lotSize: int
1412
minStep: int
15-
currency: Optional[str] = None
16-
shortName: Optional[str] = None
13+
currency: str | None = None
14+
shortName: str | None = None
1715
properties: int
18-
timeZoneName: Optional[str] = None
16+
timeZoneName: str | None = None
1917
bpCost: float
2018
accruedInterest: float
2119
priceSign: str
22-
ticker: Optional[str] = None
20+
ticker: str | None = None
2321
lotDivider: int
2422

2523

2624
class SecurityData(BaseModel):
27-
securities: List[Security]
25+
securities: list[Security]
2826

2927

3028
class SecurityResponseModel(BaseModel):

0 commit comments

Comments
 (0)