为MT制作一个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()

代码是作为一个整体给出的,但我没有给出任何数据,这是不可能的--你必须自己做。你只需要使用#plotlib。其余的,只是为了了解--什么、哪里、从哪里来。

我不像往常那样写评论,但这样会让你更容易理解现成的副本。

 
Yuriy Asaulenko:

除了我之前的帖子 之外,还看了一下在3000个计数时相对于回归线的分布。在较短的间隔时间内,它是非常参差不齐的。

事实上,它是非常不稳定的,它的形状在不同的图中变化很大,但最小和最大偏差保持在差不多的水平。嗯,而且没有长尾巴的痕迹。我不做任何结论,自己看吧。

我只能说,分布尾巴是我们行为的结果,而不是市场造成的。

一般来说,这些关于方差有限性的研究的意义是明确的。

 
Novaja:

总的来说,对偏差方差的有限性的这种探索的意义是明确的。

不,你不知道)。这根本不是一个结果或探索。)这里没有什么可探索的。这是一个副产品。早在关于尾巴和寻找未知事物的谈话一开始,我就在TIP主题中写过这些内容。但是,既然你可以在两者之间展示,为什么不可以呢。不要把它看得那么严重,把事情看得更简单)。建议,来自一个老而有经验的挑衅者。)

 

你可能已经读过关于小波的文章

一般来说,伟大的东西,在信号中看到你的眼睛看不到的东西(可能还有其他方式)。这一切都很好,非常有诱惑力。是的,但这一切都在一个已经形成的信号中。一切都很好,非常诱人。

我用市场报价试了一下。嗯?- 这是一个很好的指标。但是没有,又是边缘效应,在画面的最边缘,引号断裂的地方,什么都说不出来。

很遗憾,但小波的主题已经结束。可能是,暂时关闭,直到更好的时候)。

 
Yuriy Asaulenko:

终于掌握了Python中的图形布局。哦,学习matplotlib包很难在盐酸中游泳

这就是图表上的结果。

我喜欢它)。

而这里是代码。

代码是作为一个整体给出的,但我没有给出任何数据,这是不可能的--你必须自己做。你只需要使用#plotlib。剩下的只是为了理解--什么、哪里和从哪里来。

我不像往常那样写评论,但这样会让你更容易理解现成的样本。

把代码放在文件中


D:\PYTHON\YURAZ>yz_112.py

回溯(最近的一次调用)。

文件 "D:\PYTHON\YURAZ\yz_112.py",第1行,在<module>中

输入 MyPack.Filters作为flt

ModuleNotFoundError: 没有名为'MyPack'的模块

D:\PYTHON\YURAZ>pip install MyPack

已经满足要求:MyPack在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'}]

MICEX和SPX的决定方式是这样的

 

基于Python的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('2100 x800+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()            # передача управления форме