Автор |
Сообщение |
DDD
Зарегистрирован: 24.07.2015
Сообщения: 3
|
Здравствуйте!
Не могу разобраться с простой ситуацией.
При:
Buy = Cross(C, 1000);
Sell = Cross(C, 1200);
все работает и Buy и Sell. Но множество ненужных сигналов.
При:
Buy = Cross(C, 1000);
Sell = Cross(C, 1200);
Buy = ExRem(Buy , Sell );
Sell = ExRem(Sell , Buy );
во время тестирования появляется только один Sell и последующий Buy , но первый Buy не появляется. В чем может быть причина?
Может быть какие то параметры тестера покрутить?
СИНТАКСИС exrem( ARRAY1, ARRAY2 )
ВОЗВРАЩАЕТ МАССИВ
ФУНКЦИЯ удаляет лишние сигналы:
возвращает 1 когда в первый раз появляется сигнал в массиве Array1, затем все время 0 до тех пор пока не появится сигнал в массиве Array2 даже если в массиве Array1 появляются еще сигналы.
ПРичем если на графике пишем код:
SetPositionSize(1, spsShares );
Buy = Cross(C, 1000);
Sell = Cross(C, 1200);
Buy = ExRem( Buy , Sell );
Sell = ExRem( Sell , Buy );
Plot (Buy ,"Eq",colorBlue, styleOwnScale);
Plot (Sell ,"Eq1",colorBlue, styleOwnScale);
то Buy и Sell отображаются, а в тестере первого Buy нет. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Значит тестер по какой то причине проигнорировал этот сигнал. Например не хватило объема ( http://www.amisite.ru/begin/bk_set6.php ) или сигнал находится за границей области тестирования. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
DDD
Зарегистрирован: 24.07.2015
Сообщения: 3
|
Спасибо за ответ.
Маленький вопрос, чтобы не создавать новую тему.
Есть код:
Код: |
Short7 = Cross( indic , 100.01 );
Cover7 = Cross( 99.99 , indic );
Short = 0;
Cover = 0;
pos = 0;
for(i = 0; i < BarCount; i++)
{
if(pos == 0)
{
if(Short7 [i])
{
Short[i] = 1;
pos = 1;
}
}
else if(pos == 1)
{
if(Cover7 [i])
{
Cover[i] = 1;
pos = 0;
}
}
}
|
В тестере все работает замечательно, если тестер прогоняем за весь период графика.
Но если в тестере устанавливаем From-To dates меньше периода графика, то иногда на начало меньшего периода pos = 1, т.е. есть незакрытые сделки. И в начале меньшего периода появляется Cover, т.е предыдущая сделка закрывается и затем идут текущие сделки. Как убрать незакрытые сделки на начало меньшего периода? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Добавить в код фильтр по дате. Если дата меньше чем... то сигнала нет.
Buy = ... AND DateNum() > ....; |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
DDD
Зарегистрирован: 24.07.2015
Сообщения: 3
|
|
Посмотреть профиль Отправить личное сообщение |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
Задам свой вопрос тут, дабы не плодить тем.
В настоящий момент в роботе стоит примерно такая конструкция по оформлению сигналов:
Код: |
//Сигналы
Buy1 = bc3 AND bc2 AND Imp1 AND trend;
Sell1 = sc3 AND sc2;
Short1 = sc3 AND sc2 AND Imp1 AND trend;
Cover1 = bc3 AND bc2;
Buy2 = bc8 AND !trend;
Sell2 = sc8 AND !trend;
Short2 = sc8 AND !trend;
Cover2 = bc8 AND !trend;
BuySig = (Buy1 OR Buy2) AND TM2 AND TM3;
SellSig = (Sell1 AND trend) OR Sell2 OR TM OR (OutB AND trend);
ShortSig = (Short1 OR Short2) AND TM2 AND TM3;
CoverSig = (Cover1 AND trend) OR Cover2 OR TM OR (OutS AND trend);
Buy = Ref(BuySig,-1);
Sell = Ref(SellSig,-1);
Short = Ref(ShortSig,-1);
Cover = Ref(CoverSig,-1);
BuyPrice = ShortPrice = CoverPrice = SellPrice = Open;
|
После включения робота по сигналам уже был ранее вход в шорт. Т.е. робот спокойно ждал, когда будет выход из шорт, не входя в позицию.
Но оказалось, что проскочил еще один лишний шортовый сигнал и робот зашел в шорт.
Вопрос - как мне убрать лишние сигналы в данной конструкции?
Просто поставить после BuyPrice... строки:
Код: |
Buy = ExRem(Buy , Sell );
Sell = ExRem(Sell , Buy ); |
А Шорт и Ковер надо прописать также? Если да, то как?
Или же просто поставить Equity (1,0); ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
1. Строку
BuyPrice = ShortPrice = CoverPrice = SellPrice = Open;
убрать совсем. Она в роботе не нужна.
2. Добавить
Код: |
Buy = ExRem(Buy , Sell );
Sell = ExRem(Sell , Buy );
Short = ExRem(Short , Cover );
Cover = ExRem(Cover , Short ); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
AntColonel
Зарегистрирован: 03.05.2011
Сообщения: 213
Откуда: Новосибирск
|
000 писал(а): |
1. Строку
BuyPrice = ShortPrice = CoverPrice = SellPrice = Open;
убрать совсем. Она в роботе не нужна.
2. Добавить
|
Благодарю.
Строку эту боюсь убирать. У разработчика она была. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Nayati
Зарегистрирован: 27.05.2016
Сообщения: 22
Откуда: Ростов-на-Дону
|
Как сделать так чтоб все сделки на усреднение при пробое канала учитывались в тесте. У меня по тесту получается будто функция ExRem включена по умолчанию, с ней или без все сделки при уже открытой позиции игнорируются тестером.Не пойму почему позиция не усредняется?
Код: |
Buy=L<Ref(LLV(L,10),-1);
Short=H>Ref(HHV(H,10),-1);
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Это нормальная работа тестера. Он сам по себе усреднять не будет. Для добавления\сокращения позиций ему нужны сигналы sigscalein\sigscaleout. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|