Блог им. 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.

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

Удачи.

10.2К | ★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  который в комплекте идет с дистрибутивом. 


Читайте на SMART-LAB:
Фото
🧠 Ресейл и поколение Z: почему молодёжь выбирает разумное потребление
📱 Поколение Z относится к потреблению прагматичнее, чем остальные. Для них важны не громкие слова и статус, а понятная ценность покупки —...
5 идей в российских акциях. Индекс МосБиржи снова на грани 2700
Индекс МосБиржи опять торгуется на грани значимого уровня 2700 п. Сейчас не исключен очередной отскок от указанного уровня. Кроме того, рынок...
Фото
Сделки в портфеле ВДО
Если Индекс ОФЗ (RGBI) пробьет вниз 116,69 п., то в портфеле PRObonds ВДО увеличиваем короткую позицию во фьючерсе на него с ~1,5% до 2,5% от...
Фото
Хэдхантер. Ситуация на рынке труда в декабре идет ко дну - хуже не было никогда
Вышла статистика рынка труда за декабрь 2025 года, которую Хедхантер публикует ежемесячно, что же там интересного: Динамика...

теги блога 3Qu

....все тэги



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