Можно задавать фирму для фьючерсов

This commit is contained in:
Игорь Чечет
2021-10-05 22:48:46 +05:00
parent 31e973cf1f
commit 4312d89ab4

View File

@@ -3,6 +3,8 @@ from QuikPy import QuikPy # Работа с Quik из Python через LUA с
def GetAllAccounts(): def GetAllAccounts():
"""Получение всех торговых счетов""" """Получение всех торговых счетов"""
futuresFirmId = 'SPBFUT' # Фирма для фьючерсов. Измените, если требуется на фирму, которую для фьючерсов поставил ваш брокер
classCodes = qpProvider.GetClassesList()['data'] # Список классов classCodes = qpProvider.GetClassesList()['data'] # Список классов
classCodesList = classCodes[:-1].split(',') # Удаляем последнюю запятую, разбиваем значения по запятой classCodesList = classCodes[:-1].split(',') # Удаляем последнюю запятую, разбиваем значения по запятой
tradeAccounts = qpProvider.GetTradeAccounts()['data'] # Все торговые счета tradeAccounts = qpProvider.GetTradeAccounts()['data'] # Все торговые счета
@@ -26,7 +28,7 @@ def GetAllAccounts():
# Инструменты. Если выводить на экран, то занимают много места. Поэтому, закомментировали # Инструменты. Если выводить на экран, то занимают много места. Поэтому, закомментировали
# classSecurities = qpProvider.GetClassSecurities(classCode)['data'][:-1].split(',') # Список инструментов класса. Удаляем последнюю запятую, разбиваем значения по запятой # classSecurities = qpProvider.GetClassSecurities(classCode)['data'][:-1].split(',') # Список инструментов класса. Удаляем последнюю запятую, разбиваем значения по запятой
# print(f' - Тикеры ({classSecurities})') # print(f' - Тикеры ({classSecurities})')
if 'SPBFUT' in firmId: # Для фьючерсов свои расчеты if firmId == futuresFirmId: # Для фьючерсов свои расчеты
# Лимиты # Лимиты
print(f'- Фьючерсный лимит {qpProvider.GetFuturesLimit(firmId, tradeAccountId, 0, "SUR")["data"]["cbplimit"]} SUR') print(f'- Фьючерсный лимит {qpProvider.GetFuturesLimit(firmId, tradeAccountId, 0, "SUR")["data"]["cbplimit"]} SUR')
# Позиции # Позиции
@@ -61,7 +63,7 @@ def GetAllAccounts():
isBuy = firmStopOrder['flags'] & 0b100 != 0b100 # Заявка на покупку isBuy = firmStopOrder['flags'] & 0b100 != 0b100 # Заявка на покупку
print(f'- Стоп заявка номер {firmStopOrder["order_num"]} {"Покупка" if isBuy else "Продажа"} {firmStopOrder["class_code"]}.{firmStopOrder["sec_code"]} {firmStopOrder["qty"]} @ {firmStopOrder["price"]}') print(f'- Стоп заявка номер {firmStopOrder["order_num"]} {"Покупка" if isBuy else "Продажа"} {firmStopOrder["class_code"]}.{firmStopOrder["sec_code"]} {firmStopOrder["qty"]} @ {firmStopOrder["price"]}')
def GetAccount(ClientCode='', FirmId='SPBFUT', TradeAccountId='SPBFUT00PST', LimitKind=0, CurrencyCode='SUR'): def GetAccount(ClientCode='', FirmId='SPBFUT', TradeAccountId='SPBFUT00PST', LimitKind=0, CurrencyCode='SUR', IsFutures=True):
"""Получение торгового счета. По умолчанию, выдается счет срочного рынка""" """Получение торгового счета. По умолчанию, выдается счет срочного рынка"""
classCodes = qpProvider.GetClassesList()['data'] # Список классов classCodes = qpProvider.GetClassesList()['data'] # Список классов
moneyLimits = qpProvider.GetMoneyLimits()['data'] # Все денежные лимиты (остатки на счетах) moneyLimits = qpProvider.GetMoneyLimits()['data'] # Все денежные лимиты (остатки на счетах)
@@ -70,7 +72,7 @@ def GetAccount(ClientCode='', FirmId='SPBFUT', TradeAccountId='SPBFUT00PST', Lim
stopOrders = qpProvider.GetAllStopOrders()['data'] # Все стоп заявки stopOrders = qpProvider.GetAllStopOrders()['data'] # Все стоп заявки
print(f'Код клиента {ClientCode}, Фирма {FirmId}, Счет {TradeAccountId}, T{LimitKind}, {CurrencyCode}') print(f'Код клиента {ClientCode}, Фирма {FirmId}, Счет {TradeAccountId}, T{LimitKind}, {CurrencyCode}')
if 'SPBFUT' in FirmId: # Для фьючерсов свои расчеты if IsFutures: # Для фьючерсов свои расчеты
print(f'- Фьючерсный лимит {qpProvider.GetFuturesLimit(FirmId, TradeAccountId, 0, "SUR")["data"]["cbplimit"]} SUR') print(f'- Фьючерсный лимит {qpProvider.GetFuturesLimit(FirmId, TradeAccountId, 0, "SUR")["data"]["cbplimit"]} SUR')
futuresHoldings = qpProvider.GetFuturesHoldings()['data'] # Все фьючерсные позиции futuresHoldings = qpProvider.GetFuturesHoldings()['data'] # Все фьючерсные позиции
activeFuturesHoldings = [futuresHolding for futuresHolding in futuresHoldings if futuresHolding['totalnet'] != 0] # Активные фьючерсные позиции activeFuturesHoldings = [futuresHolding for futuresHolding in futuresHoldings if futuresHolding['totalnet'] != 0] # Активные фьючерсные позиции
@@ -115,14 +117,14 @@ def GetAccount(ClientCode='', FirmId='SPBFUT', TradeAccountId='SPBFUT00PST', Lim
if __name__ == '__main__': # Точка входа при запуске этого скрипта if __name__ == '__main__': # Точка входа при запуске этого скрипта
# qpProvider = QuikPy() # Вызываем конструктор QuikPy с подключением к локальному компьютеру с QUIK qpProvider = QuikPy() # Вызываем конструктор QuikPy с подключением к локальному компьютеру с QUIK
qpProvider = QuikPy(Host='192.168.1.7') # Вызываем конструктор QuikPy с подключением к удаленному компьютеру с QUIK # qpProvider = QuikPy(Host='192.168.1.7') # Вызываем конструктор QuikPy с подключением к удаленному компьютеру с QUIK
GetAllAccounts() # Получаем все счета. По ним можно будет сформировать список счетов для торговли GetAllAccounts() # Получаем все счета. По ним можно будет сформировать список счетов для торговли
print() print()
GetAccount() # Российские фьючерсы и опционы (счет по умолчанию) GetAccount() # Российские фьючерсы и опционы (счет по умолчанию)
# По списку полученных счетов обязательно проверьте каждый! # По списку полученных счетов обязательно проверьте каждый!
# GetAccount('<Код клиента>', '<Код фирмы>', '<Счет>', <Номер дня лимита>, '<Валюта>') # GetAccount('<Код клиента>', '<Код фирмы>', '<Счет>', <Номер дня лимита>, '<Валюта>', <Счет фьючерсов=True, иначе=False>)
# Выход # Выход
qpProvider.CloseConnectionAndThread() # Перед выходом закрываем соединение и поток QuikPy из любого экземпляра qpProvider.CloseConnectionAndThread() # Перед выходом закрываем соединение и поток QuikPy из любого экземпляра