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


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

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

Даааа. Это не просто.
Если переключаешься на дневной фрейм Ами не видит внутри дня и соответственно не может посчитать твои уровни.
Вижу только 2 варианта.
1. Работать внутри дня. Там рассчитывать уровни. Внутри кода переключаться на дневки TimeFrameSet() и выводить на график дневки. Плохо то, что в таком случае временная шкала грфика останется внутридневной и не будет соответствовать графику.
2. Внутри дня расчитывать уровни и запихивать их в отдельный тикер AddToComposite(), а потом на дневном фрейме выводить уровни функцией Foreign().

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



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

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

Приветствую, Олег.
Благодарю за помощь и за всё то, что ты для всех делаешь!
Как-то много я пытался сделать, но по-тихоньку сдаюсь.
Поэтому сразу два вопроса.
Цель 1: просчитать количество баров при положительных сделках
Цель 2: выход по двум условиям. (первое - реализовано), а второе пока не знаю как, (если цена три дня подряд идёт не в нашу сторону, то выходим)

Итого по коду: по цели 1 "нахимичал", но в итоге не считает.
по цели 2 не знаю как задать прописанное условие раньше, чем фильтрование сделок, т.к. мне нужна именно цена реальной сделки (т.е. "PriceBuy")
Вот код:

Код:

SetBarsRequired( 100000, 100000 );
SetPositionSize(100,2);   //торгуемое количество лотов
SetTradeDelays( 0, 0, 0, 0 );   //задержка торгов
SetOption("InitialEquity", 10000);  //начальный капитал
SetOption("AllowSameBarExit", True);   //запрет выхода на баре входа
SetOption("ActivateStopsImmediately", False);  //немедленная активация стопов
SetOption("AllowPositionShrinking", False); //разрешить открывать позицию размером меньше заданного (принедостатке средств)


t1=Optimize("период", 20, 10,50, 10);
t2=Optimize("период", 20, 10, 20, 2);
t3=Optimize("период", 2, 1.5, 2, 0.5);
SellPrice=C;
BuyPrice=C;

Cond1=Cross(BBandBot(C,t1,2),C);
Cond2=Cross(C,MA(C,t1)); 


//Cond1=IIf(Ref(C,-1)<BBandBot(C,t1,t3), 1, 0);
//Cond2=IIf(Ref(C,-1)>MA(C,t2), 1, 0);
Buy=Cond1;
Sell=Cond2;



Buy = ExRem( Buy, Sell );
Sell = ExRem( Sell, Buy );

PriceBuy=ValueWhen(Buy, C);            //фиксируем цену покупок
IndexBuy=ValueWhen(Buy, BarIndex());   //фиксируем номер бара покупки
PriceSell=ValueWhen(Sell, C);          //фиксируем цену продажи
IndexSell=ValueWhen(Sell, BarIndex()); //фиксируем номер бара продажи
Delta=PriceSell-PriceBuy;              //ищем положительные сделки

//если сделка была положительной, то ищем продолжительность сделки в барах (ЦЕЛЬ 1)
N_Plus=IIf(ValueWhen(BarIndex()==PriceSell, C)>ValueWhen(BarIndex()==IndexBuy, C),
              ValueWhen(BarIndex()==PriceSell, BarIndex()) - ValueWhen(BarIndex()==IndexBuy, BarIndex()) , 0);



//стоп по неопровдавшемуся условию (цена 3 дня подряд была ниже цены открытия) (ЦЕЛЬ 2)

NumberBarBuy = ValueWhen(C<PriceBuy AND Ref(C,-1)<PriceBuy AND Ref(C,-2)<PriceBuy, BarIndex()); //выход по стопу через 3 полряд неудачных дня

Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Первое я бы сделал вот так
Код:

PriceBuy = ValueWhen(Buy, C);            //фиксируем цену покупок
PriceSell = ValueWhen(Sell, C);          //фиксируем цену продажи
             
N_Plus = IIf( Sell,
   IIf(PriceSell > PriceBuy, BarsSince( Buy ), 0 ),
   0 );

А если надо общее число баров (во всех сделках), то cum(N_Plus).

На счет второго надо уточнение. 3 дня подряд идет не в нашу сторону это
1. 3 дня подряд черные свечки?
2. За три дня не получено прибыли?
3. для 1 и 2 это относится только к первым 3м дням сделки или условие действует в любой момент?

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



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

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

000 писал(а):
Первое я бы сделал вот так
Код:

PriceBuy = ValueWhen(Buy, C);            //фиксируем цену покупок
PriceSell = ValueWhen(Sell, C);          //фиксируем цену продажи
             
