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

코드 전체가 제공되지만 데이터를 제공하지 않습니다. 이것은 불가능합니다. 직접 수행해야 합니다. #plotting만 사용하면 됩니다. 기타, 이해를 위해서만 - 무엇을, 어디서, 어디서.

평소와 같이 댓글은 쓰지 않지만 완성본을 다루는 것이 더 쉬울 것입니다.

 
Yuriy Asaulenko :

이전 게시물 외에도 3000개 샘플에서 회귀선을 기준으로 분포를 살펴보았습니다. 더 짧은 간격에서는 모든 것이 매우 들여쓰기됩니다.

사실은 괜찮습니다. 불안정하고 그 모양은 사이트마다 크게 다르지만 최소 및 최대 편차는 거의 동일한 수준으로 유지됩니다. 글쎄, 긴 꼬리의 흔적은 없었습니다. 나는 결론을 내리는 것이 아닙니다. 직접 확인하십시오.

나는 분포의 꼬리가 시장의 자산이 아니라 우리의 행동의 결과라고 말할 수 있습니다.

일반적으로 이러한 연구의 의미는 편차 분산의 유한성을 얻기 위해 이해할 수 있습니다.

 
Novaja :

일반적으로 이러한 연구의 의미는 편차 분산의 유한성을 얻기 위해 이해할 수 있습니다.

아니오, 이해가 안 됩니다.) 이것은 결과나 연구 결과가 전혀 아닙니다.) 여기에는 검색할 것이 없습니다. 부산물입니다. 나는 꼬리에 대한 대화의 맨 처음에 있는 TIP 주제와 누가 무엇을 알고 있는지에 대한 검색에서 이 모든 것에 대해 썼습니다. 하지만 패스로 보여줄 수 있다면 푸어쿼이는 패스하지 않을 것입니다. 모든 것을 너무 심각하게 받아들이지 말고 더 단순하게 보세요.) 노련한 도발사의 조언.))

 

웨이블릿에 대한 자료를 읽었을 수 있습니다.

일반적으로 놀라운 것은 눈으로 볼 수 없는 것을 신호에서 봅니다(다른 방법으로도 가능). 모든 것이 훌륭하고. 유혹하는. 예, 하지만 이 모든 것은 이미 형성된 신호입니다. 모든 것이 훌륭하고 괜찮습니다. 감동.

나는 시장 견적에서 그것을 시도했다. 그리고 뭐? 훌륭한 지표입니다. 그러나 다시 말하지만 가장자리 효과는 인용문이 끊어지는 그림의 가장 가장자리에서 아무 것도 말할 수 없습니다.

안타깝지만 웨이블릿이 있는 주제는 닫혀있습니다. 더 나은 시간이 될 때까지 당분간 폐쇄될 수 있습니다.)

 
Yuriy Asaulenko :

마침내 Python에서 그래프의 레이아웃을 마스터했습니다. 아, 그리고 matplotlib 패키지의 숙달을 감안할 때 염산에서 수영 하는 것은 어렵습니다.

차트의 결과는 다음과 같습니다.

좋아요.)

코드는 다음과 같습니다.

코드 전체가 제공되지만 데이터를 제공하지 않습니다. 이것은 불가능합니다. 직접 수행해야 합니다. #plotting만 사용하면 됩니다. 기타, 이해를 위해서만 - 무엇을, 어디서, 어디서.

평소와 같이 댓글은 쓰지 않지만 완성본을 다루는 것이 더 쉬울 것입니다.

코드를 파일에 넣다


D:\PYTHON\YURAZ>yz_112.py

역추적(가장 최근 호출 마지막):

파일 "D:\PYTHON\YURAZ\yz_112.py", 줄 1, <모듈>

flt로 MyPack.Filters 가져오기

ModuleNotFoundError: 'MyPack'이라는 모듈이 없습니다.

D:\PYTHON\YURAZ>pip 설치 MyPack

요구 사항이 이미 충족됨: c:\users\yuraz\appdata\local\programs\python\python38\lib\site-packages(0.1)의 MyPack

D:\PYTHON\YURAZ>


없어진 물건 있어요?

 

이 상품이 거래에 활성화되어 있다는 매개변수를 어디에서 찾을 수 있는지 알려주세요.


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와 St. Petersburg로 결정

 

tkinter GUI 가 있는 Python 스텁

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




사유: