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



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

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

Олег, а как описать пирамидинг для такого случая. Ставим заявку на покупку, если цена отошла от параболика на заданное количество пунктов. Далее входим через каждые 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

СообщениеДобавлено: Пн Окт 26, 2015 12:32 am Ответить с цитатой Вернуться к началу

Код:
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

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

Привет, Олег ! Как сделать, чтобы значения запоминались только в период 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

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

Если я правильно понял вопрос то так.
Код:
SAR_0L = ValueWhen( Cross(Parab, O) AND TradeTime, Ref(Parab, -1));

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



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

СообщениеДобавлено: Сб Окт 31, 2015 1:52 pm Ответить с цитатой Вернуться к началу

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

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

Наверное так.
Код:

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

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

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

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

Ааа, ну да, точно.
Тогда так
Код:
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

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

Не, и это не правильно...

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


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

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

Во, кажись так
Код:
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

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

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

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

Олег! А у тебя есть сшитая база фьюча на РТС (Ri) на минутках с 2009 года ? Я скачал себе с Финама. Тестирую код на этой базе, но что-то он мне граали рисует. Думаю, не кривая ли база. Я бы тебе в личку код прислал, прогнал бы его у себя, если не сложно. Правда, стратегия очень примитивна.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Привет. Нету у меня фьюча склеенного. Не тестируй на склеенном. Тестируй на кусках...
Кроме того мне в ближайшую неделю будет совсем не до этого...

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



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

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

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

Допустим, нужно написать следующую стратегию. Есть 2 МА, быстрая и медленная. Когда быстрая пересекает медленную, находим HighestHigh за (допустим) 10 последних баров и устанавливаем на этом уровне стоп, который будет действовать в течение 5 баров с момента пересечения скользящих. Если в течение 5 баров Close пересечет эту линию, то входим на Open следующего бара...
Дальше нужно будет ввести несколько разных стопов, но это уже потом.

Вопрос в том, что в TradeStation сделать это элементарно, а как здесь?

И если нет функции MarketPosition, то как вообще управлять позицией? Допустим, у меня есть временный стоп, или я хочу менять стопы в зависимости от времени нахождения в позиции. Опять же, в TradeStation это делается элементарно, а здесь вообще это можно сделать?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Интересно, а каков должен быть ответ?
Да в Ами это тоже можно. Wink

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen