Блог им. sasha1991

Робот с нейронной сетью на QLua

    • 09 августа 2014, 00:43
    • |
    • sasha
  • Еще
Многие слышали о том, что есть некие загадочные нейросети, которые могут успешно торговать на бирже. В этой статье я пролью немого света на этот вопрос. Мы создадим простейшего робота, который будет торговать на основе нейросетей.
Сначала расскажу о том, что же это такое нейронные сети и с чем их едят.  Для этого немного отвлечемся от темы биржи и глянем в сторону искусственного интеллекта.  Согласно википедии, «Искусственный интеллект (ИИ, англ. Artificial intelligence, AI) — наука и технология создания интеллектуальных машин, особенно интеллектуальных компьютерных программ. ИИ связан со сходной задачей использования компьютеров для понимания человеческого интеллекта, но не обязательно ограничивается биологически правдоподобными методами» (цитата:http://ru.wikipedia.org/wiki/%C8%F1%EA%F3%F1%F1%F2%E2%E5%ED%ED%FB%E9_%E8%ED%F2%E5%EB%EB%E5%EA%F2)
Другое ИИ определение звучит так: «это область исследований, направленная на создание компьютеров, которые будут выполнять такие функции, которые, в настоящее время, человек выполняет лучше» (Цитата: В. Н. Бондарев, Ф. Г. (2002). Искусственный интеллект. Севастопаль: СевНТУ.)

В общем, простыми словами можно сказать, что искусственный интеллект – это попытка создать компьютеры (компьютерные программы), которые бы мыслили как человек. Для чего это надо? Дело в том, что человеческий мозг многие задачи выполняет гораздо лучше компьютеров. Хотя уже сейчас созданы программы, которые с успехом выполняют некоторые из этих задач, например, распознавание звуков, графических образов, обработка абстрактных знаний. 
Теперь вернемся к бирже. Прочитав об искусственном интеллекте, вы наверняка подумали, что хорошо бы иметь такого робота, который бы торговал как профессиональный трейдер, постоянно подстраиваясь под быстро меняющийся рынок. Не секрет, что многие механические торговые системы могут прибыльно торговать только на каком-то одном временном периоде, а потом от них уже мало пользы. Иными словами, нам нужен механизм, который мог бы сам выдумывать торговые стратегии, находить закономерности и способный самообучаться. Такие системы сейчас разрабатываются, правда, не для биржи, а для других целей, и этим занимаются целые институты  с бюджетом в миллионы долларов. Но пусть вас это не пугает. В былые времена тоже только очень умные ученые добывали знания, которыми сейчас может воспользоваться любой школьник. Так что нам никто не мешает, используя известные методики создания искусственного интеллекта, написать что-то свое, простое.
Итак, возвращаемся к нейронным сетям. Пришло самое время приоткрыть завесу тайны и сказать, что же это такое. Нейрон – это нервная клетка, из которых состоит наш мозг, а так же другие органы нервной системы – спинной мозг, ганглии  (нервные узлы) и так далее. Каждый нейронсостоит из дендритов, сомы и аксонов:
 Робот с нейронной сетью на QLua
Дендриты — это ветвеобразные отростки, обеспечивающие сбор информации от других нейронов или рецепторов. Тело нервной клетки называется сома. В ней происходят сложные биохимические процессы, благодаря которым идут различные нелинейные преобразования сигналов. Аксон — это отросток нейрона, по которому выходной сигнал поступает на дендриты. Он разделяется на множество волокон. Место соединения аксонов с дендритом называется синапс.
В настоящее время созданы различные математические модели нейронов. Одна из них – это суммирование входных сигналов, помноженных на весовые коэффициенты. Выходной сигнал – это результат такого вычисления. Часто выходной сигнал преобразуется путем передаточной функции, самая простая из них – пороговая. Если результат превысил некий порог срабатывания, то на выходе 1, иначе 0. Совокупность таки моделей нейронов, называемых искусственными нейронами – это искусственная нейронная сеть (ИНС), или, иначе, нейросеть.
В настоящее время ИНС могут выполнять следующие задачи:
  • Компьютерное зрение (распознавание образов, в том числе и человеческих лиц, а так же дактилоскопия; распознавание текста).
  • Распознавание звуков.
  • Анализ числовых последовательностей, прогнозы.
  • Ассоциативная память.
  • Анализ данных, кластеризация (автоматическая классификация объектов по признакам).
Замечательная способность нейронных сетей состоит в том, что они способны обучаться. Суть обучения состоит в том, что весовые коэффициенты, на которые умножаются входные сигналы в процесса расчета, изменяются по определенному в процессе подачи на вход нейросети сигнала. Обучение бывает с учителем и без учителя. В первом случае после подачи входного сигнала значение на выходе сравнивается с желаемым и при необходимости корректируются весовые коэффициенты. При обучении без учителя нейросеть сама определяет закономерности во входных данных.
У нас будет нейросеть обучаться с учителем. Роль «учителя» будет выполнять изменения цены после совершения сделки. Если цена меняется в нашем направлении – все нормально. Если в противоположном – нейросеть надо учить. Входные данные – это котировки трех последних свечей (open, close, high, low). Таким образом, у нейросети всего 12 входов. Состоит наша нейросеть для простоты всего из одного нейрона (как правило, многослойные нейросети гораздо хуже обрабатывают биржевые котировки, проверил на собственном опыте).
Вот процедура обучения, написанная на qlua:

--обучение нейрона
--t — желаемая реакция нейрона, y — текущая реакция нейрона
function study(y)
      t=-y --желаемая реакция, она полностью противоположна текущей (вместо покупки надо продавать, вместо продажи покупать)
    dty=t-y;
      local N=getNumCandles(«Price»)
      local t,n,i=getCandlesByIndex(«Price», 0, N-4, 4)
      base_price=t[0].close
    for v=0,2,do
            neuron[v*4+1]=neuron[v*4+1]+mu*dty*t[v+1].open / base_price
            neuron[v*4+2]=neuron[v*4+2]+mu*dty*t[v+1].low / base_price
            neuron[v*4+3]=neuron[v*4+3]+mu*dty*t[v+1].high / base_price
            neuron[v*4+4]=neuron[v*4+4]+mu*dty*t[v+1].close / base_price    
      end
end
Наш нейрон – это просто массив коэффициентов. В начале работы программы он инициируется случайными числами:

function main()
      for v=1,12,do neuron[v]=math.random()-0.5 end --инициализируем веса нейрона
      while is_run do
            sleep(2000)
            robot()
      end
end
Выходные данные нашего нейрона 1 (если надо покупать) или -1, если надо продавать. Рассчитывает нейрон функция get_signal:

--Функция определяет сигнал путем расчета нейрона
--возвращает 1 если надо покупать и -1 если продавать
function get_signal()
      local N=getNumCandles(«Price»)
      t,n,i=getCandlesByIndex(«Price», 0, N-4, 4)
      res=0
      base_price=t[0].close
      for v=0,2,do
            res=res+neuron[v*4+1]*t[v+1].open / base_price
            res=res+neuron[v*4+2]*t[v+1].low / base_price
            res=res+neuron[v*4+3]*t[v+1].high / base_price
            res=res+neuron[v*4+4]*t[v+1].close / base_price
      end
      if res>=then
            return 1
      else
            return -1
      end
end
Все остальные блоки робота примерно такие же, как и в моих предыдущих статьях, описывать их не буду, полный текст робота см. приложение 1. Остановлюсь лишь подробно на параметрах:

--Параметры:
p_classcode=«TQBR» --Код класса
p_seccode=«LKOH» --Код инструмента
p_account=«L01-00000F00» --Код счета
p_clientcode=«52134» --Клиенткий код
p_firmid=«MC0058900000»  --код фирмы
p_count=2 --Размер позиции
p_spread=3 --Проскальзывание
mu=0.1 --коэффициент обучения
p_study_level=1; --Уровень изменения цен, при котором происходит обучение нейрона
p_file = io.open(«D:\\1\\userlog.txt», «w»)  — тут надо указать путь к файлу лога
Параметры p_classcode, p_seccode, p_account, p_clientcode, p_firmid – это настройик выбранного финансового инструмента и брокерского счета. p_count – количество лот, которыми торгуем. p_spread – размер проскальзывания, mu – коэффициент обучения,  им мы регулируем скорость обучения. Сделаем коэффициенты больше – робот будет обучаться быстрее, но тогда мы рискуем «перелететь» момент максимального обучения и переучить нейросеть. p_study_level – уровень изменения (в валюте инструмента) цен, при котором вызывается процедура обучения, если цена пошла не в ту сторону. p_file – имя файла лога, в который будет писаться протокол работы робота, в том числе и изменение коэффициентов.
На этом все, удачной торговли.  robostroy.ru/community/article.aspx?id=769
    ★32
    24 комментария
    Саша, ты сам то хоть шаришь в нейросетях?
    avatar
    Lika, на примитивном уровне.
    avatar
    sasha, молодец) А программирование изучаешь?
    avatar
    Lika, Могу программировать но это примитивные разработки роботов на базе TS lab,MQL4
    avatar
    sasha, Молодчина) Кого из смартлабовцев считаешь своим мясом?
    avatar
    Lika, отлично, это нужно в цитатник! :))
    avatar
    Смарт лаб это своего рода синтезатор.Единствинный недостаток это слишком много трллей.По поводу мяса.Здесь вопрос не уместный.Зарабатываю деньги за счёт ММ.Как твоя торговля?
    avatar
    sasha, да ни как. Я еще не торгую на фортсе, но скоро буду. А единственный депозит на форексе — 100 баксов я слила))
    За счет ММ — эти типа всякие усреднялки — сеточники и мартингейлы?
    avatar
    Lika, я уже почти 4 года торгую форекс, в том числе и западные рынки, сейчас больше Россия интересует.Могу сказать что после форекса торговать остальные рынке стало гораздо легче.Торговать форекс сейчас я не рекомендую, я знал людей которые там зарабатывали раньше, сейчас там стала очень трудно работать.Тем не мнение колебаюсь около нуля.Россия 3 месяц в +.
    avatar
    Ясно, но ты не ответил про мартингейл и усреднялки.
    Можно я тебя добавлю в свой список мяса? )
    avatar
    Lika, что значит список мяса?
    avatar
    sasha, теперь ясно) Я просто сначала подумала за счет мм- манименеджмента, а ты имел ввиду мм — маркетмейкеры) ЛАдно, пока что не буду включать в свой мясной список тебя)
    avatar
    Ну хорошо отвечу взаимностью.Хотя не понимаю зачем это вам?
    avatar
    sasha, да это шутка)))
    avatar
    эх… еслиб так все просто было…
    avatar
    ves2010, дык интереснож человеку, а больше для движения вперёд ничего не нужно. главное — интерес :)
    avatar
    дней пять назад я эту статью видел в инете.
    avatar
    Интересная тема, что то подобное уже реализованно для RI и SI, пока в тестовом режиме доступно на www.managerhf.com/beta
    avatar
    Нейронные сети давно себя показали — к чему по 1000 раз возвращаться к этому? Я эту тему более 10 лет назад закрыл…
    avatar
    «Цитата: В. Н. Бондарев, Ф. Г. (2002). Искусственный интеллект. Севастопаль: СевНТУ.»

    круто. я у него учился в универе :)

    avatar

    теги блога sasha

    ....все тэги



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