Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Биржевой робот


Автор: neic 22.9.2009, 16:51
Хочу создать биржевого робота. С чего начать?

Ни чего не знаю о торговле, разве только купил дёшево, продал дорого.

Автор: Bitter 22.9.2009, 17:49
Ну начни с изучения этой самой торговли ))))) Хотя бы форекс. Потом, проанализировав как всё происходит, попробуй написать программу, которая умеет просто принимать данные биржевые. Если получится, можно уже думать как их обрабатывать. Как вариант - нейросети.

Автор: 7maze 22.9.2009, 21:45
2 neic

Для начала принимай данные, а потом обрабатывай любым математическим методом (математический анализ), коих описано в инете - тысячи. Или заложи определения фигур (а-ля японские свечи). Короче сначала данные - а потом обработка.

Лет 5 назад писал такого робота под metatrader на демо выигрывал, на реальном безбожно слил. Баловство одно это одно

Автор: neic 22.9.2009, 23:17
Bitter
7maze
Как считать данные? Можете привести пример?

Автор: Dims 24.9.2009, 14:25
Найди программы для Форекса. Там есть либо фриварные варианты, либо демки. И там всё объяснено и разъяснено. 

Правда, роботов, наверное, там не будет, но будут:

1) Стандартные способы представления данных -- разберёшься с предметной областью
2) Стандартные измерительные шаблоны, которые помогают человеку делать прогноз -- разберёшься, как обычно анализируют происходящии

Автор: SoWa 24.9.2009, 14:54
Внесу свое мнение: робот получится тупой как дрова.
Человека в торговле не заменит ничто. Анализ- это только анализ, он 100% гарантии не дает, что сейчас тренд пойдет падать, допустим. А все современные индикаторы всегда чуток запаздывают ко времени тренда.

Автор: motorway 26.9.2009, 23:45
off. Могу еще сказать, что с Форексом лучше не связываться - есть много статей, что это лохотрон. Так что реально если проверять на бирже такие вещи, то лучше в более безопасных местах. Просто вы начнете думать, что вот Форекс, хорошая штука, скоро зарабатывать начну - а там полно всяких нечестных способов бывает, так что анализ может просто провалиться.

Автор: KaraKum 30.9.2009, 14:30
В программе MetaTrader есть специальный скриптовый язык для написания советников (можно понимать как "роботов"). Эти советники могут и сделки открывать/закрывать. Язык похож на C.

Автор: Ubhra 4.10.2009, 15:31
Нужно определится с ресурсом откуда таскать информацию. Написать оболочку под win\nix или web. И обрабатывать данные уже средствами этой оболочки. Есть аналоги (free\opensorce) под форекс и др. Можно попробовать их подстроить под себя или же передавать данные из них в свою программу. Все просто. Но для того что бы все получилось, нужно вначале изучить экономику )) И ставить перед собой юолее осмысленные цели.

Автор: victor79 4.10.2009, 18:55
попробуй из Metatrader выгрузить котировки в текст, загрузи в свою программу, сделай процедуру эмулятора совершения сделок, которая автоматом будет списывать спред со совершенной сделки. Умудриться торговать в плюс при нулевом (или близком к тому) спреду - не сложно. А вот при спреде приближающемуся к реальному - у меня не получилось. Если интересно, могу войти в "команду разработчиков", но только пока не увижу чего реального - только в консультационном виде. Опыта хватает, благо за несколько годиков, каких только нейронных сеток и прочей гадости понаизучал. Хоть как я упомянул, что не получилось создать что-то существенное, но приобретенные знания очень помогают в других сферах.

Вот пример моего класса трейдера (эмулятора сделок):
Код

types
   arDouble = array [0..1000] of system.Double;
   parDouble = ^arDouble;

  TTrader = class
  private
      _position: integer;
      _rest: integer;
      _rest_many: double;
      _tax: double;
      _cnt_dials: integer;
      _cnt_steps: integer;

      _price_dls: double;

      _list_prices: parDouble;
      _cnt_prices: integer;
      _spread: double;

      procedure error_pos; overload;
      procedure error_pos(pos: integer); overload;
      procedure _execute(action: integer);
  public
          // в конструкотор передаешь массив котировок, размер массива, и спред на сделку
        constructor Create(list_prices: parDouble; cnt: integer; spread: double);
         // после устанавливаешь позицию, от которой будешь тестировать
        procedure set_pos(pos: integer);
         // каждое выполнение execute перемещает текущее время на единицу, причем если
         //   action = 0 - продать/купить в ноль, 1 - закупиться, -1 - продать в минус. Если просто ждать, тогда нужно action=rest
        procedure execute( action: integer );

        function balance: double; // здесь получаешь текущее состояние баланса (изначальный = 0, а дальше уходишь в плюс или минус)
        property rest: integer read _rest; // текущий остаток
        property price_dls: double read _price_dls; // цена начала текущей сделки
        property cnt_dials: integer read _cnt_dials; // количество совершенных сделок
        property cnt_steps: integer read _cnt_steps; // количество шагов (вызовов execute)

        property tax: double read _tax write _tax; // это если есть к-либо фиксированный налог (можно оставить = 0)

        property pos: integer read _position; // текущая позиция
        function cnt_pos: integer; // всего позиций (cnt в конструкторе)
        property spread: double read _spread write _spread; // спред
   end;

implementation

constructor TTrader.Create(list_prices: parDouble; cnt: integer; spread: double);
Begin
  _tax := 0.0;
  _position := 0;
  _rest := 0;
  _price_dls := 0;
  _list_prices := list_prices;
  _cnt_prices := cnt;
  _spread := spread;
End;

function TTrader.cnt_pos: integer;
asm
   mov eax, TTrader[eax]._cnt_prices
End;

function TTrader.balance: double;
var i, j: integer;
    v: double;
Begin
    if (_position < 0)or(_position > _cnt_prices) then error_pos
    else
    if _rest = 0 then result := _rest_many
    else Begin
       i := _position;
       if i = _cnt_prices then dec(i);

       v := _list_prices[i] / _price_dls - 1;

       result :=  _rest_many + v * _rest;
    End;
End;

procedure TTrader.set_pos(pos: integer);
Begin
    _position := pos;
    _rest := 0;
    _rest_many := 0.0;
    _cnt_dials := 0;
    _cnt_steps := 0;
    _price_dls := 0;
End;

procedure TTrader.execute(action: integer);
// eax - self
// edx - action
asm
   cmp TTrader[eax]._rest, edx
   jnz  @@run_dls
   inc TTrader[eax]._position
   inc TTrader[eax]._cnt_steps
   ret

@@run_dls:
   push  eax
   call  _execute
   pop   eax

   inc TTrader[eax]._position
   inc TTrader[eax]._cnt_steps
end;

procedure TTrader._execute(action: integer);
var v: double;
    i: integer;
Begin
    if (_position < 0)or(_position >= _cnt_prices) then error_pos;

    if _rest <> 0 then Begin
          v := _list_prices[_position] / _price_dls - 1;
          _rest_many := _rest_many + v * _rest - _tax;
    End;

    if action <> 0 then Begin

          _price_dls :=
          _list_prices[_position] + _spread * action;

          _rest_many := _rest_many - _tax;
    End;

    _rest := action;
    inc(_cnt_dials);
End;

procedure TTrader.error_pos;
begin
   raise Exception.CreateFmt('Неправильная позиция трейдера: %d (из возможных %d)', [_position, _cnt_prices]);
end;

procedure TTrader.error_pos(pos: integer);
begin
   raise Exception.CreateFmt('Неправильная позиция трейдера: %d (из возможных %d)', [pos, _cnt_prices]);
end;

Автор: neic 4.10.2009, 22:02
victor79
Я сейчас не много, занят. Освобожусь обращусь ;)

Автор: KaraKum 5.10.2009, 09:15
Парнишка бросил эту затею  smile . Как и многие другие.

Автор: Reshetov 9.10.2009, 16:09
> Хочу создать биржевого робота. С чего начать?

Как не странно, но с теории вероятности в приложении к нестационарности.

Финансовые инструменты нестационарны.

Автор: DRUID3 23.10.2009, 07:50
Цитата(SoWa @  24.9.2009,  13:54 Найти цитируемый пост)
Внесу свое мнение: робот получится тупой как дрова.
Человека в торговле не заменит ничто. Анализ- это только анализ, он 100% гарантии не дает, что сейчас тренд пойдет падать, допустим. А все современные индикаторы всегда чуток запаздывают ко времени тренда. 

Ну... Так категорично... Почему-то вспоминаются "пелевинские" космонавты из "Омон Ра" и их понятие "автоматика". smile 

Цитата(Reshetov @  9.10.2009,  15:09 Найти цитируемый пост)
> Хочу создать биржевого робота. С чего начать?

Как не странно, но с теории вероятности в приложении к нестационарности.

Финансовые инструменты нестационарны. 

 smile Каждый видит жизнь по-своему... Я бы, например, посоветовал изучать линейные и нелинейные системы... Ведь в динамической системе нудно будет искать крупицы детерминизма, а не давать численные оценки достоверностям наступления того или иного события... Эти науки очень близки, почти одинаковый матаппарат, но все таки основные идеи - разные...

