Введение в Python для трейдера

Python – высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода.

Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты – динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Питоне организовывается в функции и классы, которые могут объединяться в модули (они в свою очередь могут быть объединены в пакеты).

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

Python в браузере

Работать с Python можно просто в браузере, не устанавливая его на свой компьютер, а используя многочисленные веб-сервисы:

Установка Anaconda Python для Windows

Дистрибутив Anaconda – это лучший выбор, если вам нужен не только сам интерпретатор Python, но и многие его математические пакеты.

К сожалению, Anaconda не любит, когда имя пользователя написано русскими буквами, поэтому вам придётся создать нового пользователя, в имени которого все буквы английские, и дальнейшую работу вести от имени этого пользователя. Если вас это по какой-либо причине не устраивает, то придётся выбрать другой дистрибутив.

К слову сказать, русские буквы в имени пользователя (а также в именах каталогов) не понимают и многие другие программы, например, Ninja Trader.

(Другой вариант – установить Anaconda на виртуальную машину, например, Oracle VirtualBox, для этого воспользуйтесь следующей инструкцией: “Установка Ubuntu на виртуальную машину Oracle VirtualBox”).

Итак, установим Anaconda Python на свой компьютер, работающий под управлением операционной системы Microsoft Windows. На сайте continuum.io выберем и скачаем нужную версию инсталлятора (рис.1).

../_images/AnacondaInstall-01.png

Рис. 1. Выбор инсталлятора: 1 - Python 2.7 для 64-разрядной версии Microsoft Windows; 2 - Python 2.7 для 32-разрядной версии Microsoft Windows; 3 - Python 3.4 для 64-разрядной версии Microsoft Windows; 4 - Python 3.4 для 32-разрядной версии Microsoft Windows

Найдём скачанный файл (по умолчанию он находится в папке Мои документы/Загрузки). Например, если вы выбрали 64-разрядную версию Python 2.7, то установочный файл версии 2.7.0 называется Anaconda-2.7.0-Windows-x86_64.exe. Двойным кликом левой кнопки мыши запустим его на выполнение.

В открывшемся диалоговом окне нажмём кнопку Next (Далее).

На вопрос о лицензионном соглашении нажмём I Agree (Согласен).

Далее на вопрос “Install for” (Инсталлировать для) выберем опцию Just me (Только для меня). Если у вас есть права администратора на данном компьютере, то можно выбрать All users (Для всех пользователей). Снова нажмём кнопку Next (Далее).

Оставим путь для установки по умолчанию или при необходимости изменим на любой другой (у вас должны быть права записи в указанный каталог). Нажмём кнопку Next (Далее).

Поставим обе галочки Add Anaconda to my PATH environment variable (Добавить каталог программы в путь поиска по умолчанию) и Register Anaconda as my default Python (Зарегистрировать Anaconda в качестве основного интерпретатора Python). Нажмём кнопку Install (Установить).

После непродолжительного ожидания нажмём кнопку Next (Далее) и, наконец, кнопку Finish (Завершить).


Видео по установке дистрибутива Anaconda:


Установка Python в системе Debian/Ubuntu

Если вы хотите ставить все пакеты по одному, то можете воспользоваться следующей инструкцией: Установка Python и математических пакетов.

Но имеется более простой вариант: поставить дистрибутив Anaconda для Linux, в который уже включены часто используемые математические пакеты.

Сначала надо скачать дистрибутив Anaconda for Linux с сайта continuum.io; а затем в терминале выполнить команду:

bash AnacondaX-X.X.X-Linux-x86_64.sh

(вместо символов X укажите номер версии, который записан в имени скачанного файла).

Обновление пакетов Anaconda и проверка работы

Откроем терминал, для этого в системе Microsoft Windows надо выполнить команду системного меню Пуск ‣ Программы ‣ Anaconda ‣ Anaconda Command Prompt, а в Linux – просто нажать комбинацию клавиш Ctrl+Alt+T. Последовательно выполним две команды для обновления Anaconda:

conda update conda
conda update anaconda

На все вопросы ответим утвердительно, для этого надо нажать клавишу y и затем Enter.

Проверим работоспособность установленных программ, для этого в терминале выполним команду для открытия тетрадки IPython Notebook:

ipython notebook

(также можно выполнить пункт IPython Notebook из группы Anaconda в меню Пуск). Откроется окно браузера, в котором можно создать новую тетрадку, нажав справа кнопку New Notebook.

