Блог им. 3Qu

Моделирование Торговых Систем на Python. 1.

    • 09 мая 2020, 19:31
    • |
    • 3Qu
  • Еще

Для моделирование ТС на Python, прежде всего нужен сам Python. Pythonы бывают очень разные.

Самый большой и длинный Python — Anaconda (https://anaconda.org/). Скачать дистрибутив Anaconda можно здесь — Индивидуальное издание -https://www.anaconda.com/products/individual.
Я работаю именно с Anaconda. Установив Anaconda мы получаем сам Python, уже установленные значительную часть нужных и ненужных пакетов с библиотеками Python, и несколько сред разработки. И все это сразу готово к работе, и нам, по большей части, уже не придется дополнительно устанавливать пакеты и среды.

Самый маленький Python последней версии 3.8.2. скачивается с сайта самого Python — https://www.python.org/. Это, практически, только сам язык, компилятор и минимальный набор пакетов. Сделать с ним практически ничего невозможно, и для работы придется постоянно устанавливать нужные пакеты. Среду разработки придется также устанавливать самостоятельно.
Этот Python больше подходит для запуска и работы с уже отлаженными законченными программами.

И еще один Python — Miniconda. Это просто минимальный установщик Anaconda, и здесь тоже все нужное устанавливаем сами — пакеты, среды разработки и пр.

Теперь среда разработки. На мой взгляд, здесь лучшим является Spyder. Он автоматом устанавливается вместе с Anaconda, и сразу готов к работе. Запускать его лучше из Anaconda Navigator, тогда отпадает надобность в его конфигурировании. Если запустить Spyder непосредственно из меню «Пуск», то, чтобы нормально работать, при первом запуске с конфигурацией придется повозиться.

Если вы выбрали другие, нежели Anaconda, дистрибутивы Python, то Spyder или другие среды придется устанавливать и конфигурировать вручную. Spyder можно скачать здесь — https://www.spyder-ide.org/. Для установки без Anaconda придется повозиться.

И теперь, чтобы сразу после установки Python вам было чем заняться — вишенка на торте.
Трейдеры часто сравнивают историю котировок рыночных инструментов со случайным блужданием. В приложенной программе генерируется последовательность случайного блуждания и отображается на графике. Все параметры можно выставить самим.

# -*- coding: utf-8 -*-
"""
2020-05-09
Spyder Editor

"""

import numpy as np
import matplotlib.pyplot as plt

mu=0 #матожидание
sigma=10 # стандартное отклонение
N=50000 # длина последовательности

# нормально распределенная случ последовательность
normrand = np.random.default_rng().normal(mu, sigma, N)

rw=[]
# создаем случ блуждание
for i in range(0,N):
    if i==0:
        rw.append(10000+normrand[i])
    else:
        rw.append(rw[i-1] + normrand[i])

# начало графика от 0 до 50000
Ib = 100      
# конец графика 0 до 50000
Ie=1100
# создаем последовательности для отображения на графике
Ig =[]
normrand_g =[]
rw_g =[]

for i in range(Ib,Ie):
    Ig.append(i)
    normrand_g.append(normrand[i])
    rw_g.append(rw[i])
    
# график нормального случ. процесса
plt.plot(Ig,normrand_g) # рисуем график
plt.grid() # рисуем сетку
plt.show() # отображаем

#график случайного блуждания
plt.plot(Ig,rw_g)
plt.grid()
plt.show()


Для работы в папке Документы заводим папку PythonProject. В ней еще папку SmartLab. В Spyder создаем новый файл, называем его randomwalk.py, копируем в него текст программы, и сохраняем. Теперь можно запускать.
Должно получиться вот это:
Моделирование Торговых Систем на Python. 1.Моделирование Торговых Систем на Python. 1.

При каждом запуске программы картинки будут разные. Случайный процесс все таки.)

Удачи.

★75
34 комментария
Так по 9800 надо было брать? А я возьму по 9850 — когда тренд покажет разворот.
Вестников (Витковский), Лучше первый график торговать, по минус 10 покупаешь, по 10 сдаешь, если уходит на минус 15 и потом на 20 — усредняешься. Вы как вы написали торгуйте, я — как я, потом посчитаем прибыли.
avatar
Replikant_mih, я люблю длинные тренды, но всё равно за совет — спасибо. Советы я тоже люблю — я же советский человек.
Мне PyCharm нравится, он тупо красивый)). Ну и по функциональности вполне устраивает.
avatar
Replikant_mih, мне как-то не зашел. Но  PyCharm действительно многим нравится.
avatar
Replikant_mih, А что може не устроить. Там есть все) Сам в нем програмлю.
avatar
JoeFox, полагаю что-то с отступами (количеством пробелов от начала строки). Python оч чувствителен к выравниванию отступов.
У меня ОК. Последний запуск, прямо сейчас:
avatar
3Qu, Сейчас набегут адепты теханализа, будут про расширяющийся треугольник с пробитием вниз рассказывать. 
Спасибо, я уже понял, что у меня косяк
avatar
Это:
for i in range(0,N):
    if i==0:
        rw.append(10000+normrand[i])
    else:
        rw.append(rw[i-1] + normrand[i])
лучше заменить на:
rw = np.cumsum(normrand)+10000
avatar
v_0ver, может быть. Без разницы. В моем варианте более прозрачно.
Хотя, ваш код,
rw = np.cumsum(normrand)+10000
это типа:
z=[2,5,7] +10000  #работать не будет.
avatar
3Qu, и в последнем случае вместо циклов можно было обойтись:
plt.plot(Ig,rw[Ib:Ie])
Без разницы. В моем варианте более прозрачно.
1. Оно работает на порядок быстрее
2. Не приучивает к неправильному использованию мат. библиотек (numpy). В данном случае неправильное использование это работа с элементами массива по индексу. Лучше привыкать к векторизации кода смолоду.
avatar
v_0ver, поддержу — код из серии так писать на питоне не нужно. 
avatar
Михаил, не пишите так, сделайте по своему, приведите код. Только за.
У моего кода другие цели, и вовсе не обучение тому, как надо писать. Для этого есть книги и документация.
avatar
3Qu, правильный вариант вам уже v_0ver написал. А какая цель у вашего кода?
avatar
Михаил, правильно то, что нормально работает.)) А что лучше, и что хуже — эт дело вкуса. Не более.
Вы считаете, что лучше иначе — не вопрос. Не вижу предмета для дискуссии.
avatar
3Qu, цикл вместо слайса — это дичь, а не дело вкуса. numpy придумали для избавления от страшно медленных циклов в Питоне. Плохо, что вы это не понимаете, а при этом пытаетесь научить Питону в приложении к трейдингу, где данных обычно много и нужно думать о скорости, а не писать как попало. 
avatar
Михаил, уже написал — нет предмета для дискуссий. Сделайте как считаете нужным и покажите код людям.
avatar
Андрей Андреичъ, можно учиться херне, а потом переучиваться. А можно сразу по нормальному учиться делать — обычно это гораздо продуктивнее.
avatar
v_0ver, пусть народ сам пробует, по разному. На то и рассчитано. Варианты только приветствуются.
avatar
3Qu, 
# -*- coding: utf-8 -*-<br />"""<br />2020-05-09<br />Spyder Editor<br /><br />"""<br /><br />import numpy as np<br />import matplotlib.pyplot as plt<br /><br />mu=0 #матожидание<br />sigma=10 # стандартное отклонение<br />N=50000 # длина последовательности<br /><br /># создаём шум (нормально распределенный)<br />normrand = np.random.default_rng().normal(mu, sigma, N)<br /><br /># создаем случ блуждание<br />rw = np.cumsum(normrand)+10000<br /><br /># Интервал для вывода графика (0...N)<br />interval = range(100, 1100)<br /><br /># график нормального случ. процесса<br />plt.plot(interval,normrand[interval]) # рисуем график<br />plt.grid() # рисуем сетку<br />plt.show() # отображаем<br /><br />#график случайного блуждания<br />plt.plot(interval,rw[interval])<br />plt.grid()<br />plt.show()
Переписал. Согласитесь, проще же код выглядит? (КАКИМ ТЕГОМ ФОРМАТИРУЕТСЯ КОД?)
это типа:
z=[2,5,7] +10000  #работать не будет.
Конечно, списки в python не поддерживают бродкастинг. Его поддерживают массивы numpy.
avatar
v_0ver, код для нормального просмотра людьми сделайте, плиз. Мы-ж не одни здесь коды читаем.)
Вообще код писался мною, чтобы быть максимально читаемым людьми с минимальными знаниями Питон и его пакетов. И показать другие версии кода тоже хорошо.
avatar
3Qu, Чёто не получается, сайт коверкает код. Для вставки кода надо использовать какой-то тег?
Тимофей Мартынов призываю!
avatar
v_0ver,  Ваш код:
# -*- coding: utf-8 -*-
"""
2020-05-09
Spyder Editor

"""

import numpy as np
import matplotlib.pyplot as plt

mu=0 #матожидание
sigma=10 # стандартное отклонение
N=50000 # длина последовательности

# создаём шум (нормально распределенный)
normrand = np.random.default_rng().normal(mu, sigma, N)

# создаем случ блуждание
rw = np.cumsum(normrand)+10000

# Интервал для вывода графика (0...N)
interval = range(100, 1100)

# график нормального случ. процесса
plt.plot(interval,normrand[interval]) # рисуем график
plt.grid() # рисуем сетку
plt.show() # отображаем

#график случайного блуждания
plt.plot(interval,rw[interval])
plt.grid()
plt.show()
avatar
v_0ver, Да, скорости на порядки отличаются. Где это критично — на больших данных или много переборов, например, это критично, а где не критично — ну там да, чисто чтоб не приучаться к неправильному использованию. Сначала пытаешься извернуться в вектор все запихать и только в крайнем случае если никак — уже итерируешься.
avatar
3Qu, а что такое +10000?
Спасибо. А что лучше по вашему опыту — spyder или идея с pycharm плагином?
avatar
_xXx_, не знаю, PyCharm почти не использовал. Spyder вполне устраивает.
avatar
_xXx_, PyCharm — самая мощная IDE для Питона от крупнейшего разработка IDE для множества других языков JetBrains. Все продукты JetBrains особенно славятся функциями, связанными с рефакторинг кода, но не всем навороты PyCharm нужны.
avatar
_xXx_, VSCode с плагином для питона попробуйте. Легковесней pycharm
avatar
Спасибо. Ждем продолжения.
avatar
Торговля — это не случайный процесс… психика человека не выдерживает более 10 новых шагов цены вперед в одном направлении.Отсюда правило свечного анализа 8-10  новых перемен.В идеале перемен 9 те 3 раза по 3.Это импульс из волновой теории.


avatar
Год уже мыкаюсь с python так и не понял(но пробовал)  премуществ каких то средств разработки, пишу все в idle  который в комплекте идет с дистрибутивом. 


теги блога 3Qu

....все тэги



UPDONW
Новый дизайн