Торговый робот для QUIK — Mooving
Как Вы уже наверное догадались, речь идет о торговом роботе, принимающем решения на основе Mooving Average - скользящей средней. Код раскопал у себя в архивах, публикуя в таком виде как он есть, единственное что поменял — название инструмента. Алгоритм простой: используется одна скользящая средняя и если цена выше чем значение МА — покупает, ниже — продает. Мы уже рассматривали эти алгоритмы в статьях «Индикаторы в торговых роботах» и «Как получить котировки из графика QUIK», поэтому не сложно доработать код под себя. Я его делал несколько лета назад, и в этой редации еще не применены универсальные алгоритмы, как например получение котировок из графика при настраиваемом интервале. Главное сам принцип его работы (редакция кода от 29 января 2010 года):
Код на QPILE доступен только зарегистрированным пользователям.
Скачать торговый робот можно в виде файла.
Пробуйте, тестируйте.
Спонсоры у проекта — разные, обратите внимание
Что это означает? у меня quik почему-то ругается " "
span — что это такое?
Евгений Reply:
июля 7, 2009 at 13:43
Это редактор сайта так проставил табуляцию — убрал. по поводу верхнего вопроса — тоже самое. Пробуйте сейчас.
Я уже пробовал делать такую штуку, но возникла проблема... Когда цена будет переходить через скользящую, то за минуту может быть сделано десяток сделок, когда цена колеблется вокруг средней. эти колебания сьедают всю прибыль
Евгений Reply:
июля 12, 2009 at 17:38
В этом случае я считаю надо делать отступ в плюс и минус от значения скользящей, чем он будет больше, тем меньше хаотичных сделок и тем больше нацеленность на большой тренд. Для начала подобные стратегии нужно обязательно отточить в системе теханализа, например MultiCharts.
Торговый робот выложенный в этой статье показывает направление, которое нужно доработать под себя.
@Dr. Livsey
А, например, положение цены закрытия свечки заданного тайминга определено — либо выше, либо ниже МА:о)
Добрый день!
К сожалению, строки 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:
сентября 7, 2009 at 14:02
Вероятно, все дело в параметрах даты и времени. Время в нашем регионе опережает московское на 1 час, соответственно, в запросе указываются временные параметры местного времени, которого еще нет на сервере.
Если дело в этом (и если даже не в этом), прошу оказать помощь новичку.
Кстати, спасибо сайту, с нуля подрос в программировании, теперь самостоятельно могу делать несложные роботы на qpl
Zebra Reply:
января 27, 2010 at 17:25
Уважаемый Rem!
Столкнулся с такой же проблемой — MOVING всегда равен 0. может действительно проблема в моем часовом поясе??? Вам удалось решить эту проблему???
Заранее благодарен
Евгений Reply:
января 27, 2010 at 19:37
Скорее всего неправильно приписан код инструмента. если вы запускаете его на ФОРТС то брокеры используют два стандарта кода: RIH0 и RTS-3.10, в случае с актуальным фьючерсом на индекс РТС. Попробуйте оба варианта.
Zebra Reply:
января 28, 2010 at 15:24
Спасибо Евгений за быстрый ответ! Скорее всего действительно ошибка могла быть, наверное, в этом, но я пытаюсь получить данные по акции Ростелекома об. на ММВБ(на экране выведен график Ростелекома с 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:
января 28, 2010 at 21:12
А график 20-ти минутный Ростелекома с построенным на нем мувингом открыт?
Zebra Reply:
января 28, 2010 at 21:22
Привет! открыт! время и цена постоянно обновляются. Понимаю, что спрашиваю о не возможном — а у вас мой робот запустился???
с уважением
Евгений Reply:
января 28, 2010 at 21:30
Сейчас не могу запустить — робот торгует.
код бумаги верный, график открыт — значит проблема в дате или времени в запросе данных по индикатору. Оригинальный запрос такой: CANDLE=GET_CANDLE («SPBFUT»,INSTRUMENT, "", «20», «MOVING AVERAGE», SUBSTR (CANDLEDATETIME,0,8), SUBSTR (CANDLEDATETIME,8,6))
У вас немного изменен. Выведите функцией MESSAGE запрашиваемое время и дату (либо посмотрите в отладчике) и сразу все понятно будет.
Rem Reply:
января 28, 2010 at 22:05
Уважаемый Zebra!
Пробовал с утра отправить подробное сообщение с решением вашей (как я понимаю, такой же как и у меня) проблемы, что-то сервер не пропускает...
Коротко говоря, Евгений, при моем к нему обращении, рекомендовал использовать универсальный способ (см. его сообщение от 7 сентября 2009). Примените этот способ и решение будет найдено.
Привет.
Поищи на сайте публикацию «Как получить котировки из квика по номеру бара». Там готовая функция поиска последней котировки с настраиваемым таймфреймом. Примени ее в этом роботе и получишь универсальный вариант.
Rem Reply:
сентября 11, 2009 at 14:22
Ок, спасибо!
Теперь зависаю над привязкой ко времени сервера, чтобы выводимые значения по индикаторам имели точность секунда в секунду. Это предельно важно для скальпинга! Либо время сервера меняется, либо — время на моем компе. Отсюда и расхождения и неточность вывода текущих значений по индикаторам.
Пробовал функцию:
DATETIME=GET_INFO_PARAM (SERVERTIME),
но не пошло...
Что подскажите, какую функцию необходимо использовать в этом случае?
Благодарю заранее.
Евгений Reply:
сентября 11, 2009 at 20:23
Привет.
вот функция получения серверного времени:
SERVERTIME=GET_INFO_PARAM («SERVERTIME»)
TIMESERV=SUBSTR (SERVERTIME,0,2)&SUBSTR (SERVERTIME,3,2)&SUBSTR (SERVERTIME,6,7)
TIME=TIMESERV+0
Единственная проблема по утрам время вчерашнее))
Rem Reply:
сентября 11, 2009 at 21:47
Время это серверное и по вечерам какое-то кривое
Тем не менее, выражаю большое человеческое Спасибо лично Евгению за его проект.
Держи краба пятирублевого :0)
Евгений Reply:
сентября 12, 2009 at 10:04
Спасибо!
В эту функцию можно добавить сравнение текущей даты на компе и серверной даты, тогда можно избежать утренней проблемы. а вечером время кривое после окончания сессии, так что все можно сделать
Удачи!
устанавил робота из mooving.zip портфель успешно устанавливается, затем квик ругается — произошла ошибка при расчете портфеля идентификатор организации "ALL FIRMS сообщение об ошибке File moovin.qpl, line 121 Unknown identifier MONEYCURRENTBALANCE [OUTPUt и т.д.
Подскажите пожалста че делать
Евгений Reply:
сентября 22, 2009 at 17:29
Поправил.
amir279 Reply:
сентября 23, 2009 at 10:05
Спасибо, однако квик ругался снова. Немного поправил, не был «раскрыт» параметр прайс, и были лишние кавычки в начале кода.
Вот, публикую новый код. тока поменял на фьюч гп. жду открытия торгов, чтоб протестировать.
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
Евгений, я новичек.Но эта программа у меня не работает. в строке 23 new_global (<>,1) выдает ошибку.
Евгений Reply:
ноября 6, 2009 at 20:45
Отредактировал всю версию.
Заранее извиняюсь, возможно чего-то просто не знаю или не допонимаю, но придется задавать пока глупый вопрос(ы):
В коде поменял инструмент на свой INSTRUMENT="LKOH"
так же ACCOUNT="SPBFUT00XXX" — меняю здесь на номерок из таблицы лимитов по бумагам, колонка «Код клиента».
Подгружаю робота в quik через ctrl+f10, открывается таблица «Портфель %название робота тут!%» с соответствующими в коде колонками.
текущаю дата отображается, тикает время. И все.
Как проверить, что программа работает?
Извиняюсь за глупые вопросы, в этом я совсем новичок, с программированием знаком, но далеко не для quik и торговых систем в целом.
спасибо.
Евгений Reply:
ноября 22, 2009 at 21:29
LKOH — это код бумаги Лукойла на ММВБ.
SPBFUT00XXX — это аккаунт на ФОРТС.
Определитесь где вы хотите торговать и изучайте основы торговли.
olegpronin777 Reply:
ноября 22, 2009 at 21:55
все ясно. Я всего лишь не знал, что подразумевается под account. Надо основы по qpile почитать.То есть для Лукойла достаточно закомментить account и использовать instrument?
торгую на акциях ммвб
забыл добавить, счет у меня тестовый, зарегистрировал на сайте quik, стоит соответственно терминал quik-junior.
Принимайте новичка) и я хотел бы узнать что нужно переделать чтобы запустить этого робота на счете ммвб и торговать акциями сбера. заранее извеняюсь за вопрос который наверняка прост.
Евгений Reply:
декабря 15, 2009 at 19:26
Добро пожаловать!
Изменить нужно:
1. блок расчета текпоза
2. коды инструмента и класса
3. блок подсчета активных заявок
chelny07 Reply:
декабря 16, 2009 at 17:16
вроде запустил но аккаунт все равно выделяет красным, он купил 1 контракт и ничего не делает с ним, тупо купил и все(
Наверное я точно что-то не так делаю
Евгений Reply:
декабря 16, 2009 at 18:50
аккаунт типа «SPBFUT» — это только для ФОРТС. На ММВБ аккаунт другой. Разбирайтесь внимательно, код рабочий, но для ФОРТС.
Здравствуйте Евгений! Подскажите, пожалуйста, что нужно изменить в коде, чтобы убрать реверс, а работать только в лонг?
Евгений Reply:
января 17, 2010 at 18:17
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"
спасибо
Здравствуйте, Евгений!
Я новичёк, ещё пару дней назад, я даже не знал, что такое МТС!
Подскажите, пожалуйста, что и где мне нужно поменять в вашем торговом роботе! Я его загрузил из mooving.zip. Я торгую мартовским фьючерсом на доллар SiH0 на 3-х минутном графике, индикатор Moving Average с параметрами Simple, период 12.
Большое Спасибо!
ivo-skorpion Reply:
января 28, 2010 at 23:49
Извиняюсь, ещё вопрос! Время в роботе обновляется каждые 10 секунд и опаздывают от времени в Квике примерно на 5 секунд, это нормально или могут быть задержки в выставлении заявок? В вопросах выше писали, что есть проблемы со временем и датой, сейчас в этом роботе устранена эта проблема или надо в ручную прописывать? Редактировать робота в Квике можно или нужно редактировать в специальной программе и каждый раз перезагружать в Квик?
ivo-skorpion Reply:
января 29, 2010 at 1:26
Подскажите, как в Notepad++ новые созданные файлы сохранять с расширением qpl, когда нажимаешь -сохранить как- в упор не вижу такого расширения, хотя сами такие файлы читает!
За всё спасибо!
Жду с нетерпением на все вопросы ответа, очень хочется попробовать робота!
Евгений Reply:
января 29, 2010 at 18:52
«Сохранить как...» и вручную прописать расширение .qpl, тогда редактор распознает этот формат.
Евгений Reply:
января 29, 2010 at 18:57
1. Время итерации робота можно установить минимально = 1 секунде, CTRL-F11
2. Редактировать можно любым текстовым редактором, сохраняем. и после каждый раз перезагружаем в квик: CTRL-F10 выбираем файл — загрузить. Этого достаточно чтоб изменения применились.
3. Для автоматической торговли желателен хороший канал связи, когда канал слабый возможны задержки в выставлении заявок.
4. Есть два источника получения времени и даты в квике:
а) с сервера
б) с локального (вашего) компьютера.
можно использовать оба варианта. Разницы особой нет.
Евгений Reply:
января 29, 2010 at 19:44
Сегодня 29 января 2010 года я обновил версию торгового робота «Mooving», в ней применены серверное время и новая функция получения значений индикаторов. Код проверил на своем реальном счете в «БКС» — работает.
Zebra Reply:
января 31, 2010 at 13:19
Евгений!
Большое спасибо за Ваш последний код. Сейчас его немного адаптировал под себя и с нетерпением жду начала торговой сессии. Пока разбирался понял, что мне надо, скажем так, еще многому учиться. Смешно сказать, потратил кучу времени для того что бы найти/понять, что такое «идентификатор графика» и только из вашего комментария разобрался. Я уже задавал вопрос по поводу определения времени, и после долгих мучений нашел рабочий код с использованием вашей функции OHLC — но ваш новый код конечно лучше.
Правда %-), может быть, для красоты можно было бы добавить функцию для вывода треугольничков (продажа/покупка) на график для наглядности, что я и сделал взяв за основу код из NoPasaran!.
Вопрос: при формировании запроса на покупку/продажу выполняется функция «УВЕЛИЧЕНИЕ ЦЕНЫ ПОКУПКИ/ПРОДАЖИ ДЛЯ ПСЕВДОРЫНОЧНОЙ СДЕЛКИ», это сделано для того что бы избежать продажи/покупки при колебаниях цены рядом с SMA и коэффициент 100 просто для примера и для каждой бумаги он будет, что естественно, свой ИЛИ ЖЕ эта функция несет в себе другой пока мне не ведомый смысл???
Еще раз спасибо... Сергей
Евгений Reply:
января 31, 2010 at 19:42
Привет.
1. Треугольнички на графике может делать сам квик — посмотрите в настройках графика, там это есть.
2. Увеличение и уменьшение это сделать для того чтоб заявка обязательно исполнилась. она как бы приобретает свойства «рыночной заявки». 100 поставил для фьюча на РТС. ДЛя универсальности можно этот параметр вынести в настройки в виде переменной. или уще универсализировать — получать минимальный шаг бумаги из таблицы текпараметров и умножать его на переменный коэфф.
Zebra Reply:
января 31, 2010 at 21:25
Евгений, как я и писал мне надо учиться и учиться. буду завтра тестировать.
«Восходящего/нисходящего тренда» — в смысле удачи
Здравствуйте, Евгений!
Я скачал программу Mooving, но она не открывается на моем компьютере; выдается сообщение, что неизвестна программа с помощью которой создан этот файл. Программа Quik на моем компьютере есть. Подскажите, пожайлуста, какая программа нужна для открытия файла mooving_ver11.qpl и где ее можно найти?
С уважением, Сергей
Евгений Reply:
февраля 1, 2010 at 22:05
Привет.
Это обычные текстовые файлы, которые можно редактировать любым текстовым редактором, например блокнотом. Просто .qpl не самое распространенное расширение файла.
На странице www.hirobot.ru/skachat/ самая первая ссылка рекомендуемый мной редактор для таких файлов.
Евгений — Вы Гений!!! Большое спасибо Вам, за Ваших роботов!
Я если, честно сомневался, что такое возможно!
Всем кто ещё не зарегистрировался, советую! Евгений настоящий профессионал, поможет решить любую проблему!
Здравствуйте.
и все же что надо вписывать в поле ACCOUNT=""
для торговли на ммвб, и если не сложно, подскажите, что надо еще изменить.
Я совсем новичок в этот деле, языка Qpile не знаю, но сам когда то владел обычными языками программирования, хотя здесь это врятли поможет:))
Так сказать, чтобы появилось стремление для изучения, надо для начала чтобы вам замечательный робот, сделал пару сделок, а дальше уже будет с чем разбираться.
Спасибо.
Евгений Reply:
февраля 4, 2010 at 19:15
Привет.
Код этих роботов оптимизирован для площадки ФОРТС. Для ММВБ поле аккаунт можно определять автоматически =GET_VALUE (GET_ITEM («DEPO_LIMITS»,1), «TRDACCID»)&""
Но для оптимизации длч ММВБ менять надо не только аккаунт, но и блок расчета текущей позиции, блок подсчета количества активных заявок.
Сон Reply:
февраля 6, 2010 at 1:11
Спасибо что ответили:)
Запустить робота у меня получилось, он сделал пару мелких сделок, после чего я его отключил и начал разбираться с кодом...
получить заявки на покупку и продажу можно и из таблицы заявок,
а вот чистые позиции думаю можно только в какой то из этих таблиц
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:
февраля 6, 2010 at 10:07
Привет.
1. ТР получаем из таблицы DEPO_LIMITS из поля текущий баланс. Описание всех таблиц есть в руководстве по языку.
2. ORDERCOUNT вам нужен в общем виде, без деления на активные покупку и продажу. Есго можно получить из таблицы заявок, прогоняя по ней цикл и подсчитывая активные заявки.
Сон Reply:
февраля 7, 2010 at 14:06
Привет.
спасибо, разобрался.
по логике все должно работать, но судя по графикам бумаг, будет много неправильных сделок с одной линией, пока прекращаю с moving'ами, надо ТА почитать сперва...и делать с более сложными сигналами.
p.s
перешел на defender'a.