Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
Автор |
Сообщение |
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Олег, а как описать пирамидинг для такого случая. Ставим заявку на покупку, если цена отошла от параболика на заданное количество пунктов. Далее входим через каждые 100 пунктов, если цена идет вниз. Начальная позиция 1 лот, максимально 4 лота. Искал по слову "пирамидинг", читал, но что-то не догоняю. Вот стандартные условия на вход:
Код: |
Parab = SAR(0.02,0.2 );
SAR_100L = ValueWhen( Cross(Parab, O), Parab);
SAR_0L = ValueWhen( Cross(Parab, O), Ref(Parab, -1));
SAR_100 =ValueWhen( Cross(O,Parab), Ref(Parab, -1));
SAR_0 = ValueWhen( Cross(O,Parab), Parab);
SetPositionSize( 4, spsShares );
range_buy=Optimize("buy",300,300,700,100);
BuyLevel = SAR_0L-range_buy;
Buy = Cross(Ref(BuyLevel,-1),L) AND Ref(Parab > C, -1);
BuyPrice = 10*ceil(0.5+BuyLevel/10);
Sell = Cross(O,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C;
|
И можно как-то сделать пирамидинг не с количеством лотов, а с размером позиции через SetPositionSize(100, spsPercentOfEquity). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
Step = 1;// через сколько добавляемся
Parab = SAR(0.02,0.2 );
SAR_100L = ValueWhen( Cross(Parab, O), Parab);
SAR_0L = ValueWhen( Cross(Parab, O), Ref(Parab, -1));
SAR_100 =ValueWhen( Cross(O,Parab), Ref(Parab, -1));
SAR_0 = ValueWhen( Cross(O,Parab), Parab);
range_buy=Optimize("buy",300,300,700,100);
BuyLevel = SAR_0L-range_buy;
Buy = Cross(Ref(BuyLevel,-1),L) AND Ref(Parab > C, -1);
BuyPrice = 10*ceil(0.5+BuyLevel/10);
Sell = Cross(O,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C;
pos = Flip(Buy, Sell);
EntryPrice = StepNum = 0;
LotS = 1; // сайз первого входа
for(i = 1; i < BarCount; i++)
{
if(pos[i] == 0)
{
if(Buy[i])
{
EntyPrice = C[i];
StepNum = 0;
}
}
else
{
if(L[i] < EntyPrice - Step)
{
if(StepNum < 3)
{
Buy[i] = sigScaleIn;
BuyPrice = Min(O[i], EntyPrice - step);
EntyPrice = EntyPrice - Step;
LotS[i] = 1; // каким сайзом добавляемся
StepNum = StepNum++;
}
}
}
}
SetPositionSize( LotS, spsShares ); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Привет, Олег ! Как сделать, чтобы значения запоминались только в период TradeTime в этом коде:
Код: |
TradeTime = TimeNum() >= 110000 AND TimeNum() <= 184500;
SAR_0L = ValueWhen( Cross(Parab, O), Ref(Parab, -1));
SAR_100L = ValueWhen( Cross(Parab, O), Parab);
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если я правильно понял вопрос то так.
Код: |
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1)); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Если я правильно понял вопрос то так.
Код: |
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1)); |
|
Тьфу, блин. А я TradeTime за скобками пишу. Еще вопрос. Параболик теперь запоминается по времени как нужно, но если с прошлого дня перерисован уровень входа BuyLevel, то вход все равно входит. Вот на картинке видно. Параболик перескочил ровно на открытии в 10-00,т.е. значение параболика у нас еще нет в этом дне, но BuyLevel (зеленая горизонтальная линия) висит с прошлого дня и получаем лонг. А его тут быть не должно. Код у меня такой
Код: |
TradeTime = TimeNum() >= 100200 AND TimeNum() <= 184500;
Parab = SAR( 0.02, 0.2 );
SetPositionSize( 5, spsShares );
range_buy=Optimize("buy",700,500,750,50);
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1));
BuyLevel = SAR_0L-range_buy;
Buy = Cross(Ref(BuyLevel,-1),L) AND Ref(Parab > C, -1) AND TradeTime;
BuyPrice = 10*ceil(0.5+BuyLevel/10);
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Наверное так.
Код: |
TradeTime = TimeNum() >= 100200 AND TimeNum() <= 184500;
Parab = SAR( 0.02, 0.2 );
SetPositionSize( 5, spsShares );
range_buy=Optimize("buy",700,500,750,50);
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1));
BuyLevel = SAR_0L-range_buy;
BuyCond = Flip(Cross(Parab, O), Cross(O, Parab));
Buy = Cross(Ref(BuyLevel,-1),L) AND Ref(Parab > C, -1) AND TradeTime AND BuyCond;
BuyPrice = 10*ceil(0.5+BuyLevel/10);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Наверное так.
Код: |
TradeTime = TimeNum() >= 100200 AND TimeNum() <= 184500;
Parab = SAR( 0.02, 0.2 );
SetPositionSize( 5, spsShares );
range_buy=Optimize("buy",700,500,750,50);
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1));
BuyLevel = SAR_0L-range_buy;
BuyCond = Flip(Cross(Parab, O), Cross(O, Parab));
Buy = Cross(Ref(BuyLevel,-1),L) AND Ref(Parab > C, -1) AND TradeTime AND BuyCond;
BuyPrice = 10*ceil(0.5+BuyLevel/10);
|
|
Нет, BuyCond не помогает. Все равно открывает сделку в лонг. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ааа, ну да, точно.
Тогда так
Код: |
TradeTime = TimeNum() >= 100200 AND TimeNum() <= 184500;
Parab = SAR( 0.02, 0.2 );
SetPositionSize( 5, spsShares );
range_buy=Optimize("buy",700,500,750,50);
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1));
BuyLevel = SAR_0L-range_buy;
Buy1 = Cross(Ref(BuyLevel,-1),L) AND Ref(Parab > C, -1) AND TradeTime;
BuyCond = Flip(Buy1, Cross(O, Parab));
Buy = Buy1 AND BuyCond;
BuyPrice = 10*ceil(0.5+BuyLevel/10); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Не, и это не правильно... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Во, кажись так
Код: |
NewDay = Day() != Ref(Day(), -1);
TradeTime = TimeNum() >= 100200 AND TimeNum() <= 184500;
Parab = SAR( 0.02, 0.2 );
SetPositionSize( 5, spsShares );
range_buy=Optimize("buy",700,500,750,50);
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1));
BuyLevel = SAR_0L-range_buy;
BuyCond = BarsSince(Cross(Parab, O)) < BarsSince(NewDay);
Buy = Cross(Ref(BuyLevel,-1),L) AND Ref(Parab > C, -1) AND TradeTime AND BuyCond;
BuyPrice = 10*ceil(0.5+BuyLevel/10); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
000 писал(а): |
Во, кажись так
Код: |
NewDay = Day() != Ref(Day(), -1);
TradeTime = TimeNum() >= 100200 AND TimeNum() <= 184500;
Parab = SAR( 0.02, 0.2 );
SetPositionSize( 5, spsShares );
range_buy=Optimize("buy",700,500,750,50);
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1));
BuyLevel = SAR_0L-range_buy;
BuyCond = BarsSince(Cross(Parab, O)) < BarsSince(NewDay);
Buy = Cross(Ref(BuyLevel,-1),L) AND Ref(Parab > C, -1) AND TradeTime AND BuyCond;
BuyPrice = 10*ceil(0.5+BuyLevel/10); |
|
Спасибо !!! В этой строчке только развернул перескок параболика
Код: |
BuyCond = BarsSince(Cross(O,Parab)) < BarsSince(NewDay);
|
Теперь считает правильно. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
home30
Зарегистрирован: 17.06.2015
Сообщения: 105
|
Олег! А у тебя есть сшитая база фьюча на РТС (Ri) на минутках с 2009 года ? Я скачал себе с Финама. Тестирую код на этой базе, но что-то он мне граали рисует. Думаю, не кривая ли база. Я бы тебе в личку код прислал, прогнал бы его у себя, если не сложно. Правда, стратегия очень примитивна. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Привет. Нету у меня фьюча склеенного. Не тестируй на склеенном. Тестируй на кусках...
Кроме того мне в ближайшую неделю будет совсем не до этого... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
rupiter
Зарегистрирован: 16.09.2013
Сообщения: 75
|
Здравствуйте,
Допустим, нужно написать следующую стратегию. Есть 2 МА, быстрая и медленная. Когда быстрая пересекает медленную, находим HighestHigh за (допустим) 10 последних баров и устанавливаем на этом уровне стоп, который будет действовать в течение 5 баров с момента пересечения скользящих. Если в течение 5 баров Close пересечет эту линию, то входим на Open следующего бара...
Дальше нужно будет ввести несколько разных стопов, но это уже потом.
Вопрос в том, что в TradeStation сделать это элементарно, а как здесь?
И если нет функции MarketPosition, то как вообще управлять позицией? Допустим, у меня есть временный стоп, или я хочу менять стопы в зависимости от времени нахождения в позиции. Опять же, в TradeStation это делается элементарно, а здесь вообще это можно сделать? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Интересно, а каков должен быть ответ?
Да в Ами это тоже можно. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|