MT用のPythonトレーディングシステムを作る。 - ページ 17

 

Pythonでようやくグラフレイアウトをマスター。ああ、matplotlibパッケージの学習で塩酸の中を泳ぐ のは大変だ。

これがグラフ上の結果です。

好きです)。

そして、そのコードがこちらです。

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

コードは一通り渡しますが、データは一切渡さない、無理だ、自分でやるしかない。plotlibを使うだけでいいんです。あとは、何を、どこで、どこから、ということを理解するためです。

いつも通りコメントは書きませんが、レディコピーに対応しやすくなります。

 
Yuriy Asaulenko:

前回の記事に加えて、3000カウントでの回帰線に対する分布を調べてみました。短い間隔では、非常にギザギザしています。

実は非常に不安定で、プロットによって形が大きく変わるのですが、最小偏差と最大偏差はほぼ同じレベルに保たれています。まあ、ロングテールの痕跡もないんですけどね。私は結論を出しているわけではありませんので、ご自分の目で確かめてください。

分配尾は私たちの行動の結果であって、市場のせいではない、としか言いようがないのです。

一般に、分散の有限性に関するこれらの研究の意味は明確である。

 
Novaja:

大体、偏差の分散の有限性を探ることの意味は明確である。

いいえ、そうではありません)結果や探究心が全くない)ここには探究心がないんです。副産物なんです。TIPスレッドで、テールの話と未知のものを探す話を一番最初に書きました。でも、その間に見せることができるので、pourquoi not pas.そんなに深刻に考えないで、もっとシンプルに物事を見てください)。古くからの経験豊かな挑発者からのアドバイス))

 

ウェーブレットに関する記事をご覧になった方もいらっしゃるかと思いますが

目では見えないものを信号で見ることができる(他の方法もあるかもしれないが)、概して素晴らしいものだ。どれも素晴らしく、とても魅力的です。はい、しかし、これはすべてすでに形成された信号の中にあります。すべてが素晴らしく、とても魅力的です。

マーケットクオートで試してみました。え?- 素晴らしい指標になりますね。しかし、いや、またしてもエッジエフェクトで、引用が途切れるギリギリのところで、何も言えなくなるのです。

残念ですが、ウェーブレットの話題は終了です。おそらく、もっといい時代になるまで、今は閉鎖されているのでしょう)。

 
Yuriy Asaulenko:

Pythonでようやくグラフレイアウトをマスター。ああ、matplotlibパッケージの学習で塩酸の中を泳ぐ のは大変だ。

これがグラフ上の結果です。

好きです)。

そして、そのコードがこちらです。

コードは一通り渡しますが、データは一切渡さない、無理だ、自分でやるしかない。plotlibを使うだけでいいんです。あとは、何を、どこで、どこから、ということを理解するためです。

いつも通りコメントは書きませんが、出来上がったサンプルを見ていただくと分かりやすいと思います。

ファイルにコードを入れる


D:\PYTHONYURAZ>yz_112.py

トレースバック(直近の呼び出し)。

File "D:\PYTHONYURAZ_112.py", line 1, in <module>.

インポート MyPack.Filters as flt

ModuleNotFoundError: 'MyPack' という名前のモジュールはありません。

D:\PYTHONYURAZ>pip install MyPack

Requirement already satisfied: MyPack in c:\usersyuraz ﹑local﹑programs﹑python﹑lib﹑site-packages (0.1)

d:\pythonyuraz>.


何かが足りないのでしょうか?

 

その商品が取引可能な状態であれば、どこでそのオプションを見つけることができるのか教えていただけませんか。


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

ツールが取引に有効であるというパラメータはどこにあるのか教えてください。


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

その構造は、公式サイトに記載されています。

とか、こんな感じで

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

MICEXとSPXはこのように決定されます。

 

Python ベースの Python ワークベンチ,グラフィカルインターフェース tkinter を持つ

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