Haciendo un sistema de trading en Python para MT. - página 17

 

Por fin domino el diseño de gráficos en Python. Es difícil nadar en ácido clorhídrico aprendiendo el paquete matplotlib.

Este es el resultado en el gráfico:

Me gusta).

Y aquí está el 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()

El código se da en su totalidad, pero no doy ningún dato, es imposible - tienes que hacerlo tú mismo. Sólo necesitas usar #plotlib. El resto, sólo para entender: qué, dónde y de dónde.

No escribo comentarios como es habitual, pero te será más fácil entender la copia lista.

 
Yuriy Asaulenko:

Además de mi post anterior, miré la distribución relativa a la línea de regresión en 3000 cuentas. A intervalos más cortos es muy irregular.

En realidad es muy inestable, y su forma cambia mucho de un gráfico a otro, pero las desviaciones mínimas y máximas se mantienen más o menos en los mismos niveles. Bueno, y no hay rastro de las colas largas. No estoy sacando ninguna conclusión, véalo usted mismo.

Sólo puedo decir que las colas de distribución son el resultado de nuestras acciones, no se deben al mercado.

En general, el significado de estos estudios sobre la finitud de la varianza es claro.

 
Novaja:

En general, el objetivo de esta exploración de la finitud de la varianza de las desviaciones es claro.

No, no es así). No hay nada que explorar aquí. Es un subproducto. Ya escribí sobre todo esto en el hilo del TIP al principio de la conversación sobre las colas y la búsqueda de lo desconocido. Pero como se puede mostrar en el medio, pourquoi pas. No te lo tomes tan en serio, mira las cosas con más sencillez). Consejo, de un viejo y experimentado provocador)).

 

Es posible que haya leído el artículo sobre las ondículas

En general, un gran material, ve en la señal lo que no se puede ver con los ojos (quizá también de otras maneras). Todo es genial y muy tentador. Sí, pero todo esto en una señal ya formada. Todo es genial y muy tentador.

Lo he probado con las cotizaciones del mercado. ¿Eh? - Es un gran indicador. Pero no, de nuevo los efectos de borde, en el mismo borde de la imagen, donde se rompen las comillas, no se puede decir nada de nada.

Es una pena, pero el tema de las ondículas está cerrado. Probablemente, cerrado por ahora, hasta mejores tiempos).

 
Yuriy Asaulenko:

Por fin domino el diseño de gráficos en Python. Es difícil nadar en ácido clorhídrico aprendiendo el paquete matplotlib.

Este es el resultado en el gráfico:

Me gusta).

Y aquí está el código:

El código se da en su totalidad, pero no doy ningún dato, es imposible - tienes que hacerlo tú mismo. Sólo necesitas usar #plotlib. El resto es sólo para entender: qué, dónde y de dónde.

No escribo comentarios, como es habitual, pero te será más fácil entender la muestra preparada.

poner el código en el archivo


D:\PYTHON\YURAZ>yz_112.py

Traceback (última llamada más reciente):

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

importar MyPack.Filters como flt

ModuleNotFoundError: No hay módulo llamado 'MyPack'

D:\PYTHON\YURAZ>pip install MyPack

Requisito ya satisfecho: MyPack en c:\users\yuraz\appdata\local\programs\python\python38\lib\site-packages (0.1)

D:\PYTHON\YURAZ>


¿Falta algo?

 

¿Podría decirme dónde se puede encontrar el parámetro de que la herramienta está activa para el comercio.


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

Podrían decirme dónde se puede encontrar la opción si el instrumento está activo para operar.


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

La estructura se describe en el sitio web oficial.

o así

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

Así se decide para MICEX y SPX

 

Banco de trabajo basado en Python, con interfaz gráfica tkinter

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




Razón de la queja: