Fazendo um sistema comercial Python para MT. - página 17

 

Finalmente dominou o layout gráfico em Python. Oh, é difícil nadar em ácido clorídrico aprendendo o pacote de matplotlib.

Este é o resultado no gráfico:

Eu gosto disso).

E aqui está o código:

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()

O código é dado como um todo, mas eu não dou nenhum dado, é impossível - você mesmo tem que fazer isso. Você só precisa usar #plotlib. O resto é apenas para entender - o quê, onde e de onde.

Eu não escrevo comentários como sempre, mas será mais fácil para você entender a cópia pronta.

 
Yuriy Asaulenko:

Além do meu posto anterior, olhei para a distribuição relativa à linha de regressão com 3000 contagens. Em intervalos mais curtos é muito recortado.

Na verdade, é muito instável, e sua forma muda muito de lote para lote, mas os desvios mínimo e máximo permanecem aproximadamente nos mesmos níveis. Bem, e não há nenhum vestígio das caudas longas. Não estou tirando nenhuma conclusão, veja por si mesmo.

Só posso dizer que os rabos de distribuição são o resultado de nossas ações, não devido ao mercado.

Em geral, o significado destes estudos sobre a finitude da variância é claro.

 
Novaja:

De modo geral, o ponto desta exploração sobre a finitude da variação dos desvios é claro.

Não, você não sabe). Não é um resultado ou exploração de forma alguma) Não há nada a explorar aqui. É um subproduto. Escrevi sobre tudo isso no tópico TIP logo no início da conversa sobre rabos e a procura do desconhecido. Mas como você pode mostrar isso no meio, pourquoi pas. Não leve isso tão a sério, veja as coisas de forma mais simples). Conselho, de um antigo e experiente provocador)).

 

Você deve ter lido o artigo sobre wavelets

Geralmente, coisas ótimas, vê no sinal o que você não pode ver com seus olhos (e provavelmente de outras maneiras). Tudo isso é ótimo e muito tentador. Sim, mas tudo isso em um sinal já formado. Tudo é ótimo e muito tentador.

Eu tentei com cotações de mercado. O que é isso? - É um grande indicador. Mas não, mais uma vez os efeitos de borda, no limite da imagem, onde as citações se rompem, nada pode ser dito sobre nada.

É uma pena, mas o assunto das ondas está encerrado. Provavelmente, fechado por enquanto, até tempos melhores).

 
Yuriy Asaulenko:

Finalmente dominou o layout gráfico em Python. Oh, é difícil nadar em ácido clorídrico aprendendo o pacote de matplotlib.

Este é o resultado no gráfico:

Eu gosto disso).

E aqui está o código:

O código é dado como um todo, mas eu não dou nenhum dado, é impossível - você mesmo tem que fazer isso. Você só precisa usar #plotlib. O resto, só para entender - o quê, onde e de onde.

Eu não escrevo comentários como sempre, mas será mais fácil para você entender a amostra pronta.

colocar o código no arquivo


D:\PYTHON\YURAZ>yz_112.py

Traceback (última chamada):

Arquivo "D:\PYTHON\YURAZ\yz_112.py", linha 1, em <módulo>

importar MyPack.Filters como flt

ModuleNotFoundError: Nenhum módulo chamado 'MyPack'.

D:\PYTHON\YURAZ>pip install MyPack

Exigência já satisfeita: MyPack in c:useryurazappdata em programas locaispython 38lib-packages (0.1)

D:\PYTHON]YURAZ>


Está faltando alguma coisa?

 

Poderia me dizer onde você pode encontrar o parâmetro de que a ferramenta está ativa para negociação?


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, ...
 
Андрей Кузнецов:

Poderia me dizer onde você pode encontrar o parâmetro de que a ferramenta está ativa para negociação?


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 попадут все инструменты

A estrutura está descrita no site oficial.

ou como este

[{'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'}]

É assim que é decidido para MICEX e SPX

 

Bancada de trabalho Python baseada em Python, com interface gráfica tkinter

usa 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()            # передача управления форме