Если браузер не откроется автоматически, то сделаем это вручную и введём в адресной строке:

http://127.0.0.1:8888/

Здесь 127.0.0.1 – это локальный IP-адрес (как вариант, можно написать localhost), а 8888 – это номер порта, на котором по умолчанию работает локальный сервер IPython Notebook.

В тетрадке IPython для проверки в первой же ячейке напишем строки:

%matplotlib inline
from numpy import linspace, cos
import matplotlib.pyplot as plt
x = linspace(0, 10, 50)
y = cos(x)
plt.plot(x, y)

Чтобы выполнить введённый код, надо нажать Shift+Enter. В результате будет построен график функции косинус (рис.2).

../_images/AnacondaInstall-02.png

Рис. 2. Проверка работоспособности IPython Notebook

Чтобы запустить интегрированную среду разработки программ Spyder, выполним команду главного меню Пуск ‣ Программы ‣ Anaconda ‣ Spyder или выполним команду spyder в командной строке (после выбора нужного окружения). В открывшемся окне редактора введём тот же самый код, сохраним получившийся скрипт под любым именем и нажмём клавишу F5 (это команда Run (Выполнить)). Откроется осно с графиком той же самой функции (рис.4)

../_images/AnacondaInstall-03.png

Рис. 3. Проверка работоспособности IDE Spyder

Работа с различными окружениями

Чтобы упростить работу с различными версиями Python и разными наборами дополнительных пакетов, Anaconda Python позволяет создавать программные окружения (environment).

Чтобы создать окружение на основе Python версии 2.7, надо выполнить команду:

conda create -n py27 python=2.7 anaconda

Для создания окружения на основе Python версии 3.5, надо выполнить команду:

conda create -n py35 python=3.5 anaconda

После этого можно легко переключать текущее окружение, например, в системе Microsoft Windows:

activate py27

Пользователи Linux или OS X должны использовать команду:

source activate py27

Вывести список всех доступных окружений можно с помощью команды:

conda info --envs

Текущее окружение будет помечено звёздочкой.

Чтобы деактивировать текущее окружение, используется команда:

deactivate

Можно создать копию окружения, выполнив команду:

conda create --name НовоеИмя --clone ИмяСуществующегоОкружения

Для удаления ненужного окружения имеется команда:

conda remove --name Имя --all

Более подробно работа с окружениями описана в официальной документации.

Работа с пакетами в Anaconda

Чтобы вывести список установленных пакетов, надо выполнить в консоли команду:

conda list

Если требуется выяснить, какие пакеты установлены в неактивном окружении, надо использовать команду:

conda list -n ИмяОкружения

Для установки нового пакета в текущем окружении имеется команда:

conda install ИмяПакета

Чтобы установить пакет в каком-то другом окружении, надо выполнить команду:

conda install --name ИмяОкружения ИмяПакета

Если устанавливаемый пакет отсутствует среди стандартных пакетов, можно попробовать установить его из репозитория anaconda.org. Но сначала надо найти имя канала, в котором находится нужный пакет. Для поиска пакетов на главной странице сайта anaconda.org, в верхней части, под главным меню, имеется специальное поле. Например, найдём пакет bottleneck (он содержит быстрые функции для работы с массивами данных). Результаты поиска будут отображены в виде таблицы; в колонке Owner указано имя канала, оно потребуется нам при вводе команды. Нужный нам пакет представлен в нескольких каналах, но судя по количеству загрузок (колонка Downloads), пользователи предпочитают использовать канал pandas. Поэтому команда для установки пакета будет выглядеть так:

conda install -c pandas bottleneck

Более подробно работа с пакетами описана в официальной документации.

Установка Enthought Canopy

Enthought Canopy – ещё один дистрибутив Python 2, имеющий в своём составе все необходимые математические пакеты и инструменты. Его можно скачать с сайта enthought.com. Вверху надо выбрать свою операционную систему (Windows, Linux или Mac), а правее – разрядность (32 или 64), после чего можно нажать большую кнопку Download Canopy.

Скачанный файл надо запустить на выполнение. Все установки оставить по умолчанию. Если имя пользователя содержит русские буквы, то придётся проводить установку в режиме “для всех пользователей”.

В некоторых случаях соответствующий диалог для выбора режима при установке не появляется, тогда надо будет запустить командную оболочку cmd от имени администратора (через правую кнопку мыши) и выполнить команду:

msiexec /i "canopy-X.X.X-win-64.msi" ALLUSERS=1

(укажите вместо X правильный номер версии скачанного файла).

Установка Python и пакетов по отдельности в системе Windows

Откроем сайт www.python.org; зайдём в раздел Downloads; скачаем файл python-2.x.x или python-3.x.x (здесь x.x.x – номер версии, например, 3.5.1).

Запустим скачанный файл на выполнение.

Выберем Install for all users (Установить для всех пользователей) или Install just for me (Установить только для меня). Нажмём кнопку Next (Далее).

Укажем каталог для установки. Лучше оставить по умолчанию. Нажмём Next.

Выберем все опции для установки. Нажмём Next.

Дождёмся завершения установки. Нажмём Finish (Завершить).

В системном меню Пуск в разделе Программы появилась группа Python x.x. В качестве графической оболочки для выполнения команд Python можно использовать IDLE (Python GUI), а для запуска командной строки надо выбрать пункт Python (command line).

После этого желатально поставить pip, с его помощью легче всего устанавливать остальные пакеты. В новых версиях Python этот пакет, скорее всего, уже установлен. Если же нет, то для его установки надо скачать файл get-pip.py в тот каталог, куда установлен Python. Открыть командную строку (Пуск ‣ Программы ‣ Служебные ‣ Командная строка) и выполнить команду:

python get-pip.py

Затем обновить:

python -m pip install -U pip

Теперь для установки практически любого пакета можно использовать команду:

pip install ИмяПакета

Чтобы вывести список всех установленных пакетов:

pip list

Список пакетов, которые устарели и требуют обновления:

pip list --outdated

Обновление пакета:

pip install -U ИмяПакета

Для получения сведений о конкретном пакете:

pip show ИмяПакета

Поиск пакета:

pip search "СтрокаДляПоиска"

Для удаления пакета служит команда:

pip uninstall ИмяПакета

Если при установке пакета из исходников возникают проблемы из-за отсутствия компилятора, то многие пакеты, уже скомпилированные для Windows, можно найти здесь. После загрузки файла .whl с этого сайта надо выполнить команду:

pip install ИмяФайла.whl

Не забывайте, что в командной строке можно использовать клавишу Tab для автопродолжения команд и имён файлов.

Итак, команда pip позволяет нам установить практически любой пакет Python (можно указывать сразу несколько пакетов, разделяя их пробелом). Нам потребуются для работы следующие пакеты:

pip install ipython[notebook] numpy scipy pandas matplotlib scikit-learn

Проблема с отображением русских букв на графиках

Чтобы символы кириллицы отображались правильно на графиках matplotlib, надо отредактировать конфигурационный файл

PythonEnvHome/Lib/site-packages/matplotlib/mpl-data/matplotlibrc.

Здесь PythonEnvHome – это каталог установки Python или каталог окружения Anaconda. Данный файл можно редактировать непосредственно, но лучше сначала скопировать его в каталог C:/Users/ИмяПользователя/.matplotlib/ и отредактировать копию, чтобы изменения не потерялись после обновления или переустановки пакетов.

Параметры в файле matplotlibrc задаются в виде пар свойство : значение, символ # используется для написания комментариев. Свойство font.family определяет тип шрифта по умолчанию, оно может принимать пять значений: serif, sans-serif, cursive, fantasy или monospace. Свойства font.serif, font.sans-serif, font.cursive, font.fantasy и font.monospace содержат списки имён шрифтов (через запятую, в порядке уменьшения приоритета), соответствующих каждому типу. Нам нужно указать имена доступных в системе шрифтов, которые содержат кириллические символы. Например:

font.serif : Verdana, Arial
font.sans-serif : Tahoma, Arial
font.cursive : Courier New, Arial
font.fantasy : Comic Sans MS, Arial
font.monospace : Arial

Также надо помнить о том, что в тексте программ строки, собержащие символы кириллицы, должны иметь тип unicode. Для этого надо писать символ u перед каждым строковым литералом, например:

plt.title(u"График функции")

Исходные файлы Python должен быть сохранены в кодировке UTF-8. В первых строках каждого файла с исходным кодом надо указать кодировку:

# -*- coding: UTF-8 -*-

Режим калькулятора

В терминале или в оболочке IDLE после приглашения >>> можно записывать любые арифметические выражения, после нажатия клавиши Enter будет выведен результат, например:

>>> 2+4*(5-1)/2
10

Степень и квадратный корень:

>>> 3**2
9
>>> from math import sqrt
>>> sqrt(9)
3.0

Все числа в диапазоне (range) от 1 до 15:

>>> range(1, 16)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

(обратите внимание, что число, указанное вторым параметром, в диапазон не входит).

С помощью функции print() можно вывести строку или число:

>>> print("Hello!\nПривет!")
Hello!
Привет!
>>> print(3+5)
8
>>> from math import pi
>>> print( u"Число пи равно %11.9f" % (pi) )
Число пи равно 3.141592654
>>> print(u'Надо купить {0} кг {1} по цене {2} руб/кг'.format(5, u'картошки', 25))
Надо купить 5 кг картошки по цене 25 руб/кг

Присваивание значений

Чтобы присвоить значение переменной, используется знак =, например:

>>> x=5; y=3; x+y-1
7

Обычно каждый оператор пишется с новой строки, но при желании разрешается записывать операторы в одной строке, разделяя их точкой с запятой.

В именах заглавные и строчные буквы различаются, т.е. Trend и trend – это разные переменные:

>>> X = 2;  x = 3;  print X+x
5

Имена должны начинаться с буквы и могут состоять из букв и цифр; специальные знаки в именах не разрешены, но можно использовать символ подчёркивания _ в любом месте, в том числе в качестве первого символа имени. Пример:

>>> my_var1 = 1
>>> ma_var1 + 3
4

Если какая-то переменная больше не нужна, то для её удаления из памяти используется оператор del:

>>> x = 5
>>> x
5
>>> del x
>>> x
NameError: name 'x' is not defined

Комментарии

Символ # означает, что оставшаяся часть строки содержит комментарий (невыполняемый код):

k = 10  #  Счётчик элементов.

Если строка начинается символом #, то она вся содержит комментарий:

#  Длинный комментарий во всю строку

Строки

Строки обрамляются одиночными ' или двойными кавычками ":

>>> s1='ляля'
>>> s2="люлю"
>>> print(s1+s2)
лялялюлю
print("%s. %s!" % (s1, s2))
ляля. люлю!
>>> s = "0123456789"
>>> print(s[2], s[3:6], s[:3], s[7:], s[-1])
2 345 012 789 9

Функция len() вычисляет длину строки (количество символов):

>>> len(s)
10

Поиск и замена в строке

Поиск подстроки в строке:

>>> s = "Труляля"
>>> s.find("ля")
3

Замена подстроки в строке:

>>> print( s.replace("ля", "м") )
Трумм

Списки и кортежи

Список – упорядоченный набор любых объектов, в том числе чисел и строк. Элементы списка записываются в квадратных скобках через запятую. Элементы нумеруются, начиная с 0. Доступ к отдельному элементу можно получить, записывая его номер в квадратных скобках:

>>> a = [1, 5, u"Строка1"]
>>> a[1]
5
>>> print(a[2])
Строка1
>>> a[0:2]
[1, 5]
>>> len(a)
3

Для поэлементной обработки списков используются циклы (см. ниже).

Кортеж – это список, элементы которого нельзя изменить. Элементы кортежа записываются в круглых скобках через запятую.

>>> a = [1, 5, 9]  # Список.
>>> b = (1, 5, 9)  # Кортеж.
>>> b[2]
9
>>> a[0] = 8
>>> a
[8, 5, 9]
>>> b[0] = 8
TypeError: 'tuple' object does not support item assignment

Логика

Логическая переменная может принимать только два значения: True (истина) и False (ложь).

>>> a = False
>>> a
False
>>> b = 5 < 3
>>> b
False
>>> c = 2 == 2
>>> c
True
>>> 5 >= 2
True

Операции над логическими значениями:

  • and даёт True, если оба операнда равны True.
  • or даёт False, если оба операнда равны False.
  • not меняет логическое значение на противоположное.
>>> True and True
True
>>> True and False
False
>>> False or True
True
>>> False or False
False
>>> a = True;  b = not a;  print(a, b)
(True, False)

Условный оператор

Без альтернативной ветви (рис. 4а):

if условие:
   что-то делаем

С альтернативной ветвью (рис. 4б):

if условие:
   что-то делаем
else:
   делаем что-то другое

Несколько альтернатив (рис. 4в):

if условие1:
   что-то делаем
elif условие2:
   делаем что-то другое
else:
   делаем что-то третье
../_images/ifelse1.png

Рис. 4. Условные операторы

Пример условного оператора без альтернативной ветви:

x = 5
if x>7:
   print("Число больше семи")

Пример условного оператора с альтернативной ветвью:

x = 5
if x>7:
   print("Число больше семи")
else:
   print("Число не больше семи")

Несколько альтернатив:

# -*- coding: UTF-8 -*-
x = 5; y = 2
if x>7:
   print(u"Число x больше семи")
elif y<5:
   print(u"Число y меньше пяти")
else:
   print(u"Число x не больше семи И число y не меньше пяти")

В начале файла принято указывать кодировку, в которой записан исходный текст программы; в данном примере использована кодировка UTF-8.

Составные условия записываются с помощью логических операций and, or и not, например:

a = 7; b = 3
if a > 5 and b < 4:
   c = a*b
else:
   c = a/b
print(c)

Циклы

Для реализации повторяющихся действий и для обработки элементов списков или кортежей используются циклы (рис.5).

../_images/while1.png

Рис. 5. Цикл с предусловием

Цикл с предусловием (выводим числа от 5 до 1):

k = 5
while k>0:
  print(k, end=",")
  k = k-1

Результат:

5,4,3,2,1,

Для Python 2 в самом начале программы (после указания кодировки) необходимо добавить строку:

from __future__ import print_function

(здесь подряд два символа подчёркивания перед future и два – после), чтобы он понимал новый формат функции print.

Цикл for по элементам списка:

a = [1, 5, 10, u"Строка1"]
for x in a:
   print(x, end='  ')

Результат:

1  5  10  Строка1

Цикл по индексу (по номерам элементов списка):

a = [1, 5, 10, u"Строка1"]
for i in range(0, len(a)):
   print(i, " : ", a[i], end=';\n')

Результат:

0  :  1;
1  :  5;
2  :  10;
3  :  Строка1;

Вычисление среднего значения элементов списка

Вычислим сумму элементов массива

\[s = \sum_{i=0}^{n-1}{a_i}\]

и арифметическое среднее \(\overline{a} = s / n\).

# Для Python 2 (чтобы при делении целых чисел
# получался вещественный результат):
# from __future__ import division
a = [1, 5, 10, 3, 8]  # Список.
s = 0  # Здесь будем накапливать сумму элементов.
for x in a:   # Цикл по всем элементам списка a.
   s = s + x  # Можно написать: s += x
am = s / len(a)  # Среднее значение.
print( u"Сумма = {0}; среднее = {1}".format(s, am) )

Результат:

Сумма = 27; среднее = 5.4

Поиск максимального значения элементов списка

Найдём максимальный элемент списка \(a_{\text{max}}\) и его номер (индекс):

a = [1, 5, 10, 3, 8]
amx = a[0]
imx = 0
for i in range(1, len(a)): # Цикл по номерам элементов списка.
   if a[i] > amx:
      amx = a[i]
      imx = i
print( u"Максимальное значение {0} имеет номер {1}."
      .format(amx, imx) )
print(max(a))

Результат:

Максимальное значение 10 имеет номер 2.
10

Попробуйте сами ответить на вопрос, что будет, если в списке окажется 1 элемент? А если 0 элементов? Если среди элементов списка окажется строка или логическое значение?

Выход из цикла и пропуск части тела цикла

Для “досрочного” выхода из цикла используется оператор break :

for i in range(10, 0, -2):
   print(i, end='; ')
   if i==6:
      break

Результат:

10; 8; 6;

Для пропуска оставшейся части тела цикла используется оператор continue:

for i in range(10, 0, -1):
   if i%2 == 0:
      continue
   print(i, end='; ')

Результат:

9; 7; 5; 3; 1;

Альтернативная ветвь цикла

Если тело цикла ни разу не выполнилось:

n = 0
for i in range(0, n):
   print(i)
else:
   print(u"Ничего нет.")

Результат:

Ничего нет.

Ссылки


Теги: Python




Комментарии

Комментариев пока нет.

* Обязательные поля
(Не публикуется)
 
Жирный Курсив Подчеркнутый Перечеркнутый Степень Индекс Код PHP Код Кавычки Вставить линию Вставить маркированный список Вставить нумерованный список Вставить ссылку Вставить e-mail Вставить изображение Вставить видео
 
Улыбка Печаль Удивление Смех Злость Язык Возмущение Ухмылка Подмигнуть Испуг Круто Скука Смущение Несерьёзно Шокирован
 
1000
Captcha
Refresh
 
Введите код:
 
Запомнить информацию введенную в поля формы.