Автор |
Сообщение |
dimon
Зарегистрирован: 05.04.2010
Сообщения: 2
Откуда: Москва
|
Добрый день.
При тестировании системы возникают сигналы входа и выхода на одной свече. При скане они видны. Но когда запускается Бэктест, то в нем данной позиции нет. Как можно это исправить? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В настройках АА включи опцию Allow same bar exit (single bar trade) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
dimon
Зарегистрирован: 05.04.2010
Сообщения: 2
Откуда: Москва
|
000 писал(а): |
В настройках АА включи опцию Allow same bar exit (single bar trade) |
Большое спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
А подскажите, какими условиями можно прописать Cover и Sell, дабы они закрывали позицию по цене закрытия свечи, учитывая то, что открытие было по цене входа. К примеру, имеем цену открытия выше чего-то и в рамках тестирования тут же входим по ней. Это прописать легко. А вот выход на той же свече по цене закрытия? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
Sell = Buy;
SellPrice = Close; |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
inivin
Зарегистрирован: 28.02.2015
Сообщения: 12
|
Олег, а как избавляться от задваивания сигналов на одном баре?
Запускаю скрипт через AA-Explore-Run every 30sec с ТФ 15, условие выполняется, приходит сигнал buy. Через минуту цена уходит, условие не выполняется. Затем снова цена доходит до выполнения условия и мне приходит второй сигнал buy внутри одного бара.
Можно сделать так, чтобы вход в сделку происходил сразу же с приходом первого сигнала buy, не дожидаясь закрытия бара? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
inivin писал(а): |
Олег, а как избавляться от задваивания сигналов на одном баре?
Запускаю скрипт через AA-Explore-Run every 30sec с ТФ 15, условие выполняется, приходит сигнал buy. Через минуту цена уходит, условие не выполняется. Затем снова цена доходит до выполнения условия и мне приходит второй сигнал buy внутри одного бара.
Можно сделать так, чтобы вход в сделку происходил сразу же с приходом первого сигнала buy, не дожидаясь закрытия бара? |
Это вопрос про робота? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
inivin
Зарегистрирован: 28.02.2015
Сообщения: 12
|
Нет, пишу скрипт сам. Пока при возникновении сигнала на открытие позиции генерируется только алерт. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
inivin
Зарегистрирован: 28.02.2015
Сообщения: 12
|
000 писал(а): |
Это вопрос про робота? |
Нет, пишу скрипт сам. Пока при возникновении сигнала на открытие позиции генерируется только алерт. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем надо ставить ключ после сигнала и когда сигнал проверять. Если он есть, то сигнал игнорировать.
Типа так
Код: |
varname = Name() + "_key";
key = StaticVarGet( varname );
Buy = ..... AND != key
if(LastValue(Buy))
{
StaticVarSet(varname, 1);
} |
Следует иметь ввиду, что статическую переменную Ами помнит только до перезагрузки. Соответственно если в течении дня перегрузить, то он "забудет" что сигнал уже был и при случае его снова покажет. А на завтра наоборот обязательно надо перегрузить. Иначе он будет "помнить" вчерашние сигналы.
Можно ключь записывать в файл этим http://www.amisite.ru/files/as_file.php плагином.
Тогда так
Код: |
signal_key = AS_READ_PARAM("my_file", Name(), "signal_key");
if(AS_READ_PARAM("Vasilev_Robot", Name(), "Data") != LastValue(DateNum()))
{
AS_WRITE_PARAM("my_file", Name(), "signal_key", 0);
AS_WRITE_PARAM("my_file", Name(), "Data", LastValue(DateNum())); // когда начался новый день сбрсываем ключ.
}
Buy = ... and signal_key == 0;
if(LastValue(Buy))
{
AS_WRITE_PARAM("my_file", Name(), "signal_key", 1);
AS_WRITE_PARAM("my_file", Name(), "Data", LastValue(DateNum()));
} |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Чт Июл 16, 2015 10:42 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
inivin
Зарегистрирован: 28.02.2015
Сообщения: 12
|
Спасибо! В моем случае надо наверно только обнулять signal_key не раз в день, в начале каждого 15минутного бара. |
Последний раз редактировалось: inivin (Чт Июл 16, 2015 10:51 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Там у меня описка была. В строке
if(AS_READ_PARAM("Vasilev_Robot", Name(), "Data") != LastValue(DateNum())) вместо Data было date. Исправил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
inivin
Зарегистрирован: 28.02.2015
Сообщения: 12
|
000 писал(а): |
Там у меня описка была. В строке
if(AS_READ_PARAM("Vasilev_Robot", Name(), "Data") != LastValue(DateNum())) вместо Data было date. Исправил. |
Такой код получился, с обнулением флага каждый бар
signal_key = AS_READ_PARAM("signals.ini", Name(), "signal_key");
if(AS_READ_PARAM("signals.ini", Name(), "BarIndex") != LastValue(BarIndex()))
{
AS_WRITE_PARAM("signals.ini", Name(), "signal_key", 0);
AS_WRITE_PARAM("signals.ini", Name(), "BarIndex", LastValue(BarIndex()));
}
Buy = ..........;
Short =...............;
if(LastValue(Buy) OR LastValue(Short))
{
AS_WRITE_PARAM("signals.ini", Name(), "signal_key", 1);
AS_WRITE_PARAM("signals.ini", Name(), "BarIndex", LastValue(BarIndex()));
} |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Только имей ввиду, что BarIndex одного бара может меняться.
Тому могут быть 2 причины.
1. Квик АФЛ. По умолчанию АФЛ старается использовать не все данные, а столько, сколько необходимо для правильного расчета используемых в коде функций. Соответствено если для этого надо только 40 баров, то последний всегда будет считаться 40ым. Добавился новый бар и он стал 40 а тот что раньше был 40ым стал 39ым. Ну это легко отключить. Функция SetBarsRequired(sbrAll, 0)
2. Плагин данных. При создании базы данных задается длинна истории которая должна в ней содержаться (параметр Number of Bars). И если плагин данных написан правильно, то он, при достижении этого числа баров должен удалять самые старые и оставлять только заданное число баров. Соответственно BarIndex в такой ситуации тоже работать не будет. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
inivin
Зарегистрирован: 28.02.2015
Сообщения: 12
|
1. Quick AFL я учел, отключено.
2. Это не знал, спасибо. Хотя, в настройках базы стоит 200000 баров, сейчас текущий BarIndex чуть больше 3000, те с такими темпами при 15мин ТФ потребуется 10лет до заполнения лимита)
А ещё не подскажешь, как ширину столбцов в окне Old Style AA выравнивать по размеру данных? Для уменьшения места на экране, у меня 12 столбцов и почти весь экран по ширине получается, мышкой каждый раз уменьшать ширину неудобно. По умолчанию ширина столбцов намного шире данных. |
Последний раз редактировалось: inivin (Чт Июл 16, 2015 2:01 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
|