Création d'un système de trading Python pour MT. - page 17

 

J'ai enfin maîtrisé la mise en page des graphiques en Python. Oh, c'est dur de nager dans l'acide chlorhydrique en apprenant le paquet matplotlib.

Voici le résultat sur le graphique :

J'aime ça).

Et voici le code :

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

Le code est donné dans son ensemble, mais je ne donne aucune donnée, c'est impossible - vous devez le faire vous-même. Il suffit d'utiliser #plotlib. Le reste, juste pour comprendre - quoi, où et d'où.

Je n'écris pas de commentaires comme d'habitude, mais il sera plus facile pour vous de comprendre la copie toute prête.

 
Yuriy Asaulenko:

En complément de mon post précédent, j'ai regardé la distribution par rapport à la ligne de régression à 3000 points. A intervalles plus courts, il est très irrégulier.

En fait, elle est très instable, et sa forme change beaucoup d'une parcelle à l'autre, mais les écarts min et max restent à peu près aux mêmes niveaux. Bien, et il n'y a aucune trace des longues queues. Je ne tire aucune conclusion, voyez par vous-même.

Je peux seulement dire que les queues de distribution sont le résultat de nos actions, et non le fait du marché.

En général, la signification de ces études sur la finitude de la variance est claire.

 
Novaja:

Dans l'ensemble, l'intérêt de cette exploration de la finitude de la variance des écarts est clair.

Non, vous ne le faites pas.) Ce n'est pas du tout un résultat ou une exploration.) Il n'y a rien à explorer ici. C'est un sous-produit. J'ai écrit sur tout cela dans le fil de discussion TIP, au tout début de la conversation sur les queues et la recherche de l'inconnu. Mais puisque vous pouvez le montrer entre les deux, pourquoi pas. Ne le prenez pas si sérieusement, regardez les choses plus simplement). Conseils, de la part d'un vieux provocateur expérimenté.))

 

Vous avez peut-être lu l'article sur les ondelettes

D'une manière générale, c'est du bon travail, on voit dans le signal ce que l'on ne peut pas voir avec les yeux (peut-être aussi d'autres manières). C'est très bien et très tentant. Oui, mais tout cela dans un signal déjà formé. Tout est génial et très tentant.

Je l'ai essayé avec les cotations du marché. Hein ? - C'est un excellent indicateur. Mais non, encore une fois les effets de bord, tout au bord de l'image, là où les guillemets s'interrompent, on ne peut rien dire sur rien.

C'est dommage, mais le sujet des ondelettes est clos. Probablement, fermé pour le moment, jusqu'à des temps meilleurs).

 
Yuriy Asaulenko:

J'ai enfin maîtrisé la mise en page des graphiques en Python. Oh, c'est dur de nager dans l'acide chlorhydrique en apprenant le paquet matplotlib.

Voici le résultat sur le graphique :

J'aime ça).

Et voici le code :

Le code est donné dans son ensemble, mais je ne donne aucune donnée, c'est impossible - vous devez le faire vous-même. Il suffit d'utiliser #plotlib. Le reste est juste pour comprendre - quoi, où et d'où.

Je n'écris pas de commentaires comme d'habitude, mais il sera plus facile pour vous de comprendre l'échantillon prêt.

mettre le code dans le fichier


D:\PYTHON\YURAZ>yz_112.py

Traceback (dernier appel le plus récent) :

Fichier "D:\PYTHON\YURAZ\yz_112.py", ligne 1, dans <module>

import MyPack.Filters comme flt

ModuleNotFoundError : Aucun module nommé 'MyPack'.

D:\PYTHON\YURAZ>pip install MyPack

Exigence déjà satisfaite : MyPack dans c:\users\yuraz\appdata\local\programs\python\python38\lib\site-packages (0.1)

D:\PYTHON\YURAZ>


Il manque quelque chose ?

 

Pouvez-vous me dire où se trouve l'option si l'instrument est actif pour le trading.


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

Pouvez-vous me dire où se trouve l'option si l'instrument est actif pour le trading.


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 structure est décrite sur le site officiel.

ou comme ceci

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

C'est ainsi qu'il est décidé pour le MICEX et le SPX.

 

Banc de travail en Python, avec interface graphique tkinter

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