Делаем торговую систему на Python для МТ. - страница 17

 

Наконец осилил компоновку графиков в Python. Ох, и тяжело плавать в соляной кислоте дается освоение пакета matplotlib.

Вот такой результат на графике:

Мне нравится.)

А вот и код:

import MyPack.Filters as flt
import TSClasses as tsc
import matplotlib.pyplot as plt
#import numpy as np
#from scipy.stats import randint

#rv=randint.rvs(0,10,size=10)

# чтение данных из БД
DB='csvdb1.db'
Ticker='SPFB.SBRF-9.18'
c=flt.cCandle()

SD=tsc.StockData(DB,
                 Ticker)
rdb=SD.rdb  
F8=SD.F8
F16=SD.F16
F32=SD.F32
F150=SD.F150
rd=SD.rdb
Dev=SD.Dev
Stoch=SD.Stoch

# определение диапазона значений по оси х
Ib=1500
Ie=Ib+150

# подготовка данных для графиков
I=[i for i in range(Ib,Ie)]
Hist=[rdb.history[i][c.c] for i in I]
f8=[F8[i] for i in I]
f16=[F16[i] for i in I]
f32=[F32[i] for i in I]
f150=[F150[i] for i in I]
Devp=[F150[i]+Dev[i] for i in I]
Devm=[F150[i]-Dev[i] for i in I]
Kpb=[Stoch[0][i] for i in I]
Dpb=[Stoch[1][i] for i in I]

# построение графиков
#fig, axs = plt.subplots(2, 1,figsize=(10.0,5))

fig = plt.figure(figsize=(10,6.5))
axs1 = plt.subplot2grid((3, 1), (0, 0),rowspan=2,fig=fig)
axs2 = plt.subplot2grid((3, 1), (2,0), rowspan=1,fig=fig)

axs1.plot(I,Hist, label='Hist')
axs1.plot(I,f8,label='F8')
axs1.plot(I,f16,label='F16')
axs1.plot(I,f32,label='F32')
axs1.plot(I,f150,label='F150')
axs1.plot(I,Devp)
axs1.plot(I,Devm)
axs1.legend()
axs1.set_xticks(range(Ib,Ie+10,10))
axs1.grid(True, which='both')

axs2.plot(I,Kpb, label='F')
axs2.plot(I,Dpb, label='S')
axs2.set_xticks(range(Ib,Ie+10,10))
axs2.legend()
axs2.grid(True)

plt.show()

Код приведен целиком, но данных я не привожу, это невозможно - это придется самим. Нужно использовать только #построение графиков. Прочее, только для понимания - что, куда и откуда.

Комменты, как обычно не пишу, но вам будет проще разбираться с готовым экземплом.

 
Yuriy Asaulenko:

В дополнение к моему предыдущему посту посмотрел распределение относительно линии регрессии на 3000 отсчетах. На более коротких интервалах все оч изрезано.

Вообще-то оно оч. нестабильно, и его форма сильно меняется от участка к участку, однако мин и максы отклонений остаются примерно на тех-же уровнях. Ну, и от длинных хвостов не осталось и следа. Выводов не делаю, смотрите сами.

Могу только сказать, что хвосты распределения являются результатом наших действий, а не свойством рынка.

В общем и целом понятен смысл сиих изысканий на предмет получения конечности дисперсии отклонений.

 
Novaja:

В общем и целом понятен смысл сиих изысканий на предмет получения конечности дисперсии отклонений.

Нет, не понимаете.) Это вообще не результат и не изысканий.)  Здесь нечего изыскивать. Это побочный продукт. Я обо всем этом писал в теме ТиП еще в самом начале разговора о хвостах и поисках неизвестно чего. Но уж коли можно это между делом показать, то pourquoi бы и не pas. Не принимайте все так серьезно, смотрите на вещи проще.) Совет, старого и опытного провокатора.))

 

Вы, возможно, читали материал о вейвлетах

Вообще, замечательная штука, видит в сигнале то, что глазами (возможно и другими способами) увидеть невозможно. Все великолепно и оч. заманчиво. Да, но все это в уже сформировавшемся сигнале. Все здорово и оч. впечетляет.

Попробовал на рыночных котировках. А, что? - великолепный индикатор. Однако, нет, опять краевые эффекты, на самом краю картинки, там, где котировки обрываются, ничего и ни о чем сказать нельзя.

Жаль, но тема с вейвлетами закрыта. Возможно, пока закрыта, до лучших времен.)

 
Yuriy Asaulenko:

Наконец осилил компоновку графиков в Python. Ох, и тяжело плавать в соляной кислоте дается освоение пакета matplotlib.

Вот такой результат на графике:

Мне нравится.)

А вот и код:

Код приведен целиком, но данных я не привожу, это невозможно - это придется самим. Нужно использовать только #построение графиков. Прочее, только для понимания - что, куда и откуда.

Комменты, как обычно не пишу, но вам будет проще разбираться с готовым экземплом.

поместил код в файл


D:\PYTHON\YURAZ>yz_112.py

Traceback (most recent call last):

  File "D:\PYTHON\YURAZ\yz_112.py", line 1, in <module>

    import MyPack.Filters as flt

ModuleNotFoundError: No module named 'MyPack'

D:\PYTHON\YURAZ>pip install MyPack

Requirement already satisfied: MyPack in c:\users\yuraz\appdata\local\programs\python\python38\lib\site-packages (0.1)

D:\PYTHON\YURAZ>


что то не хватает ?

 

Подскажите пож-та, а где можно найти параметр о том что данный инструмент активен для торговли.


https://www.mql5.com/en/docs/integration/python_metatrader5/mt5symbolinfo_py

Documentation on MQL5: Integration / MetaTrader for Python / symbol_info
Documentation on MQL5: Integration / MetaTrader for Python / symbol_info
  • www.mql5.com
SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session_sell_orders=0, ...
 
Андрей Кузнецов:

Подскажите пож-та, а где можно найти параметр о том что данный инструмент активен для торговли.


https://www.mql5.com/en/docs/integration/python_metatrader5/mt5symbolinfo_py


#### Качаем справочник ценных бумаг

#
подключение библиотеки from openapi_client import openapi # читаем наш токен handle = open(r"D:\PYTHON\MYKEYTOKEN\token.sec", "r") dataToken = handle.read() handle.close() token = dataToken client = openapi.api_client(token) # Получение списка облигаций bonds = client.market.market_bonds_get() # Получение списка ETF etfs = client.market.market_etfs_get() # Получение списка акций stocks     = client.market.market_stocks_get() # Получение валютных пар currencies = client.market.market_currencies_get() mFigi = bonds.payload.instruments + etfs.payload.instruments + stocks.payload.instruments +  currencies.payload.instruments   # В mFigi попадут все инструменты

Структура описана на официальном сайте.

ну или вот так

[{'currency': 'RUB',
  'figi': 'BBG00844BD08',
  'isin': 'RU000A0JU898',
  'lot': 1,
  'min_price_increment': 0.1,
  'name': 'МКБ выпуск 9',
  'ticker': 'RU000A0JU898'}, {'currency': 'RUB',
  'figi': 'BBG00R05JT04',
  'isin': 'RU000A1013Y3',
  'lot': 1,
  'min_price_increment': 0.1,
  'name': 'Черкизово выпуск\xa02',
  'ticker': 'RU000A1013Y3'}, {'currency': 'RUB',
  'figi': 'BBG00PNLY692',
  'isin': 'RU000A100DC4',
  'lot': 1,
  'min_price_increment': 0.1,
  'name': 'МСБ-Лизинг 002P выпуск 2',
  'ticker': 'RU000A100DC4'}]

Так решено для ММВБ и СПБ

 

Заготовка на питоне Python, с графическим интерфейсом  tkinter 

используется   Python 3.7 64x    + Microsoft Visual Studio Enterprise 2019 (2)  16.8.2

from tkinter import *                              # импорт объектов для графики

import datetime
from datetime import datetime, timedelta
from pytz import timezone

dt_Begin = datetime(2020,6,30, 0, 0, 0, tzinfo=timezone('Europe/Moscow'))  # timezone нужно указывать. Иначе - ошибка
today = datetime.now(tz=timezone('Europe/Moscow'))
start = today.replace(hour=0, minute=0, second=0, microsecond=0)
dt_End = start + timedelta(1)
 
def makeWidgets():
    # создание графической формы
    global ent_Date                               # перечень глобальных переменных, которые будут использоваться и за пределами функции
    ent_Date = {}                                 # словарь, для занесения в него объектов Entry ячеек таблицы ввода записей

    window = Tk()                                  # создание главного окна
    window.title('YuraZ Отчет Tinkoff')            # заголовок окна
    window.geometry('2100x800+0+0')                # размеры окна

    form1 = Frame(window)                          # создание внутри окна window контейнера form1
    form1.pack()

    form2 = Frame(window)                          # создание внутри окна window контейнера form2
    form2.pack()


    Label(window, text=' ', width=1).pack(side=LEFT)                        # вспомогательная пустая метка
    labKey1 = Label(window, text='Дата Начала    :').pack(side=LEFT)        # надпись перед полем ввода Даты
    ent_dt_Begin = Entry(window, width=23)                                  # поле ввода Даты
    ent_dt_Begin.pack(side=LEFT)
    ent_dt_Begin.insert(0, dt_Begin)
    ent_Date['ent_dt_Begin'] = ent_dt_Begin             # занесение объекта поле ввода   в словарь entRec

    Label(window, text=' ', width=1).pack(side=LEFT)                         
    labKey2 = Label(window, text='Дата Окончания :').pack(side=LEFT)         
    ent_dt_End = Entry(window, width=23)                                     
    ent_dt_End.pack(side=LEFT)
    ent_dt_End.insert(0, dt_End)
    ent_Date['ent_dt_End'] = ent_dt_End             # занесение объекта поле ввода   в словарь entRec

    Label(window, text=' ', width=20).pack(side=LEFT)                      # вспомогательная пустая метка
    Button(window, text="Отчет", command=ОтчетПоПортфелю).pack(side=LEFT)  # Кнопка Отчет
    Label(window, text=' ', width=20).pack(side=LEFT)                      
    Button(window, text="Выход", command=fin).pack(side=LEFT)              # кнопка Выход (из программы)
    return window                                                          # функция makeWidgets возвращает окно window
 
def fin():            
    window.destroy()

def ОтчетПоПортфелю():
    sd1 = ent_Date['ent_dt_Begin'].get()  # из ячейки entKeyRec берется ключ записи для удаления
    sd2 = ent_Date['ent_dt_End'].get()  # из ячейки entKeyRec берется ключ записи для удаления
    d1 = datetime.strptime(sd1, "%Y-%m-%d %H:%M:%S%z")
    d2 = datetime.strptime(sd2, "%Y-%m-%d %H:%M:%S%z")

if __name__ == '__main__':
    window = makeWidgets()       # создание формы
    window.mainloop()            # передача управления форме