Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Почему пропускаются сделки? Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Marcello



Зарегистрирован: 30.05.2015
Сообщения: 69

СообщениеДобавлено: Вт Июн 23, 2015 10:11 am Ответить с цитатой Вернуться к началу

Добрый день!
Пробую перенести системку из WLD в AB, в котором только начинаю разбираться. Системка простая: сделки открываются на развороте индикатора ниже определенного уровня (сделок может быть несколько), а закрываются все сразу при превышении индикатором другого определенного уровня. Все сделки выполняются на следующем баре по цене открытия. В коде получилось так (сделал через FOR, мне пока так понятнее):

Код:

SetBarsRequired(sbrAll,sbrAll);
SetOption( "InitialEquity", 1000000);
SetOption( "DisableRuinStop", True);
SetOption( "AllowSameBarExit", True);
SetOption( "ActivateStopsImmediately", True);
SetOption( "MinShares", 1);
SetOption( "AllowPositionShrinking", True );
SetOption( "MinPosValue", 0);
SetOption( "MaxOpenPositions", 100);
SetOption( "InterestRate", 0);
SetOption( "PriceBoundChecking", True);
SetOption( "AccountMargin", 100);
SetOption( "ReverseSignalForcesExit", False);
SetTradeDelays(0,0,0,0); 

Plot( C, "Price", colorDefault, styleCandle );

BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;

inLong = 0;
inShort = 0;
Buy = Sell = Short = Cover = 0;

for( i = pPer + 1; i < BarCount; i++ ) {
 
   Buy[i] = IND[i-2] < pBotL[i-3] AND IND[i-2] < IND[i-3] AND IND[i-2] < IND[i-1];
   Sell[i] = IND[i-1] > pTopL[i-2];

   Short[i] = IND[i-2] > pTopS[i-3] AND IND[i-2] > IND[i-3] AND IND[i-2] > IND[i-1];
   Cover[i] = IND[i-1] < pBotS[i-2];

   if ( Buy[i] ) {
      if ( inShort ) { if ( Cover[i] == 0 ) Buy[i] = 0; else { inLong = 1; inShort = 0; } }
      else { inLong = 1; inShort = 0; }
   }
 
   if ( Short[i] ) {
      if ( inLong ) { if ( Sell[i] == 0 ) Short[i] = 0; else { inShort = 1; inLong = 0; } }
      else { inShort = 1; inLong = 0; }
   }

   if ( Cover[i] ) {
      if ( !inShort ) { Cover[i] = 0; } else inShort = 0;
   }

   if ( Sell[i] ) {
      if ( !inLong ) { Sell[i] = 0; } else inLong = 0;
   }
}

PlotShapes(Buy * shapeUpArrow, colorGreen, 0, Open, -8);
PlotShapes(Sell * shapeHollowDownArrow, colorAqua, 0, Open, -24);

PlotShapes(Short * shapeDownArrow, colorRed, 0, Open, -8);
PlotShapes(Cover * shapeHollowUpArrow, colorYellow, 0, Open, -24);


На картинке видно, что нарисовано 3 входа и 1 выход. В тестере вход только один. Почему в тестере пропускаются сделки? Пробовал в код добавить строку SetPositionSize( 10, spsPercentOfEquity ), но это не помогло.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Июн 23, 2015 10:30 am Ответить с цитатой Вернуться к началу

По умолчанию Ами открывает только одну позицию по одной бумаге и после ее открытия блокирует все остальные сигналы до закрытия этой позиции.
В принципе Ами позволяет это обойти. Есть 2 варианта.
1. Можно доливаться к уже существующей позиции. Т.е. сначала открыли позу например 10 лотов и потом добаили к ней еще 5. Для этого есть SigScaleIn/SigScaleOut. У этого способа есть как плюсы, так и минусы.
Плюс в том, что можно не только наращивать размер позы, но так же и постепенно сокращать его.
Минус в том, что в отчете тестера такая сделка показывается как одна результирующим сайзом. Ами в сделке изменит цену входа так, чтобы эта результирующая сделка давала такой же результат как и сделка с переменным сайзом.
2. Можно разрешить Ами иметь одновременно несколько открытых позиций по одной бумаге. Для этого надо переключить режим тестера. Для этого надо добавить в код строку
Код:
SetBacktestMode( backtestRegularRawMulti );

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

Уфф. Как то так.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Marcello



Зарегистрирован: 30.05.2015
Сообщения: 69

СообщениеДобавлено: Вт Июн 23, 2015 10:37 am Ответить с цитатой Вернуться к началу

000 писал(а):
Код:
SetBacktestMode( backtestRegularRawMulti );

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


Олег, спасибо! Такой вариант как раз и нужен: набор позиции отдельными сделками и потом разовое их закрытие. А насчет установки сайза правильно ли использовать SetPositionSize( 10, spsPercentOfEquity ) ? Или на каждой сделке процент будет все меньше? В идеале бы как-то до первой сделки зафиксировать эти 10% и порциями добавляться, а после закрытия всех сделок и до появления следующего "первого" сигнала снова определить новые 10%. Подозреваю, что одной строки в AB это не получится.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Июн 23, 2015 10:42 am Ответить с цитатой Вернуться к началу

"Ну и чтобы два раза не вставать" Smile
Если не ошибаюсь, то твоя система на "правильном" AFL будет так
Код:
...
SetTradeDelays(1,1,1,1);
Plot( C, "Price", colorDefault, styleCandle );
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;

Buy = Sell = Short = Cover = 0;
 
Buy = IND < Ref(pBotL, -1) AND Ref(IND, -1) < Ref(IND, -2) AND Ref(IND, -1) < IND;
Sell = IND > Ref(pTopL, -1);

Short = IND > Ref(pTopS, -1) AND Ref(IND, -1) > Ref(IND, -2) AND Ref(IND, -1) > IND;
Cover = IND < Ref(pBotS, -1);
PlotShapes(Buy * shapeUpArrow, colorGreen, 0, Open, -8);
PlotShapes(Sell * shapeHollowDownArrow, colorAqua, 0, Open, -24);

PlotShapes(Short * shapeDownArrow, colorRed, 0, Open, -8);
PlotShapes(Cover * shapeHollowUpArrow, colorYellow, 0, Open, -24);


Вот.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Июн 23, 2015 10:46 am Ответить с цитатой Вернуться к началу

Marcello писал(а):

Олег, спасибо! Такой вариант как раз и нужен: набор позиции отдельными сделками и потом разовое их закрытие. А насчет установки сайза правильно ли использовать SetPositionSize( 10, spsPercentOfEquity ) ? Или на каждой сделке процент будет все меньше? В идеале бы как-то до первой сделки зафиксировать эти 10% и порциями добавляться, а после закрытия всех сделок и до появления следующего "первого" сигнала снова определить новые 10%. Подозреваю, что одной строки в AB это не получится.

Там spsPercentOfEquity. Эквити включает ВСЕ деньги в т.ч. и "занятые" в сделке. Соответственно SetPositionSize( 10, spsPercentOfEquity ) это нормальный вариант. Ну правда вторая, третья и т.д. сделки всетаки будут отличаться т.к. есть открытые сделки и по ним есть промежуточный фин. результат который влияет на эквити.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Marcello



Зарегистрирован: 30.05.2015
Сообщения: 69

СообщениеДобавлено: Вт Июн 23, 2015 10:53 am Ответить с цитатой Вернуться к началу

000 писал(а):
"Ну и чтобы два раза не вставать" Smile
Если не ошибаюсь, то твоя система на "правильном" AFL будет так


Согласен. Но до "правильного" AFL я пока не дорос ))
А насчет 10% от позиции думаю, что можно перед "первым" сигналом вычислять 10% от капитала в виде "акций" в переменную и использовать ее до закрытия всех открытых сделок. Правда пока не знаю как это реализовать на "правильном" AFL ))
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Июн 23, 2015 11:04 am Ответить с цитатой Вернуться к началу

Проще сперва попробовать так. Может они и так одинаковые будут. Или вариант использовать не процент, а фиксированное число бумаг.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
новичок



Зарегистрирован: 24.01.2012
Сообщения: 4

СообщениеДобавлено: Чт Июн 25, 2015 8:15 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Код:
SetBacktestMode( backtestRegularRawMulti );

Тут плюс в том, что будет видно сделки по каждоту сигналу,



А как и где можно это увидеть? Было бы неплохо на простом примере посмотреть.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Июн 25, 2015 10:11 pm Ответить с цитатой Вернуться к началу

Что там смотреть?
Код:

SetBacktestMode(backtestRegularRawMulti);

Buy = DayOfWeek() == 1 or DayOfWeek() == 2 or DayOfWeek() == 3;
Sell = DayOfWeek() == 5;
Short = Cover = 0;

SetPositionSize(1, 4);

Ну вот. Гонять на древках. Открываются 3 сделки (в пнд, вт и среду) и все три закрываются в пятницу.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ZVV



Зарегистрирован: 20.11.2014
Сообщения: 69

СообщениеДобавлено: Пт Ноя 04, 2016 11:28 pm Ответить с цитатой Вернуться к началу

Доброго времени суток!

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

Цитата:

FrUp = H > Ref(H, -1) AND H > Ref(H, 1) ;
FrDwn = L < Ref(L, -1) AND L < Ref(L, 1) ;

UpLevel = ValueWhen(FrUp ,H)+1;
DwnLevel = ValueWhen(FrDwn, L)-1;

Buy = Cross(H, UpLevel) ;
BuyPrice = UpLevel;

Sell = Cross(DwnLevel,L) ;
SellPrice = DwnLevel;

Short = Cross(DwnLevel,L) ;
ShortPrice =DwnLevel;

Cover = Cross(H, UpLevel);
CoverPrice = UpLevel;


На картинке пример, два сигнала пропущено, на третьем вход:
Image
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Ноя 05, 2016 6:58 am Ответить с цитатой Вернуться к началу

Какая это бумага, какой фрейм и дата всего этого безобразия?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ZVV



Зарегистрирован: 20.11.2014
Сообщения: 69

СообщениеДобавлено: Сб Ноя 05, 2016 10:48 am Ответить с цитатой Вернуться к началу

В том-то и дело, что у меня на любых инструментах(ФОРТС и акции Мосбиржа) в любых фреймах эта простая система рисует такие подлянки.
Вот для примера фьюч Сбер, данные тиковые и 5 мин, фрейм 15 минут, конец августа.


Тиковые в 15 мин:
Image

5мин в 15 мин, еще хуже:
Image
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Ноя 05, 2016 12:01 pm Ответить с цитатой Вернуться к началу

Выведи вот такой график

Код:
FrUp = H > Ref(H, -1) AND H > Ref(H, 1) ;
FrDwn = L < Ref(L, -1) AND L < Ref(L, 1) ;

UpLevel = ValueWhen(FrUp ,H)+1;
DwnLevel = ValueWhen(FrDwn, L)+1;

Buy = Cross(H, UpLevel) ;
BuyPrice = UpLevel;

Sell = Cross(DwnLevel,L) ;
SellPrice = DwnLevel;

Short = Cross(DwnLevel,L) ;
ShortPrice =DwnLevel;

Cover = Cross(H, UpLevel);
CoverPrice = UpLevel;

Plot(C, "", colorBlack, styleCandle);

Plot(UpLevel, "", colorRed);
Plot(DwnLevel, "", colorGreen);


Посмотри и поймешь в чем дело.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ZVV



Зарегистрирован: 20.11.2014
Сообщения: 69

СообщениеДобавлено: Сб Ноя 05, 2016 1:39 pm Ответить с цитатой Вернуться к началу

Ничего не понял(

Это увидел:
Цитата:
DwnLevel = ValueWhen(FrDwn, L)+1;
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Ноя 05, 2016 5:31 pm Ответить с цитатой Вернуться к началу

Код:

FrUp = H > Ref(H, -1) AND H > Ref(H, 1) ;
FrDwn = L < Ref(L, -1) AND L < Ref(L, 1) ;

UpLevel = ValueWhen(FrUp ,H)+1;
DwnLevel = ValueWhen(FrDwn, L)-1;

Buy = Cross(H, UpLevel) ;
BuyPrice = UpLevel;

Sell = Cross(DwnLevel,L) ;
SellPrice = DwnLevel;

Short = Cross(DwnLevel,L) ;
ShortPrice =DwnLevel;

Cover = Cross(H, UpLevel);
CoverPrice = UpLevel;

Buy = ExRem(Buy, Short);
Short = ExRem(Short, Buy);


Plot(C, "", colorBlack, styleCandle);

Plot(UpLevel, "", colorRed);
Plot(DwnLevel, "", colorGreen);

PlotShapes(Buy * shapeUpArrow, colorGreen);
PlotShapes(Short * shapeDownArrow, colorRed);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen