Главная > Торговые стратегии, Торговый робот > Торговый робот для QUIK — Mooving

Торговый робот для QUIK — Mooving

17 июня 2009

moovingКак Вы уже наверное догадались, речь идет о торговом роботе, принимающем решения на основе Mooving Average - скользящей средней. Код раскопал у себя в архивах, публикуя в таком виде как он есть, единственное что поменял — название инструмента. Алгоритм простой: используется одна скользящая средняя и если цена выше чем значение МА — покупает, ниже — продает. Мы уже рассматривали эти алгоритмы в статьях «Индикаторы в торговых роботах» и «Как получить котировки из графика QUIK», поэтому не сложно доработать код под себя. Я его делал несколько лета назад, и в этой редации еще не применены универсальные алгоритмы, как например получение котировок из графика при настраиваемом интервале. Главное сам принцип его работы (редакция кода от 29 января 2010 года):

Код на QPILE доступен только зарегистрированным пользователям.

Скачать торговый робот можно в виде файла.

Пробуйте, тестируйте.

Спонсоры у проекта — разные, обратите внимание :)

Евгений Торговые стратегии, Торговый робот , ,

  1. Olesya
    7 Июль 2009 в 11:46 | #1

    Что это означает? у меня quik почему-то ругается " "

  2. Olesya
    7 Июль 2009 в 11:47 | #2

    span — что это такое?

    Евгений Reply:

    Это редактор сайта так проставил табуляцию — убрал. по поводу верхнего вопроса — тоже самое. Пробуйте сейчас.

  3. Dr. Livsey
    12 Июль 2009 в 15:33 | #3

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

    Евгений Reply:

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

    Торговый робот выложенный в этой статье показывает направление, которое нужно доработать под себя.

  4. indikator
    14 Июль 2009 в 11:17 | #4

    @Dr. Livsey

    А, например, положение цены закрытия свечки заданного тайминга определено — либо выше, либо ниже МА:о)

  5. Rem
    7 Сентябрь 2009 в 12:50 | #5

    Добрый день!

    К сожалению, строки 077-079 выдают неизменный результат: 0.

    077.CANDLE=GET_CANDLE («EQNE», GAZP, "", «1», «MOVING AVERAGE», SUBSTR (CANDLEDATETIME,0,8), SUBSTR (CANDLEDATETIME,8,6))

    078.

    079.MOVING=GET_VALUE (CANDLE, «CLOSE»)+0

    Как выяснилось из отладчика QUIK строка 077 при различных комбинациях параметров интервала, типа графика (в т.ч. PRICE) неизменно выводит пустой результат. Естественно в строке 079 осуществляется сложение пустоты с 0, в итоге получаем 0.

    Более того, из справки QUIK взял пример по функции GET_CANDLE, то же самое :( (

    Подскажите, пожалуйста, в чем тут дело?

    Заранее благодарю.

    Rem Reply:

    Вероятно, все дело в параметрах даты и времени. Время в нашем регионе опережает московское на 1 час, соответственно, в запросе указываются временные параметры местного времени, которого еще нет на сервере.

    Если дело в этом (и если даже не в этом), прошу оказать помощь новичку.

    Кстати, спасибо сайту, с нуля подрос в программировании, теперь самостоятельно могу делать несложные роботы на qpl :)

    Zebra Reply:

    Уважаемый Rem!

    Столкнулся с такой же проблемой — MOVING всегда равен 0. может действительно проблема в моем часовом поясе??? Вам удалось решить эту проблему???

    Заранее благодарен

    Евгений Reply:

    Скорее всего неправильно приписан код инструмента. если вы запускаете его на ФОРТС то брокеры используют два стандарта кода: RIH0 и RTS-3.10, в случае с актуальным фьючерсом на индекс РТС. Попробуйте оба варианта.

    Zebra Reply:

    Спасибо Евгений за быстрый ответ! Скорее всего действительно ошибка могла быть, наверное, в этом, но я пытаюсь получить данные по акции Ростелекома об. на ММВБ(на экране выведен график Ростелекома с 20 минутный тайфреймом, индикатор SMA). А саму программу упростил для отладки до максимально простой!

    PORTFOLIO_EX ROBOT VER 1.1;

    DESCRIPTION ROBOT VER Serg;

    CLIENTS_LIST ALL_CLIENTS;

    FIRMS_LIST ALL_FIRMS;

    PROGRAM

    ClassCodeList = «EQBR» ' код класса инструмента

    INSTRUMENT = «RTKM» ' название инструмента

    PRICE = GET_VALUE (GET_PARAM_EX ( ClassCodeList, INSTRUMENT, «LAST»), «PARAM_VALUE»)+0 ' ТЕКУЩАЯ ЦЕНА

    ' ОПРЕДЕЛЯЕМ ВРЕМЯ И ДАТУ

    DATETIME=GET_VALUE (GET_DATETIME (), «DATETIME»)

    DATE=SUBSTR (DATETIME,6,4)&SUBSTR (DATETIME,3,2)&SUBSTR (DATETIME,0,2)

    SHORTDATE=SUBSTR (DATETIME,4,1)&SUBSTR (DATETIME,0,2)

    TIME=SUBSTR (DATETIME,11,2)&SUBSTR (DATETIME,14,2)&SUBSTR (DATETIME,17,2)

    CDATETIME=GET_VALUE (GET_DATETIME (), «DATETIME»)

    CANDLEDATETIME=SUBSTR (CDATETIME,6,4)&SUBSTR (CDATETIME,3,2)&SUBSTR (CDATETIME,0,2)&SUBSTR (CDATETIME,11,2)&SUBSTR (CDATETIME,14,2)&"00"

    ' Функция для обращения к данным «свечек» на графике, а также к значениям индикаторов технического анализа.

    ' GET_CANDLE (1 — Класс бумаги; 2 — Бумага; 3 — parameter_name; 4 — Интервал; 5 — Название индикатора ТА; 6 — ДАТА; 7 — ВРЕМЯ

    CANDLE=GET_CANDLE ( ClassCodeList , INSTRUMENT, "«, „20“, „MOVING AVERAGE“, SUBSTR (CANDLEDATETIME,0,8), TIME)

    ' ПОСЛЕДНЕЕ ЗНАЧЕНИЕ

    MOVING=GET_VALUE (CANDLE, „CLOSE“)+0

    IF MOVING = 0 ' Проверка правильности определения кривой

    MESSAGE („ SMMA = 0, блин и фака“ , 1)

    END IF

    OUTPUT=CREATE_MAP ()

    OUTPUT=SET_VALUE (OUTPUT,»DATE",DATE)

    OUTPUT=SET_VALUE (OUTPUT,"TIME",TIME)

    OUTPUT=SET_VALUE (OUTPUT,"MOVING",MOVING)

    DELETE_ALL_ITEMS ()

    ADD_ITEM (1,OUTPUT)

    END_PROGRAM

    PARAMETER DATE;

    PARAMETER_TITLE ДАТА;

    PARAMETER_DESCRIPTION ДАТА;

    PARAMETER_TYPE STRING (30);

    END

    PARAMETER TIME;

    PARAMETER_TITLE ВРЕМЯ;

    PARAMETER_DESCRIPTION ВРЕМЯ;

    PARAMETER_TYPE STRING (30);

    END

    PARAMETER MOVING;

    PARAMETER_TITLE MOVING;

    PARAMETER_DESCRIPTION MOVING;

    PARAMETER_TYPE NUMERIC (10,0);

    END

    END_PORTFOLIO_EX

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

    Евгений Reply:

    А график 20-ти минутный Ростелекома с построенным на нем мувингом открыт?

    Zebra Reply:

    Привет! открыт! время и цена постоянно обновляются. Понимаю, что спрашиваю о не возможном — а у вас мой робот запустился???

    с уважением

    Евгений Reply:

    Сейчас не могу запустить — робот торгует.

    код бумаги верный, график открыт — значит проблема в дате или времени в запросе данных по индикатору. Оригинальный запрос такой: CANDLE=GET_CANDLE («SPBFUT»,INSTRUMENT, "", «20», «MOVING AVERAGE», SUBSTR (CANDLEDATETIME,0,8), SUBSTR (CANDLEDATETIME,8,6))

    У вас немного изменен. Выведите функцией MESSAGE запрашиваемое время и дату (либо посмотрите в отладчике) и сразу все понятно будет.

    Rem Reply:

    Уважаемый Zebra!

    Пробовал с утра отправить подробное сообщение с решением вашей (как я понимаю, такой же как и у меня) проблемы, что-то сервер не пропускает...

    Коротко говоря, Евгений, при моем к нему обращении, рекомендовал использовать универсальный способ (см. его сообщение от 7 сентября 2009). Примените этот способ и решение будет найдено.

  6. Евгений
    7 Сентябрь 2009 в 19:18 | #6

    Привет.

    Поищи на сайте публикацию «Как получить котировки из квика по номеру бара». Там готовая функция поиска последней котировки с настраиваемым таймфреймом. Примени ее в этом роботе и получишь универсальный вариант.

    Rem Reply:

    Ок, спасибо!

    Теперь зависаю над привязкой ко времени сервера, чтобы выводимые значения по индикаторам имели точность секунда в секунду. Это предельно важно для скальпинга! Либо время сервера меняется, либо — время на моем компе. Отсюда и расхождения и неточность вывода текущих значений по индикаторам.

    Пробовал функцию:

    DATETIME=GET_INFO_PARAM (SERVERTIME),

    но не пошло... :(

    Что подскажите, какую функцию необходимо использовать в этом случае?

    Благодарю заранее.

    Евгений Reply:

    Привет.

    вот функция получения серверного времени:

    SERVERTIME=GET_INFO_PARAM («SERVERTIME»)

    TIMESERV=SUBSTR (SERVERTIME,0,2)&SUBSTR (SERVERTIME,3,2)&SUBSTR (SERVERTIME,6,7)

    TIME=TIMESERV+0

    Единственная проблема по утрам время вчерашнее))

    Rem Reply:

    Время это серверное и по вечерам какое-то кривое :)

    Тем не менее, выражаю большое человеческое Спасибо лично Евгению за его проект.

    Держи краба пятирублевого :0)

    Евгений Reply:

    Спасибо!

    В эту функцию можно добавить сравнение текущей даты на компе и серверной даты, тогда можно избежать утренней проблемы. а вечером время кривое после окончания сессии, так что все можно сделать :)

    Удачи!

  7. amir279
    18 Сентябрь 2009 в 15:15 | #7

    устанавил робота из mooving.zip портфель успешно устанавливается, затем квик ругается — произошла ошибка при расчете портфеля идентификатор организации "ALL FIRMS сообщение об ошибке File moovin.qpl, line 121 Unknown identifier MONEYCURRENTBALANCE [OUTPUt и т.д.

    Подскажите пожалста че делать

    Евгений Reply:

    Поправил.

    amir279 Reply:

    Спасибо, однако квик ругался снова. Немного поправил, не был «раскрыт» параметр прайс, и были лишние кавычки в начале кода.

    Вот, публикую новый код. тока поменял на фьюч гп. жду открытия торгов, чтоб протестировать.

    PORTFOLIO_EX ROBOT VER 1.0;

    DESCRIPTION ROBOT VER 1.0;

    CLIENTS_LIST ALL_CLIENTS;

    FIRMS_LIST ALL_FIRMS;

    PROGRAM

    ' ЗАПУСКАЕМ КВИК, СТРОИМ ГРАФИК ИНСТРУМЕНТА RIU9, НАКЛАДЫВАЕМ НА НЕГО ИНДИКАТОР SMA С ПЕРИОДОМ 9

    ' ПО CLOSE (НЕПРИНЦИПИАЛЬНО). ВЫВОДИМ ТАБЛИЦЫ «ПОЗИЦИИ ПО КЛИЕНТСКИМ СЧЕТАМ», «ОГРАНИЧЕНИЯ

    ' ПО КЛИЕНТСКИМ СЧЕТАМ»,"ТАБЛИЦА ЗАЯВОК","ТАБЛИЦА СДЕЛОК". В МЕНЮ СВЯЗЬ-СПИСКИ НАСТРАИВАЕМ ПОЛУЧЕНИЕ ДАННЫХ

    ' ПО НУЖНОМУ ИНСТРУМЕНТУ.

    ACCOUNT="SPBFUTXXXX"

    INSTRUMENT="GZZ9"

    NEW_GLOBAL («FLAGSELL»,1)

    NEW_GLOBAL («FLAGBYE»,1)

    TP = GET_VALUE (GET_ITEM («FUTURES_CLIENT_HOLDINGS»,1), «TOTAL_NET»)+0

    LOTS=1

    PRICE=GET_VALUE (GET_PARAM_EX («SPBFUT»,INSTRUMENT,"LAST"),"PARAM_VALUE")+0

    PROFIT=GET_VALUE (GET_ITEM («FUTURES_CLIENT_LIMITS»,1), «VARMARGIN»)

    DATETIME=GET_VALUE (GET_DATETIME (), «DATETIME»)

    DATE=SUBSTR (DATETIME,6,4)&SUBSTR (DATETIME,3,2)&SUBSTR (DATETIME,0,2)

    SHORTDATE=SUBSTR (DATETIME,4,1)&SUBSTR (DATETIME,0,2)

    TIME=SUBSTR (DATETIME,11,2)&SUBSTR (DATETIME,14,2)&SUBSTR (DATETIME,17,2)

    N=GET_NUMBER_OF («ORDERS»)

    ORDERCOUNT=0

    IF N>0 THEN

    FOR I FROM 0 TO N

    IF GET_VALUE (GET_ITEM («ORDERS», I), «STATUS»)="ACTIVE"

    ORDERCOUNT=ORDERCOUNT+1

    END IF

    END FOR

    END IF

    ISREALTIME=0

    SSTATUS=GET_VALUE (GET_PARAM_EX («SPBFUT»,INSTRUMENT,"STATUS"),"PARAM_VALUE")+0

    IF (PRICE0) AND (SSTATUS=1)

    ISREALTIME=1

    END IF

    TRID=SHORTDATE&TIME

    CDATETIME=GET_VALUE (GET_DATETIME (), «DATETIME»)

    CANDLEDATETIME=SUBSTR (CDATETIME,6,4)&SUBSTR (CDATETIME,3,2)&SUBSTR (CDATETIME,0,2)&SUBSTR (CDATETIME,11,2)&SUBSTR (CDATETIME,14,2)&"00"

    CANDLE=GET_CANDLE («SPBFUT»,INSTRUMENT, "«, „20“, „MOVING AVERAGE“, SUBSTR (CANDLEDATETIME,0,8), SUBSTR (CANDLEDATETIME,8,6))

    MOVING=GET_VALUE (CANDLE, „CLOSE“)+0

    OP=»«

    IF ISREALTIME=1

    IF TP=0

    IF (PRICE>=MOVING) AND (ORDERCOUNT=0) AND (FLAGBYE=1)

    OP=»B"

    FLAGBYE=0

    FLAGSELL=1

    END IF

    IF (PRICE<=MOVING) AND (ORDERCOUNT=0) AND (FLAGSELL=1)

    OP="S"

    FLAGSELL=0

    FLAGBYE=1

    END IF

    END IF

    IF (TP=MOVING)

    IF (ORDERCOUNT=0) AND (FLAGBYE=1)

    LOTS=2

    OP="B"

    FLAGBYE=0

    FLAGSELL=1

    END IF

    END IF

    IF (TP>0) AND (PRICE<=MOVING)

    IF (ORDERCOUNT=0) AND (FLAGSELL=1)

    LOTS=2

    OP="S"

    FLAGSELL=0

    FLAGBYE=1

    END IF

    END IF

    END IF

    IF OP"«

    R=ORDER (0,LOTS,OP,»LIMIT",TRID)

    PAUSE (3000)

    END IF

    FUNC PAUSE (PAUSE_TIME)

    PST = GET_DATETIME ()

    FIRST_SYS_TIME = 0+GET_VALUE (PST, «HOUR»)*3600000 + GET_VALUE (PST, «MIN»)*60000 + GET_VALUE (PST, «SEC»)*1000 + GET_VALUE (PST, «MILLISEC»)

    FOR PST_FLAG FROM 0 TO 1

    PST = GET_DATETIME ()

    SECOND_SYS_TIME = 0+GET_VALUE (PST, «HOUR»)*3600000 + GET_VALUE (PST, «MIN»)*60000 + GET_VALUE (PST, «SEC»)*1000 + GET_VALUE (PST, «MILLISEC»)

    DIFF_TIME=(SECOND_SYS_TIME-FIRST_SYS_TIME)

    IF DIFF_TIME<= PAUSE_TIME

    PST_FLAG = -1

    END IF

    END FOR

    END FUNC

    FUNC ORDER (FPRICE,FLOTS,FDIRECTION,FTYPE,FTRID)

    IF FTYPE="LIMIT"

    FPRICE=PRICE

    END IF

    SIGN=-1

    IF FDIRECTION="B"

    SIGN=1

    END IF

    IF FLOTS+0 0

    SET_ROW_COLOR_EX (1,"RGB (0,255,0)", «RGB (0,255,0)», «DEFAULT_COLOR», «DEFAULT_COLOR»)

    END IF

    IF PROFIT+0 = 0

    SET_ROW_COLOR_EX (1,"DEFAULT_COLOR", «DEFAULT_COLOR», «DEFAULT_COLOR», «DEFAULT_COLOR»)

    END IF

    IF PROFIT+0 < 0

    SET_ROW_COLOR_EX (1,"RGB (255,0,0)", "RGB (255,0,0)", "DEFAULT_COLOR", "DEFAULT_COLOR")

    END IF

    END_PROGRAM

    PARAMETER DATE;

    PARAMETER_TITLE ДАТА;

    PARAMETER_DESCRIPTION ДАТА;

    PARAMETER_TYPE STRING (30);

    END

    PARAMETER TIME;

    PARAMETER_TITLE ВРЕМЯ;

    PARAMETER_DESCRIPTION ВРЕМЯ;

    PARAMETER_TYPE STRING (30);

    END

    PARAMETER MOVING;

    PARAMETER_TITLE MOVING;

    PARAMETER_DESCRIPTION MOVING;

    PARAMETER_TYPE NUMERIC (10,0);

    END

    PARAMETER TP;

    PARAMETER_TITLE ТЕКЧИСТПОЗ;

    PARAMETER_DESCRIPTION ТЕКЧИСТПОЗ;

    PARAMETER_TYPE NUMERIC (10,0);

    END

    PARAMETER ISREALTIME;

    PARAMETER_TITLE ISREALTIME;

    PARAMETER_DESCRIPTION ISREALTIME;

    PARAMETER_TYPE STRING (30);

    END

    PARAMETER PRICE;

    PARAMETER_TITLE PRICE;

    PARAMETER_DESCRIPTION PRICE;

    PARAMETER_TYPE STRING (30);

    END

    PARAMETER PROFIT;

    PARAMETER_TITLE ВАР.МАРЖА;

    PARAMETER_DESCRIPTION PROFIT;

    PARAMETER_TYPE NUMERIC (10,0);

    END

    END_PORTFOLIO_EX

  8. 5 Ноябрь 2009 в 20:34 | #8

    Евгений, я новичек.Но эта программа у меня не работает. в строке 23 new_global (<>,1) выдает ошибку.

    Евгений Reply:

    Отредактировал всю версию.

  9. olegpronin777
    22 Ноябрь 2009 в 20:43 | #9

    Заранее извиняюсь, возможно чего-то просто не знаю или не допонимаю, но придется задавать пока глупый вопрос(ы):

    В коде поменял инструмент на свой INSTRUMENT="LKOH"

    так же ACCOUNT="SPBFUT00XXX" — меняю здесь на номерок из таблицы лимитов по бумагам, колонка «Код клиента».

    Подгружаю робота в quik через ctrl+f10, открывается таблица «Портфель %название робота тут!%» с соответствующими в коде колонками.

    текущаю дата отображается, тикает время. И все.

    Как проверить, что программа работает?

    Извиняюсь за глупые вопросы, в этом я совсем новичок, с программированием знаком, но далеко не для quik и торговых систем в целом.

    спасибо.

    Евгений Reply:

    LKOH — это код бумаги Лукойла на ММВБ.

    SPBFUT00XXX — это аккаунт на ФОРТС.

    Определитесь где вы хотите торговать и изучайте основы торговли.

    olegpronin777 Reply:

    все ясно. Я всего лишь не знал, что подразумевается под account. Надо основы по qpile почитать.То есть для Лукойла достаточно закомментить account и использовать instrument?

    торгую на акциях ммвб

  10. olegpronin777
    22 Ноябрь 2009 в 20:44 | #10

    забыл добавить, счет у меня тестовый, зарегистрировал на сайте quik, стоит соответственно терминал quik-junior.

  11. chelny07
    15 Декабрь 2009 в 16:27 | #11

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

    Евгений Reply:

    Добро пожаловать!

    Изменить нужно:

    1. блок расчета текпоза

    2. коды инструмента и класса

    3. блок подсчета активных заявок

    chelny07 Reply:

    вроде запустил но аккаунт все равно выделяет красным, он купил 1 контракт и ничего не делает с ним, тупо купил и все(

    Наверное я точно что-то не так делаю

    Евгений Reply:

    аккаунт типа «SPBFUT» — это только для ФОРТС. На ММВБ аккаунт другой. Разбирайтесь внимательно, код рабочий, но для ФОРТС.

  12. ksm77
    16 Январь 2010 в 20:41 | #12

    Здравствуйте Евгений! Подскажите, пожалуйста, что нужно изменить в коде, чтобы убрать реверс, а работать только в лонг?

    Евгений Reply:

    IF (TP>0) AND (PRICE< =MOVING)

    IF (ORDERCOUNT=0) AND (FLAGSELL=1)

    LOTS=2

    OP="S"

    FLAGSELL=0

    FLAGBYE=1

    END IF

    END IF

    END IF

    В этом куске надо LOTS=1, тогда поза будет просто закрываться.

    и удалить этот кусок:

    IF (PRICE< =MOVING) AND (ORDERCOUNT=0) AND (FLAGSELL=1)

    OP="S"

    FLAGSELL=0

    FLAGBYE=1

    END IF

    либо закомментарить в нем

    ' OP="S"

  13. ksm77
    17 Январь 2010 в 21:46 | #13

    спасибо

  14. ivo-skorpion
    28 Январь 2010 в 23:40 | #14

    Здравствуйте, Евгений!

    Я новичёк, ещё пару дней назад, я даже не знал, что такое МТС!

    Подскажите, пожалуйста, что и где мне нужно поменять в вашем торговом роботе! Я его загрузил из mooving.zip. Я торгую мартовским фьючерсом на доллар SiH0 на 3-х минутном графике, индикатор Moving Average с параметрами Simple, период 12.

    Большое Спасибо!

    ivo-skorpion Reply:

    Извиняюсь, ещё вопрос! Время в роботе обновляется каждые 10 секунд и опаздывают от времени в Квике примерно на 5 секунд, это нормально или могут быть задержки в выставлении заявок? В вопросах выше писали, что есть проблемы со временем и датой, сейчас в этом роботе устранена эта проблема или надо в ручную прописывать? Редактировать робота в Квике можно или нужно редактировать в специальной программе и каждый раз перезагружать в Квик?

    ivo-skorpion Reply:

    Подскажите, как в Notepad++ новые созданные файлы сохранять с расширением qpl, когда нажимаешь -сохранить как- в упор не вижу такого расширения, хотя сами такие файлы читает!

    За всё спасибо! :) Жду с нетерпением на все вопросы ответа, очень хочется попробовать робота! :)

    Евгений Reply:

    «Сохранить как...» и вручную прописать расширение .qpl, тогда редактор распознает этот формат.

    Евгений Reply:

    1. Время итерации робота можно установить минимально = 1 секунде, CTRL-F11

    2. Редактировать можно любым текстовым редактором, сохраняем. и после каждый раз перезагружаем в квик: CTRL-F10 выбираем файл — загрузить. Этого достаточно чтоб изменения применились.

    3. Для автоматической торговли желателен хороший канал связи, когда канал слабый возможны задержки в выставлении заявок.

    4. Есть два источника получения времени и даты в квике:

    а) с сервера

    б) с локального (вашего) компьютера.

    можно использовать оба варианта. Разницы особой нет.

    Евгений Reply:

    Сегодня 29 января 2010 года я обновил версию торгового робота «Mooving», в ней применены серверное время и новая функция получения значений индикаторов. Код проверил на своем реальном счете в «БКС» — работает.

    Zebra Reply:

    Евгений!

    Большое спасибо за Ваш последний код. Сейчас его немного адаптировал под себя и с нетерпением жду начала торговой сессии. Пока разбирался понял, что мне надо, скажем так, еще многому учиться. Смешно сказать, потратил кучу времени для того что бы найти/понять, что такое «идентификатор графика» и только из вашего комментария разобрался. Я уже задавал вопрос по поводу определения времени, и после долгих мучений нашел рабочий код с использованием вашей функции OHLC — но ваш новый код конечно лучше.

    Правда %-), может быть, для красоты можно было бы добавить функцию для вывода треугольничков (продажа/покупка) на график для наглядности, что я и сделал взяв за основу код из NoPasaran!.

    Вопрос: при формировании запроса на покупку/продажу выполняется функция «УВЕЛИЧЕНИЕ ЦЕНЫ ПОКУПКИ/ПРОДАЖИ ДЛЯ ПСЕВДОРЫНОЧНОЙ СДЕЛКИ», это сделано для того что бы избежать продажи/покупки при колебаниях цены рядом с SMA и коэффициент 100 просто для примера и для каждой бумаги он будет, что естественно, свой ИЛИ ЖЕ эта функция несет в себе другой пока мне не ведомый смысл???

    Еще раз спасибо... Сергей

    Евгений Reply:

    Привет.

    1. Треугольнички на графике может делать сам квик — посмотрите в настройках графика, там это есть.

    2. Увеличение и уменьшение это сделать для того чтоб заявка обязательно исполнилась. она как бы приобретает свойства «рыночной заявки». 100 поставил для фьюча на РТС. ДЛя универсальности можно этот параметр вынести в настройки в виде переменной. или уще универсализировать — получать минимальный шаг бумаги из таблицы текпараметров и умножать его на переменный коэфф.

    Zebra Reply:

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

    «Восходящего/нисходящего тренда» — в смысле удачи

  15. sergey54
    31 Январь 2010 в 23:43 | #15

    Здравствуйте, Евгений!

    Я скачал программу Mooving, но она не открывается на моем компьютере; выдается сообщение, что неизвестна программа с помощью которой создан этот файл. Программа Quik на моем компьютере есть. Подскажите, пожайлуста, какая программа нужна для открытия файла mooving_ver11.qpl и где ее можно найти?

    С уважением, Сергей

    Евгений Reply:

    Привет.

    Это обычные текстовые файлы, которые можно редактировать любым текстовым редактором, например блокнотом. Просто .qpl не самое распространенное расширение файла.

    На странице www.hirobot.ru/skachat/ самая первая ссылка рекомендуемый мной редактор для таких файлов.

  16. ivo-skorpion
    1 Февраль 2010 в 23:22 | #16

    Евгений — Вы Гений!!! Большое спасибо Вам, за Ваших роботов!

    Я если, честно сомневался, что такое возможно!

    Всем кто ещё не зарегистрировался, советую! Евгений настоящий профессионал, поможет решить любую проблему!

  17. Сон
    4 Февраль 2010 в 17:17 | #17

    Здравствуйте.

    и все же что надо вписывать в поле ACCOUNT=""

    для торговли на ммвб, и если не сложно, подскажите, что надо еще изменить.

    Я совсем новичок в этот деле, языка Qpile не знаю, но сам когда то владел обычными языками программирования, хотя здесь это врятли поможет:))

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

    Спасибо.

    Евгений Reply:

    Привет.

    Код этих роботов оптимизирован для площадки ФОРТС. Для ММВБ поле аккаунт можно определять автоматически =GET_VALUE (GET_ITEM («DEPO_LIMITS»,1), «TRDACCID»)&""

    Но для оптимизации длч ММВБ менять надо не только аккаунт, но и блок расчета текущей позиции, блок подсчета количества активных заявок.

    Сон Reply:

    Спасибо что ответили:)

    Запустить робота у меня получилось, он сделал пару мелких сделок, после чего я его отключил и начал разбираться с кодом...

    получить заявки на покупку и продажу можно и из таблицы заявок,

    а вот чистые позиции думаю можно только в какой то из этих таблиц

    FIRM_HOLDING Текущие позиции по бумагам

    ACCOUNT_BALANCE Текущие позиции по счетам

    но описания этих двух таблиц я нигде не нашел :- (

    FOR I FROM 0 TO GET_NUMBER_OF («ORDERS»)

    IF GET_VALUE (GET_ITEM («ORDERS», I), «SECCODE»)=INSTRUMENT

    'TP=GET_VALUE (GET_ITEM («ACCOUNT_BALANCE»,I), «TOTAL_NET»)+0

    IF GET_VALUE (GET_ITEM («ORDERS»,I), «OPERATION») = «BUY» AND GET_VALUE (GET_ITEM («ORDERS»,I), «STATUS»)="ACTIVE"

    ORDERCOUNTBUY=GET_VALUE (GET_ITEM («ORDERS»,I), «QUANTITY»)+0

    END IF

    IF GET_VALUE (GET_ITEM («ORDERS»,I), «OPERATION») = «SELL» AND GET_VALUE (GET_ITEM («ORDERS»,I), «STATUS»)="ACTIVE"

    ORDERCOUNTSELL=GET_VALUE (GET_ITEM («ORDERS»,I), «QUANTITY»)+0

    END IF

    ORDERCOUNT=ORDERCOUNTBUY+ORDERCOUNTSELL

    END IF

    END FOR

    конечно же без «TP» весь этот опрос таблицы заявок теряет смысл, и надо брать данные из одной таблицы где все эти значения есть.

    Прошу помочь в поиске нужной таблицы и ее параметров:)

    Евгений Reply:

    Привет.

    1. ТР получаем из таблицы DEPO_LIMITS из поля текущий баланс. Описание всех таблиц есть в руководстве по языку.

    2. ORDERCOUNT вам нужен в общем виде, без деления на активные покупку и продажу. Есго можно получить из таблицы заявок, прогоняя по ней цикл и подсчитывая активные заявки.

    Сон Reply:

    Привет.

    спасибо, разобрался.

    по логике все должно работать, но судя по графикам бумаг, будет много неправильных сделок с одной линией, пока прекращаю с moving'ами, надо ТА почитать сперва...и делать с более сложными сигналами.

    p.s

    перешел на defender'a.

Необходимо войти на сайт, чтобы написать комментарий.