P.S.: Никогда таким не страдал, но как по мне - сама идея порочна. Нужно писать не робота - а базис роботов. У Каждого своя стратегия. Из цикла - "хоть один но победитель". Если посидеть и подумать, пооптимизировать туда-сюда - то можно получить прямо таки беспроигрышные варианты - переход количества в качество, так сказать, согласно учению диалектического материализма smile ...

Автор: Leop 18.11.2010, 12:24
Модератор: Сообщение скрыто.

Автор: _Y_ 18.11.2010, 15:06
Сначала анекдот: Наши экономичаекие алгоритмы позволили безошибочно предсказать девять из последних пяти экономических  кризисов!

По существу же имеем задачу с неограниченным числом параметров. При этом нельзя достоверно пренебречь большей их частью. Поэтому робот, совершающий операции сложнее, чем "купить патрию самых дещевых правых босоножек", т.е. принимающий рещения, заведомо обречен. 

Рещение должен пронимать именно человек. А вот что робот может делать, это собрать информацию и провести ее к виду, удобному для пронятия решения. Кроме того, робот может "приводить решение в жизнь", если предполагается какая-то длительная тупая активность на базе глобально принятого решения.

Если вам кто-то рассказывает об успешном биржавом роботе - верьте. Это значит, что правильное биржевое решение (коммерчаская идея) было найдено и заложено в его (робота) алгоритм. Только свои успешные буржевые идеи ни один норнмальный человек общественным достоянием не делает: ни в исходном виде, ни в виде кода.

Автор: Dirol2 17.1.2011, 00:00
Чтоб не плодить темы, спрошу тут же.

Тоже решил написать робота, алгоритм уже в голове есть. Вопрос в том, что моя платформа (Альфа-Директ) позволяет подключаться через COM и брать историю с их сервера с поминутным интервалом в виде бара (макс цена, мин цена, цена открытия, цена закрытия). Этой информации мало для обучения робота.

Для него надо иметь информацию о каждой сделке с момента основания биржи.

Собственно, на какие платформы посмотреть в первую очередь, которые могут предоставить настолько полную информацию? И вообще существуют ли подобные решения на сей день?
Например WealthLab, или QUIK? Не так просто найти нужный файл справки для девелопера по каждой из платформ, да ещё его понять и переварить... Если есть уже те, кто работал с ними - можете подсказать, там такое есть?

Автор: миг 18.1.2011, 21:37
Допустим напишите вы своего робота. Протестируете его на демо счете все будет отлично.. А когда начнете реально играть на рынках, то между вами и рынком будет сидеть посредник, через которого вы будете покупать и продавать.. А поскольку посредник работает не только с вами, то "мягко" говоря он не будет успевать покупать вам ценные бумаги по приемлемым ценам.. Да и в заключенном договоре может быть оговорено, что можно будет за пять минут совершать не более одной сделки.. а за пять минут реальный рынок может несколько раз взлететь и упасть.. Я уже не говорю, что за каждую проведенную сделку вы будете должны заплатить посреднику определенную сумму.

Автор: Kaerus 19.1.2011, 01:25
миг
Выставление заявок через тоже quik (fix шлюз) занимает порядка 300 мс, для некоторых алгоритмов вполне допустимые значений.

Автор: BestCoder 21.1.2011, 22:54
начать с предметной области изучения
изучи вначале, ч то ткое форекс, теория вероятности и т.п.
чтобы понимать, что необходимо автоматизировать и какие обрабатывать параметры
В гугле поищи,  есть много бесплатных торговых роботов, чтобы видеть представление, как они выглядят


______________________________
http://vasyamba.com/

Автор: SBH 20.11.2012, 17:02
Цитата(neic @ 22.9.2009,  16:51)
Хочу создать биржевого робота. С чего начать?

Ни чего не знаю о торговле, разве только купил дёшево, продал дорого.

Торговые роботы:
http://www.i-tt.ru/
http://roboprof.ru
http://www.robotstock.narod.ru
http://www.dafgroup.ru
http://www.hirobot.ru
http://www.yurikon.net
http://bot4sale.ru
http://finlabtrade.ru
http://www.buyrobo.ru
http://www.triad-trading.ru
http://quikprofit.ru
http://4robot.ru
http://www.mycreditcard.ru
http://robot-trading.ru
http://www.finemp.com
http://idtrader.ru
http://www.xelius.ru
http://www.robotcraft.ru


Роботы-ассистенты:
http://www.hirobot.ru 
http://www.itplan.ru
http://roboprof.ru 
http://www.i-tt.ru
http://quikprofit.ru
http://www.xelius.ru

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)