Работа робота на AmiSharp. Вопросы.
1. Робот кинут на график Сбера, сделки же делает на сберовском фьюче. На графике постоянно выводится сообщение о рассогласовании реальной и расчетной позиции. При этом у второго робота, который что видит, то и торгует, все в норме. В чем может быть причина? МОжет ли быть причина в том, что анализирует график одного, а торгует другое?
2. В АмиБрокере на двух инструментах работают два робота. В настройках указано (у обоих) включение квика и автоматическая авторизация (все логины и пароли прописаны). При включении АмиБрокера начинают включаться ДВА квика. Но в итоге один пропадает. Автоматическая авторизация не проходит. Очевидно, что-то тут не так. Если я оставляю в настройках включение квика только у одного, то в итоге на втором не отображаются кнопки управления роботом, пока я в квике не перестартую экспорт таблиц ДДЕ.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Colonel пишет: В ходе эксплуатации робота возник ряд вопросов.
1. Робот кинут на график Сбера, сделки же делает на сберовском фьюче. На графике постоянно выводится сообщение о рассогласовании реальной и расчетной позиции. При этом у второго робота, который что видит, то и торгует, все в норме. В чем может быть причина? МОжет ли быть причина в том, что анализирует график одного, а торгует другое?
Нет, Антон, дело не в том, что Вы анализируете одно, а заявки ставите по другому. Рассогласование позиции говорит о том, что в соответствии с расчетом вашего алгоритма должна быть одна позиция (скажем, Лонг), а реальная позиция по фьючу другая (шорт или без позиции). Такое бывает, если робот был какое-то время выключен и пропустил сделки (он сам решит эту проблему, если его не трогать) или Вы заставляли его открывать или закрывать позиции кнопками робота.
Colonel пишет: 2. В АмиБрокере на двух инструментах работают два робота. В настройках указано (у обоих) включение квика и автоматическая авторизация (все логины и пароли прописаны). При включении АмиБрокера начинают включаться ДВА квика. Но в итоге один пропадает. Автоматическая авторизация не проходит. Очевидно, что-то тут не так. Если я оставляю в настройках включение квика только у одного, то в итоге на втором не отображаются кнопки управления роботом, пока я в квике не перестартую экспорт таблиц ДДЕ.
Антон, запускайте квик из одной копии робота. Это надежнее.
Хотя, возможно я чего-то не понял, тогда покажите мне это живьем.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
2. Живьем? Через TeamViewer? И даже если запускаю лишь одну версию, то автоматическая авторизация не проходит.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Colonel пишет: 1. Да нет, робот показывает одну позицию, в реале именно эта позиция и есть. И по расчетам именно она. Но говорит о рассогласовании.
2. Живьем? Через TeamViewer? И даже если запускаю лишь одну версию, то автоматическая авторизация не проходит.
1. Смотреть позицию надо не в квике, а в таблице, создаваемой роботом. Робот сам ведет свою позицию, не обращая внимания на то, что показывает квик. Он показывает ее на экране (лонг, шорт, без позиции). Это сделано для того, чтобы можно было запускать на одной бумаге разных роботов одновременно или торговать в квике руками параллельно всем роботам.
2. Так быть не должно. Покажите в тимвьювере или скайпе
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
if ((CurrPos == "Лонг" OR CurrPos == "Шорт") AND LastValue(Flip(Buy,Sell) - Flip(Short,Cover)) != StrToNum(StrExtract(Current_Status,1)))
Message("Рассогласование реальной и расчётной позиций");
Как можно увидеть по скрину АмиШарпа позиция Buy закрыта сигналом Sell, т.е. первый "Flip" переведен в положение НОЛЬ. Второй же "Flip" в положении ЕДИНИЦА, поскольку, как видно из АмиШарпа, сигнала Cover еще не было. Т.е. разность флипов у нас -1. Текущая позиция у нас "Шорт". Таким образом первая часть (-1) у нас не равна второй - "Единице". Т.е. выводится сообщение о рассогласовании! Но почему? Какая-та неверная логика? Позиции-то совпадают.
Или я где-то ошибся?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А лог робота выводит следующее при включении всего комплекса:
18.09.2014 19:44:31 Запуск терминала QUIK C:\QUIK\info.exe
18.09.2014 19:44:31 Поключение к терминалу C:\QUIK\ невозможно
18.09.2014 19:44:31 Поключение к терминалу C:\QUIK\ невозможно
18.09.2014 19:44:31 Поключение к терминалу C:\QUIK\ невозможно
18.09.2014 19:44:32 Поключение к терминалу C:\QUIK\ невозможно
18.09.2014 19:44:33 Поключение к терминалу C:\QUIK\ невозможно
18.09.2014 19:44:34 Поключение к терминалу C:\QUIK\ успешно
18.09.2014 19:44:34 Нет соединения с брокером
18.09.2014 19:44:34 Отключение от терминала C:\QUIK\
18.09.2014 19:44:35 Поключение к терминалу C:\QUIK\ успешно
18.09.2014 19:44:35 Нет соединения с брокером
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Должно быть:
CurrPos равен Шорт. Первая часть условия - true
Переходим ко второй
LastValue(Flip(Buy,Sell) - Flip(Short,Cover) даст -1
StrToNum(StrExtract(Current_Status,1) даст -1
-1 != -1 даст false
В результате условие выполниться не должно и сообщение на экране появляться не имеет права.
Вносили какие-то изменения в исходный текст робота?
Попробуйте протрассировать (_trace() ) все переменные, входящие в это выражение. Когда окажется, что какая-то из них содержит не то значение, которое должно быть - делайте вывод.
Также возможен вариант, что вы внесли какие-то изменения в файл таблицы робота. Текстовым редактором или экселем. Например, какой-то пробел вклинился некстати или что-то еще.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Запущен терминал, робот попробовал подключиться к нему, все у него получилось.
Нет соединения с брокером.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
admin пишет: Совершенно нормальный лог.
Запущен терминал, робот попробовал подключиться к нему, все у него получилось.
Нет соединения с брокером.
Ну, конечно, нет. Ибо квик мне выводит окно с предложением ввести логин и пароль. Но при этом в настройках робота стоит указание на автоматическую авторизацию.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Colonel пишет: К сожалению, я не знаю, как "протрассировать".
Функция _trace() описана в хелпе
Она выводит в окно Log (вкладка Trace) значение.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Colonel пишет:
admin пишет: Совершенно нормальный лог.
Запущен терминал, робот попробовал подключиться к нему, все у него получилось.
Нет соединения с брокером.
Ну, конечно, нет. Ибо квик мне выводит окно с предложением ввести логин и пароль. Но при этом в настройках робота стоит указание на автоматическую авторизацию.
Окно авторизации квика неактивно?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
admin пишет: Окно авторизации квика неактивно?
Ну оно выскакивает и все. Ожидание моего ввода. Оно активно.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Вообще посылка клавиш в чужое окно - это "неодобряемое" Биллом Гейтсом действие. Более того, они с ним даже активно борются. Взависимости от билда ОС оно действительно может не работать.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
admin пишет: Win 8?
Server2003 Standart +64Edition
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
В логе следующая запись:
18.09.2014 21:29:07 Поключение к терминалу C:\QUIK\ невозможно
18.09.2014 21:29:08 Поключение к терминалу C:\QUIK\ успешно
18.09.2014 21:29:08 Нет соединения с брокером
18.09.2014 21:29:08 Отключение от терминала C:\QUIK\
18.09.2014 21:29:09 Поключение к терминалу C:\QUIK\ успешно
18.09.2014 21:29:09 Нет соединения с брокером
И так далее на повторение
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Билл Гейтс у вас такую возможность отгрыз.
На работоспособность это не влияет, но будете пароль вводить руками или включать робота, когда квик уже готов к работе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
И, кстати, не разъясните, почему StrToNum(StrExtract(Current_Status,1) даст -1? Мне казалось, что он 1 дает.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Colonel пишет: Да ладно, введу руками. Но вот вопрос с тем, что запускаются два квика, беспокоит. А если 4 робота будет стоять? 4 квика?
На несколько секунд при старте загрузит. Разве это проблема?
Colonel пишет:
И, кстати, не разъясните, почему StrToNum(StrExtract(Current_Status,1) даст -1? Мне казалось, что он 1 дает.
Current_Status есть строка вида "Шорт,-1"
StrExtract(Current_Status,1) даст вторую подстроку, то есть "-1"
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
admin пишет: Current_Status есть строка вида "Шорт,-1"
StrExtract(Current_Status,1) даст вторую подстроку, то есть "-1"
Сделал трассировку. Выдает не -1, а -11. Т.е. размер текущей позиции. Что логично.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Добавьте вычисление знака для реальной позиции. Должно помочь
Было
if ((CurrPos == "Лонг" OR CurrPos == "Шорт") AND LastValue(Flip(Buy,Sell) - Flip(Short,Cover)) != StrToNum(StrExtract(Current_Status,1)))Стало
if ((CurrPos == "Лонг" OR CurrPos == "Шорт") AND LastValue(Flip(Buy,Sell) - Flip(Short,Cover)) != Sign(StrToNum(StrExtract(Current_Status,1))))Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Проснулся и, к сожалению, был неприятно удивлен произошедшим. Прошу посмотреть на картинку. Робот на начало вечерней сессии находился в лонговой позиции. Как видно из лога - ошибок, отсутствия связи, выключений не было, начиная со старта вечерки и до окончания торгов. Так же видно, что прошел сигнал на выход из позиции в 21:00, после чего нижняя зеленая линия прервалась, показывая, что выход из позиции осуществлен.
Однако, как видно из логов, сделки никакой не было. АмиШарп находится в позиции. Ну и в КВИКе позиция также открыта лонговая.
Стоит отметить, что робот в принципе настроен на выход из позиции в 21:05. Так, позавчера лог выглядел следующим образом:
22.09.2014 21:05:59 Сигнал Cover
22.09.2014 21:05:59 Транзакция: ACTION=NEW_ORDER;OPERATION=B;TRANS_ID=470;SECCODE=RIZ4;QUANTITY=1;CLASSCODE=SPBFUT;ACCOUNT=SPBFUT00OKG;PRICE=120570;TYPE=L;EXECUTION_CONDITION=KILL_BALANCE;
22.09.2014 21:05:59 Результат отправки транзакции: 1,13380202828,Заявка с биржевым номером 13380202828 успешно зарегистрирована.,0,
22.09.2014 21:05:59 Номер ордера 13380202828
22.09.2014 21:05:59 Рассогласование реальной и расчётной позиций
22.09.2014 21:06:00 Заявка 13380202828 исполнена: 1 * 113730 = -87932.85
Кстати, отчего-то время лога запаздывает, ибо сделка была проведена именно в 21:05.
Подскажите, какая может быть причина такого поведения робота. И что теперь делать? При открытии руками крыться? Я так понял, что рассогласование реальной и текущей позиции не будет сигналом роботу к исправлению ситуации.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Это хорошо, что рынок пошел в сторону позиции. А если бы начался завал длиною в месяц? Робот тупо бы сидел в лонговой позе и маячил о рассогласовании? Есть мнение, что это неверная логика работы. А ведь изначально преподносилось, что робот подобные ситуации будет исправлять сам. Он ведь потому и робот. Вот случилось, что по какой-то причине не произошел выход из позиции. И робот ведь отслеживает это. Значит при возникновении первой же возможности он должен исправить ситуацию - в данном случае закрыть позицию. Разве не так?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Я правильно вижу, что у вас на одной свече сигналы sell и cover одновременно?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Значит при возникновении первой же возможности он должен исправить ситуацию - в данном случае закрыть позицию. Разве не так?
Нет, не так.
Существует 2 пути.
- Немедленно покупать/продавать, чтобы уравнять позицию. Очень опасно. Например, срабатывание может быть в момент, когда не вся история прогрузилась. И зачем при этом щелкать заявками?
- Ждать появления следующего подходящего сигнала, игнорируя все неподходящие и изо всех сил моргая экраном. Я выбрал этот путь как наименее травмоопасный.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Робот предпринимает усилия, чтобы поправить огрехи в алгоритме, написанном пользователем. В большинстве случаев ему это удается.Например, он успешно фильтрует идущие подряд сигналы на вход в позицию. Однако все ошибки/неточности он отфильтровать не в состоянии.
У вас как раз один из таких случаев.
На одной свече нельзя ставить противоположные сигналы. Например, что делать роботу, если на одной свече одновременно появились сигналы Buy и Short? Ему непонятно, и потому он делает единственно правильное действие - не предпринимает ничего.Похожая ситуация и у Вас. Даже опора на наличие текущей реальной позиции на дает однозначного ответа.
Поэтому робот ничего не предпринял в вашем случае, оставив все как есть до следующего сигнала Sell
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
И если мы берем за основу второй подход, то возможно ли какой-то дополнительное информирование о возникшем рассогласовании? Смс, почта? Или, получается, я постоянно должен быть у терминала? Но для чего в таком случае автоматизации?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
В данном случае ситуация не в том, что он не смог определить, что ему делать. Все остальные дни он прекрасно отрабатывал тот же самый выход по тому же самому алгоритму.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