N_Plus = IIf( Sell,
   IIf(PriceSell > PriceBuy, BarsSince( Buy ), 0 ),
   0 );

А если надо общее число баров (во всех сделках), то cum(N_Plus).

На счет второго надо уточнение. 3 дня подряд идет не в нашу сторону это
1. 3 дня подряд черные свечки?
2. За три дня не получено прибыли?
3. для 1 и 2 это относится только к первым 3м дням сделки или условие действует в любой момент?

Олег я разобрался со вторым вопросом благодаря твоим прошлым записям из форума форексклуба. Благодарю Тебя за отзывчивость!
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Та еще остались мои записи? Фигасе...

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



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

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

000 писал(а):
Та еще остались мои записи? Фигасе...

Да )
http://forum.fxclub.org/threads/38909-AmiBroker
Посмотреть профиль Отправить личное сообщение
Dr. Robotnik



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

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

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

Помогите плз, как сделать, чтобы при появлении сигнала в определённое время на нескольких инструментов позиция дробилась бы на это количество, ограниченное скажем максимум 5, т.е. на каждый тиккер по 20% (итого 20%*5)
Но в случае появления сигнала только на одном инструменте мы входили всей позой, т.е. 100%.

К примеру код:

Код:
posqty = 5;
PositionSize = -100/posqty;
buy = TimeNum() == 150000 AND O > C;
sell = TimeNum() > 160000;


делает вход на 20% от депо независимо от количества сделок.

Пробовал вот так:
Код:
 in_trade = buyCond;
AddToComposite( in_trade, "~OpenPosCount", "V",  1 + 2 + 8 + 16 );
graph0 = Min(foreign( "~OpenPosCount", "V"),posqty);
posqty = IIf(Graph0==0,1,Graph0);
PositionSize = -100/posqty;
//etc...
// или вот так?
// oc = Ref(graph0,1);
// posqty = IIf(oc==0,1,oc);

но тоже результат не тот
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Типа так это делается.
Код:

SetCustomBacktestProc( "" );

if( Status("action") == actionPortfolio )
{
   bo = GetBacktesterObject();
   bo.PreProcess();
   for( bar = 0; bar < BarCount; bar++ )
   {
      j = 0;
      for( sig = bo.GetFirstSignal( bar ); sig; sig = bo.GetNextSignal( bar ) )
      {
         j++;
      }
      for( sig = bo.GetFirstSignal( bar ); sig; sig = bo.GetNextSignal( bar ) )
      {
         sig.PosSize = int(-100/j);
      }
      

      bo.ProcessTradeSignals( bar );
   }
   bo.PostProcess();
}

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



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

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

000 писал(а):
Типа так это делается.

Огромное спасибо! Подход понял, буду пробовать (перешёл с велса, там такого функционала и близко нет).
..
Да, круто, работает! Ещё раз спасибо!
Посмотреть профиль Отправить личное сообщение
Sergey51



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

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

Скажите, как сделать разделители торговых дней, т.е. на первой свече дня должна быть вертикальная линия на любом таймфрейме?, заранее спасибо.
Посмотреть профиль Отправить личное сообщение
Sergey51



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

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

Уже нашел
SetChartOptions(0,chartShowArrows|chartShowDates);
Посмотреть профиль Отправить личное сообщение
Atlasraketa



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

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

С наступающим Новым годом! Very Happy
2017-м Shocked

Новогодний вопрос, можно-ли измерить угл графика и мувинга Rolling Eyes

Например что-бы задать условие если угл графика >70 гадусов и угл ema21 меньше 70 градусов то шорт.
Угл всегда отмерять от горизонтали.
Rolling Eyes
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

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

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



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

СообщениеДобавлено: Чт Янв 12, 2017 7:36 pm Ответить с цитатой Вернуться к началу

https://fundtechno.whotrades.com/blog/43562754574?utm_source=lenta_finam&utm_medium=strategy_post&utm_campaign=fundtechno

Олег приветствую! Вот простая стратегия. Подскажи, как прописать в АФЛ стоп, который там,.т.е. запомнить ХАЙ или Лой предыдущей свечи (STOPLEVEL):

Система будет иметь вид:
Buy = c>ma200;
Short = c<ma200;

sell = "условие основное" or Low<STOPLEVEL;
cover = "условие основное" or High> STOPLEVEL;
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Янв 12, 2017 8:26 pm Ответить с цитатой Вернуться к началу

Цитата:

т.е. запомнить ХАЙ или Лой предыдущей свечи (STOPLEVEL):

Код:
... or Low < Ref(L, -1);

Как ты спросил, так я и ответил.

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen