3Qu
3Qu личный блог
09 мая 2020, 19:31

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

Для моделирование ТС на 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.

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

Удачи.

34 Комментария
  • Так по 9800 надо было брать? А я возьму по 9850 — когда тренд покажет разворот.
    • Replikant_mih
      09 мая 2020, 20:09
      Вестников (Витковский), Лучше первый график торговать, по минус 10 покупаешь, по 10 сдаешь, если уходит на минус 15 и потом на 20 — усредняешься. Вы как вы написали торгуйте, я — как я, потом посчитаем прибыли.
      • Replikant_mih, я люблю длинные тренды, но всё равно за совет — спасибо. Советы я тоже люблю — я же советский человек.
  • Replikant_mih
    09 мая 2020, 20:16
    Мне PyCharm нравится, он тупо красивый)). Ну и по функциональности вполне устраивает.
    • Roman Resner
      09 мая 2020, 21:01
      Replikant_mih, А что може не устроить. Там есть все) Сам в нем програмлю.
  • JoeFox
    09 мая 2020, 21:26
    Спасибо, я уже понял, что у меня косяк
  • Ëжик
    09 мая 2020, 21:39
    Это:
    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
      • Ëжик
        09 мая 2020, 22:05
        3Qu, и в последнем случае вместо циклов можно было обойтись:
        plt.plot(Ig,rw[Ib:Ie])
        Без разницы. В моем варианте более прозрачно.
        1. Оно работает на порядок быстрее
        2. Не приучивает к неправильному использованию мат. библиотек (numpy). В данном случае неправильное использование это работа с элементами массива по индексу. Лучше привыкать к векторизации кода смолоду.
        • Михаил
          09 мая 2020, 22:08
          v_0ver, поддержу — код из серии так писать на питоне не нужно. 
            • Михаил
              09 мая 2020, 22:40
              3Qu, правильный вариант вам уже v_0ver написал. А какая цель у вашего кода?
                • Михаил
                  09 мая 2020, 23:05
                  3Qu, цикл вместо слайса — это дичь, а не дело вкуса. numpy придумали для избавления от страшно медленных циклов в Питоне. Плохо, что вы это не понимаете, а при этом пытаетесь научить Питону в приложении к трейдингу, где данных обычно много и нужно думать о скорости, а не писать как попало. 
                  • Михаил
                    11 мая 2020, 16:29
                    Андрей Андреичъ, можно учиться херне, а потом переучиваться. А можно сразу по нормальному учиться делать — обычно это гораздо продуктивнее.
          • Ëжик
            09 мая 2020, 22:59
            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.
              • Ëжик
                09 мая 2020, 23:08
                3Qu, Чёто не получается, сайт коверкает код. Для вставки кода надо использовать какой-то тег?
                Тимофей Мартынов призываю!
        • Replikant_mih
          09 мая 2020, 22:52
          v_0ver, Да, скорости на порядки отличаются. Где это критично — на больших данных или много переборов, например, это критично, а где не критично — ну там да, чисто чтоб не приучаться к неправильному использованию. Сначала пытаешься извернуться в вектор все запихать и только в крайнем случае если никак — уже итерируешься.
      • Капиталист
        10 мая 2020, 08:52
        3Qu, а что такое +10000?
  • _xXx_
    09 мая 2020, 22:39
    Спасибо. А что лучше по вашему опыту — spyder или идея с pycharm плагином?
    • Михаил
      09 мая 2020, 23:41
      _xXx_, PyCharm — самая мощная IDE для Питона от крупнейшего разработка IDE для множества других языков JetBrains. Все продукты JetBrains особенно славятся функциями, связанными с рефакторинг кода, но не всем навороты PyCharm нужны.
    • sgl79
      10 мая 2020, 01:11
      _xXx_, VSCode с плагином для питона попробуйте. Легковесней pycharm
  • Value
    10 мая 2020, 01:54
    Спасибо. Ждем продолжения.
  • ezomm
    10 мая 2020, 15:35
    Торговля — это не случайный процесс… психика человека не выдерживает более 10 новых шагов цены вперед в одном направлении.Отсюда правило свечного анализа 8-10  новых перемен.В идеале перемен 9 те 3 раза по 3.Это импульс из волновой теории.


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

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн