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



Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань

СообщениеДобавлено: Чт Апр 30, 2009 1:48 pm Ответить с цитатой Вернуться к началу

Олег, че то я запутался малость))
Тестирую стратегию
Условия на вход два: или одно, или второе
ставлю первоначальный стоп-лосс 1ATR от цены покупки
плюс потом начинаю вести трейлинг
и если сделка вылетела по первоначальному стопу, то
система повторно не заходит, пока не будет реализован трейлинг
ломал голову, как поправить код, но ничего не придумал
надеюсь на твою помощь Smile
Код:

pos = 0;
Buy=Cond1 OR Cond2;
Sell=0;
ApplyStop(0,2,ATR(15),1);

for(i = 1; i<BarCount; i++)// пробегаем все бары с 1 по текущий с шагом в 1 бар
{
  if (Buy[i-1]) // если совершилась покупка  на пред.баре
  {
  pos[i] = 1; // присваиваем массиву pos значение 1
  }
  else
  {pos[i]=pos[i-1]; // иначе присваиваем массиву pos значение этого массива на пред.баре
  }

// уровень стопа
   if (pos[i] == 1) // если значение массива pos эквивалентно 1
   {
      Buy[i] = 0; // массиву buy присваиваем значение 0
      stop[i] = L[i]; // массиву стоп присваиваем значение лоу текущего бара
      if(stop[i] < stop[i-1]) // если значение массива стоп на тек.баре меньше значения стопа на пред.баре
      {
         stop[i]=stop[i-1]; // присваиваем предыдущее значение стопа
      }
   }
   
   // активизация стопа

   if(pos[i] == 1) // если значение массива pos эквивалентно 1
   {
      if(C[i] < stop[i]) // если клоуз текущего бара ниже значения стопа
      {
         Sell[i] = 1; // производим продажу
         SellPrice[i]=C[i]; // цена продажи равна цене закрытия текущего бара
         pos = 0; // в массив pos записываем значение 0
      }
   }
   else
   {
      Sell[i]=0; // иначе , продажу не производим
   }
}

_________________
per aspera ad astra...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Апр 30, 2009 11:35 pm Ответить с цитатой Вернуться к началу

А потому, что в цикле ты совсем не учитываешь срабатывание ApplyStop(0,2,ATR(15),1); и блокируешь покупки пока по циклу система в позе

if (pos[i] == 1) // если значение массива pos эквивалентно 1
{
Buy[i] = 0; // массиву buy присваиваем значение 0
...
Проще всего после ApplyStop(0,2,ATR(15),1); поставить Equity(1); и в цикле сделать проверку срабатывания этого стопа. Когда он сработает в массив Sell запишется 2
Типа если Sell[i] == 2 то обнуляем pos[i]..

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пт Май 01, 2009 1:17 pm Ответить с цитатой Вернуться к началу

Не надо так и ладно.

_________________
Юра

Последний раз редактировалось: commenced (Сб Май 02, 2009 8:01 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

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

Чёта смотрел - смотрел и непонял. При чем тут этот код?

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


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

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

Вот еще что. Для реализации трейлинга по прошлому лою цикл писать совсем не обязательно. Можно просто написать
Sell = L < Ref(L, -1);
и при этом
SellPrice = Ref(L, -1);

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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Сб Май 02, 2009 8:03 am Ответить с цитатой Вернуться к началу

000 писал(а):
Чёта смотрел - смотрел и непонял. При чем тут этот код?


рабочая болванка.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
jarikk



Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань

СообщениеДобавлено: Пн Май 04, 2009 10:54 am Ответить с цитатой Вернуться к началу

000 писал(а):
Вот еще что. Для реализации трейлинга по прошлому лою цикл писать совсем не обязательно. Можно просто написать
Sell = L < Ref(L, -1);
и при этом
SellPrice = Ref(L, -1);

трейлинг не по прошлому лою
здесь смысл в том, что ведем лоу после покупки
если лоу выше, чем предыдущий, то уровень стопа передвигаем на это лоу
если лоу ниже, чем предыдущий лоу, то оставляем предыдущий уровень
а выход из лонга осуществляется при закрытии бара ниже уровня стопа
и цена продажи это клоуз свечи

_________________
per aspera ad astra...
Посмотреть профиль Отправить личное сообщение
jarikk



Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань

СообщениеДобавлено: Пн Май 04, 2009 11:15 am Ответить с цитатой Вернуться к началу

вот, завел в код дополнительное условие
на первоначальный стоп
но ошибка в массивах и переменных
как поправить, я не знаю Sad
я только начал изучать афл
Код:

Buy=Cond1 OR Cond2;
Sell=0;
for(i = 1; i<BarCount; i++)// пробегаем все бары с 1 по текущий с шагом в 1 бар
{
  if (Buy[i-1]) // если совершилась покупка  на пред.баре
  {
  pos[i] = 1; // присваиваем массиву pos значение 1
  stoplevel=BuyPrice-Ref(ATR(15),-1);
  }
  else
  {pos[i]=pos[i-1]; // иначе присваиваем массиву pos значение этого массива на пред.баре
  }

// уровень стопа
   if (pos[i] == 1) // если значение массива pos эквивалентно 1
   {
      Buy[i] = 0; // массиву buy присваиваем значение 0
      stop[i] = L[i]; // массиву стоп присваиваем значение лоу текущего бара
      if(stop[i] < stop[i-1]) // если значение массива стоп на тек.баре меньше значения стопа на пред.баре
      {
         stop[i]=stop[i-1]; // присваиваем предыдущее значение стопа
      }
   }
   
   // активизация стопа

   if(pos[i] == 1) // если значение массива pos эквивалентно 1
   {
      if(C[i] < stop[i] ) // если клоуз текущего бара ниже значения стопа
      {
         Sell[i] = 1; // производим продажу
         SellPrice[i]=C[i]; // цена продажи равна цене закрытия текущего бара
         pos = 0; // в массив pos записываем значение 0
      }
      if(C[i]<stoplevel)
      {
         Sell[i] = 1;
         SellPrice[i]=stoplevel;
         pos = 0; // в массив pos записываем значение 0
         stoplevel=0;
      }
   }
   else
   {
      Sell[i]=0; // иначе , продажу не производим
   }
}
[/code]

_________________
per aspera ad astra...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Май 04, 2009 11:59 am Ответить с цитатой Вернуться к началу

Типа так
Код:

Buy = Cross(C, MA(C, 20));
Sell = 0;
Pos[0] = 0;
st = ATR(15);

for(i = 1; i < BarCount; i++)// пробегаем все бары с 1 по текущий с шагом в 1 бар
{
  if (Buy[i-1]) // если совершилась покупка  на пред.баре
  {
      pos[i] = 1; // присваиваем массиву pos значение 1
      stoplevel = BuyPrice[i] - st[i-1];
  }
  else
  {
      pos[i]=pos[i-1]; // иначе присваиваем массиву pos значение этого массива на пред.баре
  }

// уровень стопа
   if (pos[i] == 1) // если значение массива pos эквивалентно 1
   {
      Buy[i] = 0; // массиву buy присваиваем значение 0
      stop[i] = L[i]; // массиву стоп присваиваем значение лоу текущего бара
      if(stop[i] < stop[i-1]) // если значение массива стоп на тек.баре меньше значения стопа на пред.баре
      {
         stop[i]=stop[i-1]; // присваиваем предыдущее значение стопа
      }
   }
   
   // активизация стопа

   if(pos[i] == 1) // если значение массива pos эквивалентно 1
   {
      if(C[i] < stop[i] ) // если клоуз текущего бара ниже значения стопа
      {
         Sell[i] = 1; // производим продажу
         SellPrice[i] = C[i]; // цена продажи равна цене закрытия текущего бара
         pos = 0; // в массив pos записываем значение 0
      }
      if(C[i] < stoplevel)
      {
         Sell[i] = 1;
         SellPrice[i] = stoplevel;
         pos = 0; // в массив pos записываем значение 0
         stoplevel = 0;
      }
   }
   else
   {
      Sell[i] = 0; // иначе , продажу не производим
   }
}

Ошибка была тут
stoplevel=BuyPrice-Ref(ATR(15),-1);

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



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

СообщениеДобавлено: Вс Май 17, 2009 9:34 am Ответить с цитатой Вернуться к началу

Пробую применить стопы (см.файл).
Image
В определенные моменты начинается
постоянная серия Short-Cover. Где-то не догоняю.
Как надо правильно сделать? Подскажите пожалуйста.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вс Май 17, 2009 4:37 pm Ответить с цитатой Вернуться к началу

Teema писал(а):
Пробую применить стопы (см.файл).
Image
В определенные моменты начинается
постоянная серия Short-Cover. Где-то не догоняю.
Как надо правильно сделать? Подскажите пожалуйста.


Система торгует по заложенным правилам, просто стоп близок у тебя. поэтому выбивает, а так как условие Short = L <= ShortLevel; соблюдено ты опять в шорте. поэтому когда цена ниже ShortLeve у тебя череда Short-Cover, когда выше уровня лонга buy-sell или вопрос не о этом.

И еще ты не правильно расчитал цены buyprice shortprice.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Teema



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

СообщениеДобавлено: Вс Май 17, 2009 5:27 pm Ответить с цитатой Вернуться к началу

Поясню смысл проблемы.
Выше, Олег, предложил вариант трейлинг-стопа
для позиции лонг. Я попробовал его использовать и для
шорта. Оказалось, что для лонга всё работает, а для шорта
нет. Crying or Very sad Смысл трейлинга для шорта (как я думаю):
уровень стопа находится на минимальном Hi предыдущих баров
с момента открытия позиции ШОРТ и если этот Hi понижается
то за ним перемещается уровень стопа. Если Закрытие, на каком-либо
баре выше уровня стопа, уже например сдвинувшегося ниже, то выходим на этом закрытии.
В моем варианте лонг отрабатывает как задумал Олег.
А шорт, если для него соответствуют уровни, открывается, а на следующем баре закрываются, потом снова открывается, а на следующем баре закрывается. Стоп там не близко, а как задумывалось. Только работает не так.


Последний раз редактировалось: Teema (Пт Июн 19, 2009 11:59 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вс Май 17, 2009 6:06 pm Ответить с цитатой Вернуться к началу

Teema писал(а):
Поясню смысл проблемы.
Выше, Олег, предложил вариант трейлинг-стопа
для позиции лонг. Я попробовал его использовать и для
шорта.


Ну использовал ты его для шорта , а проблема то в чем. Кстати та часть стопа которая расчитывается не по h и l, зависит от atr в данном коде ни несет никакую нагрузку т.к. более чуствительная часть срабатывает раньше в 100% случаев.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Teema



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

СообщениеДобавлено: Вс Май 17, 2009 6:19 pm Ответить с цитатой Вернуться к началу

Проверил условия стопа. Заменил ATR. т.е. значение st[i] на 0.1% от уровня входа. Стало все понятнее. Заменил условия покупки-продажи.
Но шорт исправить не могу.
SOS! Surprised
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вс Май 17, 2009 6:52 pm Ответить с цитатой Вернуться к началу

Teema писал(а):
Проверил условия стопа. Заменил ATR. т.е. значение st[i] на 0.1% от уровня входа. Стало все понятнее. Заменил условия покупки-продажи.
Но шорт исправить не могу.
SOS! Surprised


Это что такое?

Код:

Buy = Ref(C,-1) >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice    = Max(O, BuyLevel);// по цене уровня покупки
Short = Ref(C,-1)<= ShortLevel;
ShortPrice  = Min(O, ShortLevel);


либо так

Buy = H >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = Max(O, BuyLevel);// по цене уровня покупки
Short = L<= ShortLevel;
ShortPrice = Min(O, ShortLevel);

либо так

Buy = Ref(C,-1) >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = O;// по цене уровня покупки
Short = Ref(C,-1)<= ShortLevel;
ShortPrice = O;

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen