Fare un sistema di trading Python per la MT. - pagina 17

 

Finalmente ho imparato il layout del grafico in Python. Oh, è difficile nuotare nell'acido cloridrico imparando il pacchetto matplotlib.

Questo è il risultato sul grafico:

Mi piace).

Ed ecco il codice:

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

Il codice è dato per intero, ma non do nessun dato, è impossibile - devi farlo da solo. Avete solo bisogno di usare #plotlib. Il resto, solo per capire - cosa, dove e da dove.

Non scrivo commenti come al solito, ma sarà più facile per voi trattare la copia pronta.

 
Yuriy Asaulenko:

In aggiunta al mio post precedente, ho guardato la distribuzione relativa alla linea di regressione a 3000 conteggi. A intervalli più brevi è molto frastagliato.

In realtà è molto instabile, e la sua forma cambia molto da una trama all'altra, ma le deviazioni minime e massime rimangono circa agli stessi livelli. Bene, e non c'è traccia delle code lunghe. Non sto traendo alcuna conclusione, guardate voi stessi.

Posso solo dire che le code di distribuzione sono un risultato delle nostre azioni, non dovute al mercato.

In generale, il significato di questi studi sulla finitezza della varianza è chiaro.

 
Novaja:

In generale, il senso di questa esplorazione della finitezza della varianza delle deviazioni è chiaro.

No, non è vero). Non è affatto un risultato o un'esplorazione). Non c'è niente da esplorare qui. È un sottoprodotto. Ho scritto tutto questo nel thread TIP all'inizio della conversazione sulle code e sulla ricerca dell'ignoto. Ma dal momento che si può mostrare in mezzo, pourquoi pas. Non prendetelo così seriamente, guardate le cose in modo più semplice). Un consiglio, da un vecchio ed esperto provocatore)).

 

Potreste aver letto l'articolo sulle wavelets

In generale, grande roba, vede nel segnale quello che non si vede con gli occhi (forse anche in altri modi). È tutto fantastico e molto allettante. Sì, ma tutto questo in un segnale già formato. Tutto è grande e molto allettante.

Ho provato con le quotazioni di mercato. Eh? - È un ottimo indicatore. Ma no, di nuovo gli effetti di bordo, proprio al limite dell'immagine, dove le citazioni si interrompono, non si può dire nulla di nulla.

È un peccato, ma il tema delle wavelets è chiuso. Probabilmente, chiuso per ora, fino a tempi migliori).

 
Yuriy Asaulenko:

Finalmente ho imparato il layout del grafico in Python. Oh, è difficile nuotare nell'acido cloridrico imparando il pacchetto matplotlib.

Questo è il risultato sul grafico:

Mi piace).

Ed ecco il codice:

Il codice è dato per intero, ma non do nessun dato, è impossibile - devi farlo da solo. Avete solo bisogno di usare #plotlib. Il resto è solo per capire - cosa, dove e da dove.

Non scrivo commenti come al solito, ma sarà più facile per voi capire il campione pronto.

mettere il codice nel file


D:\PYTHON\YURAZ>yz_112.py

Traceback (ultima chiamata più recente):

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

importa MyPack.Filters come flt

ModuleNotFoundError: nessun modulo chiamato 'MyPack'.

D:\PYTHON\YURAZ>pip install MyPack

Requisito già soddisfatto: MyPack in c:\users\yuraz\appdata\local\programs\python\python38\lib\site-packages (0.1)

D:\PYTHON\YURAZ>.


Manca qualcosa?

 

Potresti per favore dirmi dove si può trovare il parametro che lo strumento è attivo per il 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, ...
 
Андрей Кузнецов:

Potreste dirmi dove si può trovare l'opzione se lo strumento è attivo per il 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 struttura è descritta sul sito ufficiale.

o come questo

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

Ecco come viene deciso per MICEX e SPX

 

banco di lavoro Python basato su Python, con interfaccia grafica tkinter

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