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

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

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