FAQ

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

  1. Saboteur
    7 Апрель 2010 в 17:20 | #1

    В статье про тестирование робота на исторических данных Вы писали:

    Итак, мы получили нужные нам данные, теперь приступим к модификации робота, например нашего «Торговый робот пробойный». Во первых нам нужно в самом начале, в первой части переменной PRICE присвоить значение из полученного нами файла с данными. Это делается с помощью функции READ_LINE:

    Если НЕЛЬЗЯ ;) подскажите как? Если все таки можно где про это почитать? Огромное Спасибо за то что тратите время на нас!

    Евгений Reply:

    Привет.

    В смысле «нельзя»?

    Например, у нас есть файл с историческими данными такого формата:

    time;last

    ...

    time;last

    Т.е. время и цена на момент времени, т.е. «тики». с помощью определенной функции узнаем количество строк в этом файле, делаем цикл от 1 до полученного числа. С помощью функции READ_LINE читаем в цикле каждую строку, и опять с помощью цикла разбираем полученную строку на символы. Делаем проверку если символ<>«;»то этот символ соединяем с предыдущим — это у нас будет «время». Как только встречается символ «;» то каждый последующий соединяем в отдельную переменную — это будет цена, до тех поб пока не получаем «пробел» вместо символа — это конец строки из файла. Приводим последнюю в цифровой вид (+0) и в итоге у нас две переменные: время и цена. Для «ПРобойного» этого конечно маловато, т.к. из этих цен нужно формировать бары. но ведь с того же финама можно скачать конкретный таймфрейм с полным OHLC и делать уже не две а пять переменных: время и OHLC.

    Итак, получили в цикле эти переменные, а дальше, внутри того же цикла у нас торговый алгоритм, которому мы подсовываем данные цены, как будто мы получили их в реалтайме из графика. Но в самих торговых блоках, мы не отправляем транзакцию, а также пишем в файл (другой) строку например: 123433;покупка по;154345, где первое — то самое полученное время, второе операция, третье цена. Ну лоты можно также записать. В самом начале робота заводим глобальную переменную ТР, которой в блоках торговой логики будет присваиваться значение текущей позиции.

    Вот как то так.

  2. alex_davyd
    7 Апрель 2010 в 20:15 | #2

    Привет,Евгений а по ТР можно по подробне,завели глобальную переменную ТР=0,обнуляем IF TP=0 AND STOPORDERCOUNT=0 ,а вот как присваивать значение текущей позиции не понятно.

    Евгений Reply:

    присваивать:

    ТР=1

    Все, присвоили значение равное единице. И если эта переменная определена как глобальная — значит с каждой итерацией она сохраняет последнее значение.

    IF TP=0 AND STOPORDERCOUNT=0 — это не обнуление!! Это условие.

    ТР=0 — вот обнуление.

    Если далее развивать тему вышеописанного алгоритма по тесту на исторических данных — то если по условиям логики у нас должен быть лонг, мы ТР присваиваем единицу и сразу пишем в файл запись о покупке. если шорт то ТР=-1 и также запись. Потом в экселе. например, загружаем полученный файл и считаем результат. Или де сразу в роботе считаем результат и выводим его в таблицу.

  3. alex_davyd
    7 Апрель 2010 в 20:32 | #3

    теперь понятно, при реал тесте анологично

  4. alegnom
    12 Апрель 2010 в 18:51 | #4

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

    Столкнулся с такой проблемой. При получении цены последней сделки:

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

    Программа всегда выдаёт 0. Хотя буквально неделю назад точно эта же программа выдавала правильное значение цены. Значения скользящих средних, фракталов и т.д. всё выдаёт правильно, а цену не могу получить. С чем это может быть связана? Всё уже вроде посмотрел((

    Спасибо.

    Евгений Reply:

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

  5. Rem
    16 Апрель 2010 в 17:08 | #5

    Привет, Евгений!

    Не пойму, что могло случиться: функция READ_LINE не работает. Робот пишет unexpected ошибку.

    Загрузил из справки QUIK пример:

    WRITELN («new.log»,"Hello, world")

    msg=READ_LINE («new.log», GET_FILE_LEN («new.log»), 0))

    MESSAGE (msg,1)

    — та же история.

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

    Rem Reply:

    Связался с техподдержками своего брокера, компании QUIK. В ответ на этот вопрос — тишина.

    Методом тыка все-таки сумел найти какое изменение разработчики внесли в эту функцию, но не внесли его в справку QUIK:

    Вот код из справки QUIK:

    WRITELN («new.log»,"Hello, world")

    msg = READ_LINE («new.log», GET_FILE_LEN («new.log»), error))

    MESSAGE (msg,1)

    Понятно, что вместо error записываем 0.

    Теперь рабочий код, что называется, почувствуйте разницу:

    WRITELN («new.log»,"Hello, world")

    msg= READ_LINE («new.log», GET_FILE_LEN («new.log»), 0)

    MESSAGE (msg,1)

    Вот из-за этой закрывающей скобки — этого своего тихого «усовершенствования» в недавнем обновлении версии QUIK робот не работал несколько дней.

    Евгений Reply:

    Думаю что вместо нуля, надо в функцию прописать заранее объявленную переменную:

    ERROR=0

    WRITELN ("new.log","Hello, world")

    msg=READ_LINE ("new.log", GET_FILE_LEN ("new.log"), ERROR))

    MESSAGE (msg,1)

    MESSAGE (ERROR,1) ' РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ ФУНКЦИИ, ЕСЛИ НОЛЬ - УСПЕШНО.

  6. Rem
    21 Апрель 2010 в 08:00 | #6

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

    Необходимо в нужные моменты выключать робот. Сделать это можно убрав галочку из -> доступные портфели. Если нужно отключить не весь робот, а например, только функцию выставления заявки, то можно в коде задать соответствующее условие, параметры которого будут изменяться в текстовом файле (в текстовый файл вручную записываешь ВЫКЛ. и читаешь это с помощью READ_LINE).

    Но это неудобно, неоперативно, некрасиво и неэлегантно ))

    Вопрос следующий: можно ли в выпадающий список моей таблицы добавить какую-либо активную строчку (ведь во встроенных таблицах QUIK наименование таких строчек вариьируется). Если нет, то может, здесь нужен какой-то привод?

    Евгений Reply:

    ЭЭЭээээ... А правой кнопкой по таблице робота и «Приостановить работу» не устраивает?

    Rem Reply:

    Это крайний вариант, когда пожар бушует...

    Но элегантным было бы отключить только одну из частей робота... :)

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

    Если чего посоветуете, думаю всем будет полезно.

    Евгений Reply:

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

  7. alex_davyd
    22 Май 2010 в 14:38 | #7

    Здравствуйте, Евгений! помогите разобратся написл робота: вход по пробитию экстримума, выход по тэйкпрофиту,ограничения убытка по стопу,

    не могу добится чтобы робот не отпровлял заявки на вход пока не исполнется тэйк или стоп,надо как в Black Hole пока неисполнется тэйк или стоп бот не производит расчет

    Евгений Reply:

    Отправляйте заявки только тогда, когда нет активных заявок и/или стопов, в зависимости от стратегии! Посмотрите, в БХ именно так и сделано.

  8. alex_davyd
    24 Май 2010 в 02:11 | #8

    Срасибо за помощь,я правильно понял:

    IF TP=0 AND ORDERCOUNT=0 AND STOPORDERCOUNT=0

    Евгений Reply:

    Да.

  9. alex_davyd
    24 Май 2010 в 19:26 | #9

    Здравствуйте, Евгений!помогите с решением, при определения уровня пробоя я приравневаю уровень к CURRENT,пример по хаю

    IF CURRENTHIGH>HIGH

    HIGH=CURRENTHIGH

    но придостижении тейка,если цена продолжает движение вверх,выстовляется новая заявка на покупку,если приронять так CURRENTHIGH=HIGH,то при откате назад новая заявка на покупку,а надо чтобы привыполнении тэйка или стопа уровень пробития определялся уже на следущем баре

  10. Евгений
    24 Май 2010 в 19:30 | #10

    Одно от другого не зависит. Этим условием вы получаете значение верхнего экстремума, от которого отталкивается вся программа. Если после достижения тейкпрофита вам не нужно входить в рынок в эту же сторону — сделайте условие что вход только при рождении новой свечи. это будет правильней.

  11. alex_davyd
    24 Май 2010 в 20:42 | #11

    вот здесь мой мозг и закипел,

    IF TP=0 AND ORDERCOUNT=0 AND STOPORDERCOUNT=0 AND NUMBER=2

    Евгений Reply:

    А причем тут номер бара? Вы же его задаете в начале программы, в переменных.

  12. alex_davyd
    24 Май 2010 в 21:09 | #12

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

    Евгений Reply:

    Заведите две переменные под OHLC:

    HIGH

    HIGH_PREV

    т.е. текущий хая и предыдущий. Если вновь получаемый хай не равен предыдущему и одновременно не равен нулю — то факт рождения новой свечи. Теже операции нужно провести и с остальными составляющими OHLC для гарантии. ну и соответственно каждую итерацию программы приравнивать:

    HIGH_PREV=HIGH

    после вышеописанного анализа.

  13. alex_davyd
    24 Май 2010 в 21:22 | #13

    Спасибо, сам не сделал бы очень долго.

    alex_davyd Reply:

    сделал вот так:

    '========= ПОЛУЧАЕМ ДАННЫЕ СВЕЧЕЙ

    OHLC (1)

    HIGH_PREV=HIGH

    LOW_PREV=LOW

    OHLC (NUMBER)

    IF HIGH_PREVHIGH AND HIGH_PREVHIGH0

    HIGH_PREV=HIGH

    END IF

    IF LOW_PREVLOW AND LOW_PREV0

    LOW_PREV=LOW

    END IF

    не работает,CURRENT удалил

    alex_davyd Reply:

    знак неравенство не отобразился

    Евгений Reply:

    Я же написал как сделать! Не выдумывайте.

    alex_davyd Reply:

    Евгений,я не выдумываю ,я просто не могу понять как это правильно описать, вот и сделал как CURREN в пробойном,вы профи в купале и написали как для уже продвинутого а я самоучка изучаю язык на ваших примерах и комментариях,и использую ваши готовые блоки,

    завел переменные, обнулил,прировнял ,вот так я понял:

    HIGH=0

    HIGH_PREV=0

    OHLC (NUMBER)

    HIGH_PREV=HIGH

    Евгений Reply:

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

    HIGH=0

    NEW_GLOBAL («HIGH_PREV»,0)

    OHLC (NUMBER)

    IF HIGH<>HIGH_PREV AND HIGH_PREV<>0

    ' НОВАЯ СВЕЧА

    END IF

    HIGH_PREV=HIGH

  14. Rem
    30 Июнь 2010 в 11:36 | #14

    Привет, Евгений!

    Что лучше: передвигать заявку, опасаясь превышения лимита по количеству заявок за сессию или продать (купить) по рынку в тот момент, когда bid (offer) достигает заданного уровня?

    Евгений Reply:

    Привет!

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

    Но я сам, в своих роботах как правило отслеживаю бид/оффер, чтоб маркетом открыть\закрыть позицию. Минус — если этот момент попадет на сильное движение — будет проскальзывание.

    Если вы планируете использовать арбитражную стратегию, то там, конечно, надо использовать лимиты на одном инструменте пары. Как вариант рассмотрите вариант увеличения периода расчета портфеля, например при 1 итерации в 10 сек кол-ва бесплатных заявок может хватить на 5-6 часов торгов.

    Rem Reply:

    Спасибо за ответ.

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

    Насчет арбитражных стратегий не понял: какая разница, если спрэд считать не по ценам закрытия, а также по бидам и офферам.

    Евгений Reply:

    В арбитраже по первой бумаге в паре лучше входить лимитом. Это так. к слову :)

  15. snowkam
    6 Июль 2010 в 09:10 | #15

    Добрый день!

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

    Например есть крафик ГАЗПРОМА и чтобы по нему выводить таблицу в виде

    data time open close high low volume

    Или я ошибаюсь может в Квике есть такая возможность?

    Смысл такой хотелось бы эту табличку выводить по DDE в Эксель.

    Евгений Reply:

    Привет.

    Посмотрите тему — www.hirobot.ru/2010/04/ka...grafika-2-chast/

  16. snowkam
    7 Июль 2010 в 09:21 | #16

    Спасибо за предыдущий ответ почти то что нужно!

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

    Ну например есть скрипт№1 в нем установлено RETURN= false

    и имеется текстовый файл где находится значение переменной false или true.

    Если в текстовеке false скрипт нечего не делает если true значит скрипт отработался.

    Евгений Reply:

    Конечно можно! У QPILE есть функции записи и чтения из файла, а также обработки этих данных. Почитайте сайт, есть такая публикация www.hirobot.ru/2009/05/kak-sozdavat-log/ и www.hirobot.ru/2009/05/ka...x-dannyx-v-quik/ в них описано как пользоваться этими функциями.

  17. alex_davyd
    20 Июль 2010 в 14:31 | #17

    Здравствуйте, Евгений я в своем роботе использую два вида стоп заявак одну стоп лимит,другую тейкпрофит с отступом и защитным спредом,немогу понять как сделать чтобы при активации тейкпрофита стоплимтная снималась,в принцепе условие не обязательное,у меня стопы удаляются при смене напровления и закрытие позиции,но для элегантности да и деньги чтоб не блокировались под лишнии стопы

    Евгений Reply:

    Привет.

    Как я понял у вас при открытой позиции две активных стопзаявки, одна «стоплосс» вторая «тейкпрофит». И при исполнении одной из них надо чтоб вторая снималась. Решение: при отсутствии открытых позиций и кол-ве активных стопов>0 — удаляйте все стопы.

  18. alex_davyd
    20 Июль 2010 в 19:00 | #18

    Привет уменя сечас реалезованно имено это решение , я использываю именно квиковский текпрофит,TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «STOP_ORDER_KIND», «TAKE_PROFIT_STOP_ORDER»),хотелось чтоб после активации цены тейка , стоп лимит снимался,и остовался один тейк

    Евгений Reply:

    Отслеживайте в таблице «стопзаявки» свойства этого «тейкпрофита» и при соответствующем изменении снимайте второй стоплимит.

  19. Rem
    2 Август 2010 в 14:18 | #19

    Добрый день, Евгений!

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

    Можно ли сделать так, чтобы глобальная переменная хранилась без изменений несколько дней (при этом ПК на ночь выключается) и при запуске портфеля не изменялась?

    Евгений Reply:

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

    Rem Reply:

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

    Евгений, а где вообще хранятся значения глобальных переменных: на моей машине или где-то на сервере?

    Евгений Reply:

    Привет.

    Значения глобальных переменных хранятся локально. Если вас не устраивает вариант с файлом (хотя на мой взгляд капля в море), не выключайте компьютер и не закрывайте QUIK, в таком случае глобальная переменная сохранит свое значение.

    4 тысячи строк — это много...

  20. Сергей
    1 Сентябрь 2010 в 12:02 | #20

    День добрый!

    Убился, не могу выцепить цену последней сделки по определенному инструменту. Логика такая:

    N=GET_NUMBER_OF («TRADES»)

    IF N>0

    FOR I FROM 0 TO N

    IF (GET_VALUE (GET_ITEM («TRADES», C), «SECCODE»)=INSTRUMENT) AND (GET_VALUE (GET_ITEM («TRADES», C), «TRDACCID»)=ACCOUNT)

    PRICEEND=GET_VALUE (GET_ITEM («TRADES», C),"PRICE")+0 ' ПОЛУЧАЕМ ЦЕНУ КРАЙНЕЙ СДЕЛКИ

    END IF

    END FOR

    END IF

    Чую, где-то не прав и ничего тут нет сложного, но заклинило.

    Помогите, плиз.

    Сергей Reply:

    Прошу прощения, вот так, конечно.

    Но сути это не меняет

    N=GET_NUMBER_OF («TRADES»)

    IF N>0

    FOR I FROM 0 TO N

    IF (GET_VALUE (GET_ITEM («TRADES», I), «SECCODE»)=INSTRUMENT) AND (GET_VALUE (GET_ITEM («TRADES», I), «TRDACCID»)=ACCOUNT)

    PRICEEND=GET_VALUE (GET_ITEM («TRADES», I),"PRICE")+0 ' ПОЛУЧАЕМ ЦЕНУ КРАЙНЕЙ СДЕЛКИ

    END IF

    END FOR

    END IF

    Сергей Reply:

    Нашел проблему.

    Называется для бестолковых — если что-то не работает, читай первоисточник, т.е. справку по алгоритмическому языку.

    Короче — номер торгового счета в таблице сделок функция GET_ITEM возвращает параметром ACCOUNT.

    Может пригодится кому.

  21. alex_davyd
    5 Октябрь 2010 в 13:59 | #21

    Добрый день, Евгений!а как обмануть квик чтобы выстовлять одновременно две стопзаявки типа тек-профита с разными ценами активации, отступами и спредами,пока приходится использовать два портфеля один основной где производятся все расчеты,другой вспомогательный на выстовление тейка

    Евгений Reply:

    Привет.

    Вы имеете в виду блокировку средств при постановке стопзаявки?

  22. alex_davyd
    5 Октябрь 2010 в 17:17 | #22

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

    первая заявка

    STOPLOSS=5'РАЗМЕР ТЕКПРОФИТА в ПУНКТАХ ФОРТС

    OFFSET=21'РАЗМЕР ОТСТУПА ТЕКПРОФИТА в ПУНКТАХ ФОРТС

    SPREAD=5 ' РАЗМЕР ЗАЩИТНОГО СПРЕДА ТЕКПРОФИТА в ПУНКТАХ ФОРТС

    вторая заявка

    TPROFIT=19' РАЗМЕР ТЭЙКПРОФИТА В РУБЛЯХ, ЕСЛИ ДРОБНОЕ ТО ЧЕРЕЗ ТОЧКУ

    OFFSET=5 'РАЗМЕР ОТСТУПА ТЕКПРОФИТА в ПУНКТАХ ФОРТС

    SPREAD=3 'РАЗМЕР ЗАЩИТНОГО СПРЕДА ТЕКПРОФИТА в ПУНКТАХ ФОРТС

    Евгений Reply:

    На пальцах: допустим у нас есть лонг открытый по цене 100 руб. вы хотите поставить стопзаявку (пока не важно какого типа) «на продажу» по цене 100-5=95 руб, и хотите поставить стопзаявку также «на продажу» по цене 100+19=119 руб. Но вторая стопзаявка сразу исполняется, т.к. текущая цена ниже ее цены активации. Это если я правильно понял алгоритм.

  23. alex_davyd
    5 Октябрь 2010 в 18:42 | #23

    чуть не так,нас есть лонг открытый по цене 100 руб,я выстовляю стоп заявку тип важен,тек-профит чтобы учитывать мин,максим, получается скользящии стоп.первая заявка активируется сразу 100-5=95, наприме рцена дошла до 105 и развернулась отсуп от мах 21 пункт,лонг закроется с убытком,вторая заявка тек-профит при достижении 119пунктов 100+19=119 она актевируется и закроет позиции отсуп от мах на 5 пунктов, а вот как заставить квик расчитывать их в одном портфеле и выстовлять сразу две стоп заявки одного типа сразными параметрами не получается

    Евгений Reply:

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

    2. Не проще в качестве второго тейкпрофита выставлять обычную заявку в стакан? Цена до нее дошла и заявка исполнилась. Просто и надежно.

  24. alex_davyd
    5 Октябрь 2010 в 18:55 | #24

    1.да выстовляется , и автоматически выстовляются только пришлось написать второй скрипт спецально для тейка.

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

    Евгений Reply:

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

    2. А зачем сразу открываться опять? Обычная заявка в стакане с тем же колвом лотов что и текущая позиция просто ее закроет. Допустим тот же лонг открытый по 100руб. Выставляем стоп-тейкпрофит «на продажу» по цене 95 руб, и выставляем обычную заявку «не продажу» в стакан по цене 119 руб. Если цена добралась до 119 руб — у вас обычная заявка закрывает позицию с с профитом. если цена поднялась до 118 и развернулась у вас позиция закрывается по 118-21=97

  25. Rem
    11 Октябрь 2010 в 09:04 | #25

    Добрый день, Евгений!

    Допустим у меня 5 роботов, работающие по разным стратегиям одновременно. Каждый из них отдельно обрабатывается квиком в районе 1 сек. Т.к. квик ставит роботов в очередь, в итоге имеем скорость обработки — около 5 сек. на каждого робота.

    Как можно уйти от последовательной схемы работы и иметь 5 роботов, параллельно работащие со скоростью 1 сек?

    Возможно ли такое и как на одном компе?

    Евгений Reply:

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

    Rem Reply:

    Олег Хуснутдинов, ARQA Technologies:

    «Механизм расчета портфелей в Quik не позволяет параллельного расчета.

    Алгоритм следующий:

    — Запускается первый портфель, заканчивает расчет, запускается таймер, отсчитывающий время „Период расчета“ из настроек портфеля.

    — Тут же запускается следующий портфель аналогичным образом.

    — Третий и т.д.»

    Евгений, портфели большие и они реально тормозят друг друга... К 1 сек. итерации прибавляется еще расчет портфеля (около 0,3 сек.) плюс все портфели считаются поочередно...

    Евгений Reply:

    Ну если разработчики так сказали — то мне добавить нечего. Кроме того что нужно пробовать оптимизировать код портфелей.

    Евгений Reply:

    Сейчас у меня два робота одновременно трудятся, по сложности я б оценил их как средние, расчет одного занимает примерно 1 сек. Исполняются поочередно.

    Самый сложный мой робот-арбитражер исполнялся в среднем примерно 1,5 сек, по объемы это было почти 1000 строк кода, много вложенных циклов, перебор графика, нескольких стаканов, но тем не менее считаю 1,5 сек это нормально. Если робот исполняется больше чем за 2-3 секунды — думаю обязательно надо оптимизировать процессы.

    Rem Reply:

    1,5 сек.? Считаю это тоже много, т.к. неминуемы проскальзывания в стакане... Для оптимизации, вероятно, нужно стремиться к уменьшению количества циклов, тем более вложенных, и кол-ва обращения к графикам... Чем проще портфель в Quik, пусть и с бОльшим числом строк, тем быстрее он работает. Возможно, имеет смысл разбить робот на два, где во втором будет исполняться вся рутинная работа с периодом итерации более минуты, получаса, часа (например, некоторые циклы, расчеты оригинальных индикаторов и т.п.). Некоторые индикаторы удобнее вообще не расчитывать (не заполнять ими время расчета), а в txt вводить раз в день готовые значения из графических пакетов.

    Rem Reply:

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

    Задам дилетантский вопрос: могут ли на одном компе мирно существовать два Квика?

    а) сюда же совсем глупый вопрос: два Квика от одного брокера (один счет обрабатывается на одном Квике, другой счет или субсчет — на втором)? Как обмануть машину, сервер, чтобы один и тот же клиент работал сразу с двумя Квиками (две операционные системы?)???

    б) если есть счета у двух брокеров — соответственно два разных квика на одном компе?

    Евгений Reply:

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

    Евгений Reply:

    Ну тоже интересный подход.

  26. ded_i_sobaka
    7 Ноябрь 2010 в 19:14 | #26

    HELP!!!

    у меня тут совсем бред какой-то, но может кто-нибудь сталкивался...

    при попытке загрузить программу в QUIK выдает ошибку в строке №1.

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

    1-я строка это:

    PORTFOLIO_EX SBERTORG;

    Программу пишу в notepad++.

    помогите плз!!! почему так?

    Евгений Reply:

    Привет.

    Скорее всего у вас старый QUIK, ругается на _EX, в старой версии не было такой инструкции.

  27. ded_i_sobaka
    8 Ноябрь 2010 в 18:02 | #27

    Справился с ошибкой путем поблочного копирования всей программы в новый файл с загрузкой в QUIK после каждого копирования. Проблема оказалась в описаниях табличных переменных, которые идут после END_PROGRAM (когда вставлял их-QUIK начинал выдавать ту же ошибку в строке №1). Хотя что именно было не так все равно непонятно... Визуально все тоже самое получилось, просто скопировал их из рабочего файла. Надеюсь кому-нибудь пригодится... Я себе всю голову сломал пока искал ошибку в двух словах первой строки!

  28. Kobalt
    8 Ноябрь 2010 в 19:56 | #28

    Вечер добрый! Евгений подскажите, что можно почитать на вашем сайте и что могло бы помочь мне в разработке портфеля который:

    Выбирал бы инструмент с наиболее активной жизненной позицией на данный момент;

    Инструмент который активно растет в цене и по которому лучше всего торговать на данный момент;

    Евгений Reply:

    Привет.

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

    Kobalt Reply:

    вы про общую тенденцию роста-падения в течении дня или про разность цен между сессиями?

    Евгений Reply:

    Про все: в таблице текущих параметров есть все данные, по которым можно ранжировать инструменты. На мой взгляд надо добавить в эту таблицу все потенциальные инструменты, и несколько вечеров подряд сохранять таблицу в Эксель и там сортировать, чтобы определиться с алгоритмом анализа. И как только он будет готов — переносить в код QPILE.

  29. alex_davyd
    26 Ноябрь 2010 в 13:55 | #29

    Добрый день, Евгений! обновил вчера квик, до версии 5.18 и сразу возникла проблема с выстовлением заявок,квик пишет (неправильно указан индификатор транзакции"12310220101126"). на сайте квика описания данной проблемы не нашел,

    Евгений Reply:

    Вместо TRID=TIME&DATE укажите TRID=TIME, в 5.18 изменена разрядность ID транзакции.

  30. alex_davyd
    26 Ноябрь 2010 в 14:15 | #30

    Евгений спасибо ,не дадите ссылку где можно посмотреть изменения в версии5.18, я кроме раздела на сайте квика «В версии 5.18 изменен механизм получения информации в QPILE» нечего ненашел.Из этих комментариев я понял что теперь слепки с таблиц не делаются ,а данные берутся на прямую из открытых таблиц

    Евгений Reply:

    www.quik.ru

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

  31. alex_davyd
    26 Ноябрь 2010 в 15:12 | #31

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

  32. Volder
    30 Ноябрь 2010 в 00:23 | #32

    Подскажите, созданный портфель (таблица) не хранит данные после закрытия/открытия квика? По-крайней мере у меня так на предварительных тестах системы. Я считал, что если не использовать DELETE_ALL_ITEMS (), то таблица будет накапливать данные за предыдущие дни.

    Евгений Reply:

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

    Volder Reply:

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

    Евгений Reply:

    Ничего страшного, наоборот считаю внешний файл наиболее надежным способом выхода из такой ситуации. Главная задача при программировании роботов — предусмотреть 100% вариантов развития событий, вплоть до саботажа пользователя:)

  33. Kobalt
    14 Декабрь 2010 в 11:32 | #33

    Что может служить сигналом окончания формирования бара? На демо счету бар точно еще не сформирован в 00 с.

    Евгений Reply:

    У меня и на реальном счеты бар появляется нв 2-3 секунде. Отследить окончание нового бара сложно. проще отследить рождение нового по времени бара. Я для этого использую функцию OHLC, она есть на сайте.

  34. alex_davyd
    15 Декабрь 2010 в 14:42 | #34

    Евгений добрый день,а стакой проблемой вы несталкивались,примерно с 17.30

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

    Евгений Reply:

    Это повод для направления претензии брокеру. Если ответ неадекватный — меняйте брокера. Хотя проблемы у всех бывают.

  35. alex_davyd
    24 Декабрь 2010 в 00:26 | #35

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

    '=========КОНТРОЛЬ КОЛИЧЕСТВА И КАЧЕСТВА ЗАЯВОК

    IF TP>0 AND ORDERCOUNT<ASK

    KILLALLORDERS (3)

    LOTS=ABS (TP)

    SELL (5)

    PAUSE (5)

    END IF

    '========= ФУНКЦИИ

    ' SELL

    FUNC SELL (KEYS)

    PRICE=ASK-STEP*1

    ORDER (PRICE,LOTS,"S")

    END FUNC

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

    Евгений Reply:

    ORDERCOUNT

  36. alex_davyd
    16 Январь 2011 в 22:12 | #36

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

    Евгений Reply:

    Я планировал опубликовать создание ATR индикатора в ближайшее время. Но там ничего сложного нет: каждый индикатор рассчитывается по математическим формулам на основе данных из графика цены и/или объема. Рассчитываем и выводим его значения в таблицу. Если надо его визуализировать — поищите публикацию о построении уровней поддержки/сопротивления, там показано как «рисовать» графики.

  37. Sergey K
    17 Февраль 2011 в 22:43 | #37

    Евгений, добрый вечер!

    В ваших разработках, на сайте, есть код функции OHLS, который получает значения определенной свечи, но минимальный интервал полученых данных 1мин. А есть ли возможность получать данные HIGH, LOW на меньшем интервале, например 30сек?

    Евгений Reply:

    Привет.

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

    Sergey K Reply:

    Евгений, спасибо за ответ!

    Из графика нельзя, на ваш взгляд как лучше и проще получить такие данные, из таблицы всех сделок циклом или?

    Евгений Reply:

    Да, из таблицы всех сделок. Фильтровать по времени и определять OHLC этих 30 сек. Посмотрите торговый робот «Индикатор», там реализована подобная схема.

    Евгений Reply:

    Да, и получив данные их можно записывать в таблицу, либо в файл. Который потом, например, поднимать системой теханализа в реальном времени.

    Sergey K Reply:

    Евгений, добрый день!

    Подскажите где здесь ошибка? не хочет расчитывать, портфель просто висит и ошибок не выдает...

    '========= ТАБЛИЦА ВСЕХ СДЕЛОК

    MIRRORSTRCOUNT=GET_NUMBER_OF («ALL_TRADES»)*-1 ' МЕТОД ОБРАТНОГО ПРОСМОТРА

    FOR I FROM MIRRORSTRCOUNT TO 0

    MAX=0

    I2=I*-1 ' ВОЗВРАЩАЕМ ПОЛОЖИТЕЛЬНЫЙ ЗНАК ИНДЕКСУ СТРОКИ

    TIMETRADE=GET_VALUE (GET_ITEM («ALL_TRADES», I2), «TIME»)+0 ' ФИЛЬТР ПО ВРЕМЕНИ

    IF TIMETRADE>=TIMEFORTABLE AND TIMETRADE<TIME AND GET_VALUE (GET_ITEM ("ALL_TRADES", I2), "CLASSCODE")="SPBFUT"

    NEXT=GET_VALUE (GET_ITEM ("ALL_TRADES", I2), "PRICE")+0

    IF MAX+0<NEXT+0

    MAX=NEXT

    END IF

    END IF

    IF TIMETRADE<TIMEFORTABLE

    I=0 ' ВЫХОДИМ ИЗ ЦИКЛА

    END IF

    END FOR

    Евгений Reply:

    1. Таблица всех сделок открыта?

    2. При запуске этот код просматривает ее с самого начала, это занимает время.

    Евгений Reply:

    TIMEFORTABLE формируется?

    Что выводится в таблицу?

    Внедряйте MESSAGE («ПРОВЕРКА»,1) в разные места в коде и ишите где ошибка. Этот блок вроде правильный.

    Sergey K Reply:

    Спасибо, буду проверять.

    Sergey K Reply:

    Нашел ошибку, ошибка была в выводе значения в таблицу. Теперь данные выводит, но выводит отстающие на интервал (30 сек) значения OHLS, а не экстремумы за последние 30 сек. Где проблемс, пока не пойму.

    Евгений Reply:

    Обнуление MAX происходит внутри цикла — вынесите это наверх. Иначе у вас каждую итерацию экстремум обнуляется.

  38. Sergey K
    18 Февраль 2011 в 18:27 | #38

    Таблица открыта, полностью загружена. Времени проходит предостаточно, всеравно данные не выводит.

  39. strelec
    19 Февраль 2011 в 08:08 | #39

    Сколько роботов (разных) может быть одновременно загружено в КВИК?

    Евгений Reply:

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

  40. alex_davyd
    6 Март 2011 в 15:58 | #40

    Евгений, добрый день! технические сбои случаются постоянно то свет отключат то интернет,стоп завка типа ТЕЙКПРОФИТА+СТОПЛОСС дает весомый плюс что при активации одной вторая снимается автоматический удобно когда ты не можеш находится всю ссесию за компом.Посмотрите пожалуста код где то ошибка квик не может определить направление сделки оператор

    FDIRECTION

    '========= ПОСТАНОВКА СТОП-ЗАЯВОК

    IF TP<0 AND FLAG=0 AND ORDERCOUNT=0

    MESSAGE ("ВЫСТАВЛЯЮ СТОП И ТЭЙКПРОФИТ ДЛЯ ЗАЩИТЫ КОРОТКОЙ ПОЗЫ",1)

    LOTS=ABS (TP)

    STOPPRICE=PRICE-TPROFIT

    STOPPRICE2=PRICE+STOPLOSS

    STOPORDER (STOPPRICE,OFFSET,SPREAD,STOPPRICE2,LOTS,"B",TRID)

    FLAG=1

    END IF

    '========= ФУНКЦИЯ ПОСТАНОВКИ ТЕЙКПРОФИТА+СТОПЛОСС

    FUNC STOPORDER (FSTOPPRICE,FOFFSET,FSPREAD,FLOTS,FSTOPPRICE2,FPRICE,FDIRECTION,FTRID)

    NEW_GLOBAL ("TRANS_PARAMS", "")

    NEW_GLOBAL ("TRANS_RESULT", "")

    TRANS_PARAMS = ""

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "TRANS_ID", TRID&"")

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACTION", "NEW_STOP_ORDER")

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "STOP_ORDER_KIND","TAKE_PROFIT_AND_STOP_LIMIT_ORDER")

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "CLASSCODE", "SPBFUT")

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SECCODE", INSTRUMENT)

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "ACCOUNT", ACCOUNT)

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "OPERATION", FDIRECTION&"")

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "STOPPRICE", FSTOPPRICE&"")'ЦЕНА ВКЛЮЧЕНИЯ ТЕЙКПРОФИТА

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "OFFSET", FOFFSET&"")

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "OFFSET_UNITS", "PRICE_UNITS") 'в пунктах

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SPREAD", FSPREAD&"")

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "SPREAD_UNITS", "PRICE_UNITS")'в пунктах

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "STOPPRICE2",FSTOPPRICE2&"") 'ЦЕНА ВКЛЮЧЕНИЯ СТОП-ЛОСС

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "PRICE",FPRICE&"") 'ЦЕНА ЛИМИТИРОВАННОЙ СТОП-ЗАЯВКИ

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "QUANTITY", FLOTS&"")

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, "EXPIRY_DATE","GTC")

    TRANS_RESULT = SEND_TRANSACTION (300, TRANS_PARAMS)

    RESULT=GET_VALUE (TRANS_RESULT, "DESCRIPTION")

    MESSAGE (RESULT,1)

    END FUNC

    Евгений Reply:

    На взгляд все правильно, вот строка отвечающая за напрвление сделки:

    TRANS_PARAMS = SET_VALUE (TRANS_PARAMS, «OPERATION», FDIRECTION&""), значение переменной FDIRECTION у вас равно «B», т.е. обе заявки будут на покупку (для защиты шорта). Вышлите мне в почту скриншот сообщения квика. об этой ошибке.

  41. ssshu
    26 Март 2011 в 22:57 | #41

    Добрый день Евгений! Подстраиваю Ваши алгоритмы для торговли на украинской бирже, вроде получается, в принципе все идентично с Фортс, просто заменяю SPBFUT на FUTUX (идентификатор УБ), а также единственный пока фьючерс на индекс УБ, но задача в том, что кратность цены лота на фьючерс УБ равна 0,05.Подскажите пожалуйста, каким параметром можно установить кратность цены в алгоритме, т.к. при выставлении заявок роботом временами появляется сообщение квика об ошибке связанной с кратностью. Зараннее Спасибо.

    Евгений Reply:

    Привет.

    Вот функция получения минимального щага цены:

    STEP=GET_VALUE (GET_PARAM_EX (CLASSCODE,INSTRUMENT,"SEC_PRICE_STEP"),"PARAM_VALUE")+0

    Для вашего фьючерса STEP=0.05 будет. При постановке заявок используйте «количество минимальных шагов» и умножайте на STEP. В вашем случае 20 минимальных шагов будет = единице.

    ssshu Reply:

    Спасибо за оперативность. Я так понял вместо 0, нужно поставить 0,05,а функции стоп-лосса и тейкпрофита также будут отслеживаться этой функцией?

    ssshu Reply:

    Извините за назойливость и позднее время, но чтото я не могу понять где эту функцию вставить алгоритм? Спасибо.

    Евгений Reply:

    Посмотрите код в публикации «Арбитражер» www.hirobot.ru/2011/03/to...bot-arbitrazher/, там есть и STEP и как его применять. Сделайте поиск по тейксту программы и все увидите.

  42. ssshu
    27 Март 2011 в 11:14 | #42

    Доброе утро, Евгений! Так мне в функции вместо 0 поставить 0,05?

    Евгений Reply:

    Нет, вы не поняли. Эта функция выдаст вам 0.05 сама, точнее определит по коду класса и коду бумаги минимальный шаг цены.

  43. ssshu
    4 Апрель 2011 в 15:31 | #43

    Добрый день Евгений! Подскажите пожалуйста имеется ли возможность в Ваших роботах установить функцию по отправке смс-оповещений о дествиях программ. Спасибо.

    Евгений Reply:

    Привет.

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

  44. Анастасия
    24 Май 2011 в 11:00 | #44

    Евгений, добрый день! Пара вопросов. Есть стратегия для входа, выход по трейлинг стопу. Как лучше организовать архитектуру: вход в одном роботе, общий универсальный трейлинг в другом, или все реализовать в одной прогамме.

    Евгений Reply:

    Привет.

    Я сторонник делать все в одном роботе. Но в принципе можно и в разных делать: один действует только когда текущая позиция=0, второй когда есть открытая позиция.

  45. G_P_Evgenich
    30 Сентябрь 2011 в 14:12 | #45

    Еще раз здравствуйте Евгений!С первым вопросом разобрался. Ввел код не от того счета. Но в связи с этим возник еще один вопрос. На КВИКодного брокера загрузил нормально, а на другова жму на кнопку «Загрузить локально» вобще никакой реакции. Вчем можед быть проблема.

    Последний на сегодня. Чтобы робот работал КВИК должен быть постоянно включен?

    Евгений Reply:

    Привет.

    1. В том Квике где не заработал — CTRL-F11, если там этот загруженный робот есть — удалите, и проведите пошагово загрузку заново.

    2. Да, Квик отключен — робот не торгует. Единственное что может работать при отключенном Квике — это активная стоп-заявка.

  46. G_P_Evgenich
    2 Октябрь 2011 в 18:17 | #46

    Добрый день Евгений!С КВИКОМ разобрался, просто этот брокер не подтверждает табличками действия. Робот загружался, но не выскакивала табличка. Но почемуто пропало мое первое обращение к Вам. Там я интересовался, можно ли модорнезировать робота работающего на пробой диапазона, чтобы вход в позицию был по одному количеству баров, а выход по другому есле отключен ТРЕЙЛЕНГ. И втоое есле хочу что бы робот закрывал позицию вечером, а открывал примерно в 10.15 то, будет ли он учитывать вечерние бары в расчет диапазона или будет ждать пока наберется с утра нужное количество баров что бы войти в позицию. И последнее на сегодня есле я еще не надоел. Могут ли несколько разных роботов работать на одном счету? Зарание спасибо Павел.

    Евгений Reply:

    1. Такая модификация возможна, и не сложна. Нужно добавить одну переменную, и для ее значения вызвать функцию OHLC.

    2. Если у вас таймфрейм меньше или равно 10 мин то в 10.15 он возьмет сегодняшние бары.

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

    G_P_Evgenich Reply:

    Здравствуйте Евгений! Я понимаю что для Вас это не сложно. Но я в КПайле пока новичек и пока не понимаю как это сделать. Стратегии я тестирую в ВЭЙС Лабе. Там я разобрался и могу задавать вход и выход и даже разный вход в ШОРТ и ЛОНГ. Еще я там задаю (размер риска от уровня стопа)в проценте от размера депозита. И позиция открывается не на определенное количество лотов, а на сумму расчитаную от уровня стопа и прцент убытка который я допускаю на каждую сделку. Возможно ли здесь применить такойже принцып ограничения ПРИБЫЛИ/УБЫТКА кака я описал? С уважением, Павел.

    Евгений Reply:

    Привет.

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

  47. G_P_Evgenich
    6 Октябрь 2011 в 12:54 | #47

    Здравствуйте Евгений! Перерыл весь сайт, но примера когда робот открывает позицию на пробое определенном кол-ве баров, а закрывает на другом не нашол. Как работает «Модуль на открытие позиции» впринцыпе понятно, но как подключить «Модуль на закрытие позиции» не могу понять. Есле можно подскажите как это зделать или где посмотреть пример. Зарание спасибо Павел.

    Евгений Reply:

    ENTER=1 ' ПРОБОЙ НОМЕРА БАРА НА ВХОД

    EXIT=3 ' ... НА ВЫХОД

    ...

    ...

    OHLC (ENTER)

    HIGH_ENTER=HIGH

    LOW_ENTER=LOW

    OHLC (EXIT)

    HIGH_EXIT=HIGH

    LOW_EXIT=LOW

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

  48. G_P_Evgenich
    7 Октябрь 2011 в 16:21 | #48

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

    Евгений Reply:

    Я вам в почту вчера написал письмо, проверьте.

  49. Дмитрий
    14 Октябрь 2011 в 12:32 | #49

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

    Есть такой вопрос: возможно ли в квике каким то образом «забиндить» или по другому выражаясь привязать «покупку» и «продажу» по конкретному инструменту к горячим клавишам.

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

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

    Евгений Reply:

    Привет.

    Встроенный язык позволяет отслеживать нажатия клавиш.

  50. Rrider
    27 Октябрь 2011 в 16:45 | #50

    Добрый день, Евгений! При запуске Квика робот начинает работать, когда с сервера брокера загрузились еще не все таблицы из которых робот берет данные — в результате робот совершает ошибочные действия. Как разрулить эту ситуацию?

    Евгений Reply:

    Привет.

    Контролировать значение каждой переменной, которой присваивается значение из таблиц, если равна нулю — возврат к началу кода.

    Rrider Reply:

    Спасибо за ответ, но видимо не мой случай. Опишу подробнее:

    В моем случае робот проверяет таблицу Стоп-приказов, если найден активный Стоп-приказ, то он снимается.

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

    Евгений Reply:

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

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