Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 След. |
Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Даааа. Это не просто.
Если переключаешься на дневной фрейм Ами не видит внутри дня и соответственно не может посчитать твои уровни.
Вижу только 2 варианта.
1. Работать внутри дня. Там рассчитывать уровни. Внутри кода переключаться на дневки TimeFrameSet() и выводить на график дневки. Плохо то, что в таком случае временная шкала грфика останется внутридневной и не будет соответствовать графику.
2. Внутри дня расчитывать уровни и запихивать их в отдельный тикер AddToComposite(), а потом на дневном фрейме выводить уровни функцией Foreign(). |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Bagira
Зарегистрирован: 18.01.2012
Сообщения: 5
|
Приветствую, Олег.
Благодарю за помощь и за всё то, что ты для всех делаешь!
Как-то много я пытался сделать, но по-тихоньку сдаюсь.
Поэтому сразу два вопроса.
Цель 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
|
Первое я бы сделал вот так
Код: |
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
|
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
|
Та еще остались мои записи? Фигасе... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Bagira
Зарегистрирован: 18.01.2012
Сообщения: 5
|
|
Посмотреть профиль Отправить личное сообщение |
|
Dr. Robotnik
Зарегистрирован: 27.11.2016
Сообщения: 2
|
Здравствуйте!
Помогите плз, как сделать, чтобы при появлении сигнала в определённое время на нескольких инструментов позиция дробилась бы на это количество, ограниченное скажем максимум 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
|
Типа так это делается.
Код: |
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
|
000 писал(а): |
Типа так это делается.
|
Огромное спасибо! Подход понял, буду пробовать (перешёл с велса, там такого функционала и близко нет).
..
Да, круто, работает! Ещё раз спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Sergey51
Зарегистрирован: 05.09.2015
Сообщения: 30
|
Скажите, как сделать разделители торговых дней, т.е. на первой свече дня должна быть вертикальная линия на любом таймфрейме?, заранее спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Sergey51
Зарегистрирован: 05.09.2015
Сообщения: 30
|
Уже нашел
SetChartOptions(0,chartShowArrows|chartShowDates); |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Atlasraketa
Зарегистрирован: 12.07.2015
Сообщения: 136
|
С наступающим Новым годом!
2017-м
Новогодний вопрос, можно-ли измерить угл графика и мувинга
Например что-бы задать условие если угл графика >70 гадусов и угл ema21 меньше 70 градусов то шорт.
Угл всегда отмерять от горизонтали.
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В градусах никак нельзя. Потому, что угол зависит от масштаба.
Но. Имеем треугольник. Берем отношение вертикального изменения цены и горизонтального (за сколько баров это произошло) и имеем типа тангенса угла.... Но вообще то это моментум. ))) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
т.е. запомнить ХАЙ или Лой предыдущей свечи (STOPLEVEL):
|
Код: |
... or Low < Ref(L, -1); |
Как ты спросил, так я и ответил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|