Erstellung eines Python-Handelssystems für MT. - Seite 17

 

Endlich beherrsche ich das Graphenlayout in Python. Oh, es ist schwer , in Salzsäure zu schwimmen, wenn man das Paket matplotlib lernt.

Dies ist das Ergebnis in der Grafik:

Ich mag es).

Und hier ist der 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()

Der Code wird als Ganzes angegeben, aber ich gebe keine Daten an, das ist unmöglich - man muss es selbst machen. Sie müssen nur #plotlib verwenden. Der Rest, nur zum Verständnis - was, wo und woher.

Ich schreibe nicht wie üblich Kommentare, aber es wird für Sie einfacher sein, den fertigen Text zu verstehen.

 
Yuriy Asaulenko:

Zusätzlich zu meinem vorherigen Beitrag habe ich mir die Verteilung im Verhältnis zur Regressionslinie bei 3000 Zählungen angesehen. In kürzeren Abständen ist sie sehr zerklüftet.

Sie ist in der Tat sehr instabil, und ihre Form ändert sich von Diagramm zu Diagramm stark, aber die minimalen und maximalen Abweichungen bleiben in etwa auf demselben Niveau. Tja, und von den langen Schwänzen fehlt jede Spur. Ich ziehe keine Schlüsse daraus, überzeugen Sie sich selbst.

Ich kann nur sagen, dass die Verteilungsschwänze ein Ergebnis unseres Handelns sind und nicht des Marktes.

Im Allgemeinen ist die Bedeutung dieser Studien über die Endlichkeit der Varianz klar.

 
Novaja:

Im Großen und Ganzen ist der Sinn dieser Untersuchung über die Endlichkeit der Varianz der Abweichungen klar.

Nein, das weißt du nicht.) Es ist weder ein Ergebnis noch eine Erkundung.) Es gibt hier nichts zu erkunden. Es ist ein Nebenprodukt. Über all das habe ich im TIP-Thread bereits zu Beginn der Diskussion über Schwänze und die Suche nach dem Unbekannten geschrieben. Aber da man es zwischendurch zeigen kann, pourquoi pas. Nehmen Sie es nicht so ernst, betrachten Sie die Dinge einfacher). Ratschläge von einem alten und erfahrenen Provokateur))

 

Sie haben vielleicht den Artikel über Wavelets gelesen

Generell eine tolle Sache, die im Signal sieht, was man mit den Augen nicht sehen kann (vielleicht auch auf andere Weise). Das ist alles großartig und sehr verlockend. Ja, aber das alles bei einem bereits gebildeten Signal. Alles ist großartig und sehr verlockend.

Ich habe es mit Börsenkursen versucht. Hm? - Das ist ein guter Indikator. Aber nein, wieder die Randeffekte, ganz am Rand des Bildes, wo die Zitate abbrechen, kann man nichts sagen.

Es ist schade, aber das Thema der Wavelets ist abgeschlossen. Wahrscheinlich vorerst geschlossen, bis bessere Zeiten kommen).

 
Yuriy Asaulenko:

Endlich beherrsche ich das Graphenlayout in Python. Oh, es ist schwer , in Salzsäure zu schwimmen, wenn man das Paket matplotlib lernt.

Dies ist das Ergebnis in der Grafik:

Ich mag es).

Und hier ist der Code:

Der Code wird als Ganzes angegeben, aber ich gebe keine Daten an, das ist unmöglich - man muss es selbst machen. Sie müssen nur #plotlib verwenden. Der Rest ist nur zum Verständnis - was, wo und woher.

Ich schreibe keine Kommentare wie üblich, aber es wird Ihnen das Verständnis des fertigen Musters erleichtern.

den Code in die Datei einfügen


D:\PYTHON\YURAZ>yz_112.py

Traceback (letzter Aufruf):

Datei "D:\PYTHON\YURAZ\yz_112.py", Zeile 1, in <module>

importieren MyPack.Filters as flt

ModuleNotFoundError: Kein Modul namens 'MyPack'

D:\PYTHON\YURAZ>pip install MyPack

Anforderung bereits erfüllt: MyPack in c:\users\yuraz\appdata\local\programs\python\python38\lib\site-packages (0.1)

D:\PYTHON\YURAZ>


Fehlt etwas?

 

Könnten Sie mir bitte sagen, wo der Parameter zu finden ist, der besagt, dass das Tool für den Handel aktiv ist?


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

Könnten Sie mir bitte sagen, wo der Parameter zu finden ist, der besagt, dass das Tool für den Handel aktiv ist?


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

Die Struktur wird auf der offiziellen Website beschrieben.

oder so

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

So wird es für MICEX und SPX entschieden

 

Python-basierte Python-Workbench, mit grafischer Oberfläche tkinter

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