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



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

СообщениеДобавлено: Чт Июл 29, 2010 11:39 pm Ответить с цитатой Вернуться к началу

Привет, Олег! Есть ли какие-то мысли, по реализации этого стопа?
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Пт Июл 30, 2010 12:01 am Ответить с цитатой Вернуться к началу

По простому похоже никак нельзя. Стандартно такой функции нет. Вероятно потому, что может так получится, что более низкого минимума на истории не найдется совсем..
Если например проверить штук 10 баров и взять из них первый более низкий, а если такого нет, то какую то цифру, то это можно (хотя тоже не просто).

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



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

СообщениеДобавлено: Пт Июл 30, 2010 12:17 am Ответить с цитатой Вернуться к началу

Поздравляю с трехтысячным сообщением))

Ну всю историю и не надо наверное. Обычно хватает 5-8 баров. Один из них почти наверняка будет ниже. Вот только иногда бывает, что у свечи на которой зашли, очень большая тень… Вот тогда и нужно тестировать большее количество баров. Или как вариант, можно в случае отсутствия самого низкого бара, ставить стоп на лоу этой свечи. Или, как ты правильно заметил, при отсутствии самого низкого бара, ставить стоп, например на 500 пунктов ниже. Тоже хорошая идея…

А ни как нельзя вот эту строчку как-то зациклить?

Cond1= IIf ( Ref(High, -1) < Ref(High, 1), Ref(High, -2)-Close, Ref(High, -1)- Close);

Как я писал, это то, что нужно, вот только продолжить бы как-то…
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Пт Июл 30, 2010 12:37 am Ответить с цитатой Вернуться к началу

Спасибо за поздравление. Афигеть я тут понаписал.... Laughing
Я напишу такой код. Там именно циклить надо...
Только вот скорее всего не раньше воскресенья... Постараюсь раньше, но не обещаю.

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


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

СообщениеДобавлено: Пт Июл 30, 2010 3:50 am Ответить с цитатой Вернуться к началу

Вот собственно ближайший уровень Low который ищется за 10 баров
Код:

Lev = 0;
for(i = 1; i < 10; i++)
{
   Lev = IIf(Lev == 0, IIf(Ref(L, -i) < L, Ref(L, -i), 0), Lev);
}
Lev = IIf(Lev == 0, L, Lev);

Plot(C, "", colorBlack, styleCandle);
Plot(Lev, "", colorRed);

Для стопа будет так
Код:

Lev = 0;
for(i = 1; i < 10; i++)
{
   Lev = IIf(Lev == 0, IIf(Ref(L, -i) < L, Ref(L, -i), 0), Lev);
}
Lev = IIf(Lev == 0, L, Lev);
ApplyStop(stopTypeLoss, stopModePoint, C - Lev, ExitAtStop = 1, Volatile = False);

Это для лонга

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



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

СообщениеДобавлено: Пт Июл 30, 2010 7:25 am Ответить с цитатой Вернуться к началу

Спасибо большое, Олег! Попробую потестить пака с этим кодом, посмотрю, что получится.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Arahan



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

СообщениеДобавлено: Вт Сен 14, 2010 12:57 pm Ответить с цитатой Вернуться к началу

Код работает как часы. Спасибо еще раз!

Пытаюсь прикрутить его одновременно к лонгу и к шорту, пишу вот так:

Buy= Cross(EMA(Close, 17), EMA(Close, 30));

Sell= Cross (EMA(Close, 30), EMA(Close, 17));

Lev = 0;
for(i = 1; i < 10; i++)
{
Lev = IIf(Lev == 0, IIf(Ref(L, -i) < L, Ref(L, -i), 0), Lev);
}
Lev = IIf(Lev == 0, L, Lev);

ApplyStop(stopTypeLoss, stopModePoint, C - Lev, ExitAtStop = 1, Volatile = False);

Short = Cross (EMA(Close, 30), EMA(Close, 17));

Cover = Cross (EMA(Close, 17), EMA(Close, 30));

Lev = 0;
for(i = 1; i < 10; i++)
{
Lev = IIf(Lev == 0, IIf(Ref(H, -i) > H, Ref(H, -i), 0), Lev);
}
Lev = IIf(Lev == 0, H, Lev);

ApplyStop(stopTypeLoss, stopModePoint, Lev - C, ExitAtStop = 1, Volatile = False);

Работает правильно, но только с шортом. Из лонга систему выбивает на следующей свече.

Подскажите, пожалуйста, что я не так делаю?
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Вт Сен 14, 2010 10:16 pm Ответить с цитатой Вернуться к началу

Уже подзабыл тему. По новому разбираться сейчас не хочу.
Попробуй так
Код:

Buy= Cross(EMA(Close, 17), EMA(Close, 30));

Sell= Cross (EMA(Close, 30), EMA(Close, 17));

Lev1 = 0;
for(i = 1; i < 10; i++)
{
Lev1 = IIf(Lev1 == 0, IIf(Ref(L, -i) < L, Ref(L, -i), 0), Lev1);
}
Lev1 = IIf(Lev1 == 0, L, Lev1);

ApplyStop(stopTypeLoss, stopModePoint, C - Lev1, ExitAtStop = 1, Volatile = False);

Short = Cross (EMA(Close, 30), EMA(Close, 17));

Cover = Cross (EMA(Close, 17), EMA(Close, 30));

Lev2 = 0;
for(i = 1; i < 10; i++)
{
Lev2 = IIf(Lev2 == 0, IIf(Ref(H, -i) > H, Ref(H, -i), 0), Lev2);
}
Lev2 = IIf(Lev2 == 0, H, Lev2);

ApplyStop(stopTypeLoss, stopModePoint, Lev2 - C, ExitAtStop = 1, Volatile = False);

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



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

СообщениеДобавлено: Ср Сен 15, 2010 2:08 pm Ответить с цитатой Вернуться к началу

Не помогло. Я думаю дело не в цикле. Думаю, я что-то не понимаю в работе стопов.

Вот на более простом примере, ситуация в тестере повторяется, лонг не работает а шорт работает как надо.

Buy= Cross (EMA(Close, 9), EMA(Close, 20));

Sell= Cross (EMA(Close, 20), EMA(Close, 9));


ApplyStop(stopTypeLoss, stopModePoint, Close - Ref(Low, -1), ExitAtStop = 1, Volatile = False);// стоп на предыдущей свече



Short =Cross (EMA(Close, 20), EMA(Close, 9));

Cover = Cross (EMA(Close,9), EMA(Close, 20));

ApplyStop(stopTypeLoss, stopModePoint, Ref(High, -1)- Close, ExitAtStop = 1, Volatile = False);// стоп на предыдущей свече
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Ср Сен 15, 2010 3:43 pm Ответить с цитатой Вернуться к началу

Ааа. Вот что.
ApplyStop(stopTypeLoss... должен быть только один в системе.
Тестер учитывает только последний. Надо написать так
ApplyStop(stopTypeLoss, stopModePoint, IIf(Buy, ..., ...), ExitAtStop = 1, Volatile = False);

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



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

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

Олег, подскажи пожалуйста. Я написал вот такой код:


Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-1) AND Cross(EMA(Close, 25), EMA(Close, 15)) ;

Cover = Cross (EMA(Close,15), EMA(Close, 25));

Lev2 = 0;
for(i = 1; i < 10; i++)
{
Lev2 = IIf(Lev2 == 0, IIf(Ref(H, -i) > Ref(H,-1), Ref(H, -i), 0), Lev2);
}
Lev2 = IIf(Lev2 == 0, H, Lev2);

ApplyStop(stopTypeLoss, stopModePoint, Lev2 - C , ExitAtStop = 1, Volatile = False);



Суть в следующем. Чтобы войти в позицию, по пересечению 25 и 15 периодных скользящих, должно быть выполнено условие - за одну свечу до пересечения (25 и 15 периодных)должны были пересечься 20 и 9 периодные.


Тот цикл для стопа который написал ты:
Lev2 = 0;
for(i = 1; i < 10; i++)
{
Lev2 = IIf(Lev2 == 0, IIf(Ref(H, -i) > H, Ref(H, -i), 0), Lev2);
}
Lev2 = IIf(Lev2 == 0, H, Lev2);
ApplyStop(stopTypeLoss, stopModePoint, Lev2 - C, ExitAtStop = 1, Volatile = False);

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



Я чуть-чуть его переделал и хочу, чтобы цикл начинал искать свечу с более высоким хаем, не с той свечи где мы зашли в позицию, а с той свечи где выполнилось первое условие “””Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-1)”””

Вроде бы в том коде, что написал я, это получилось , но такое ощущение, что я фигню написал)).

Изначально я хотел написать, чтобы первое условие не теряло силу в течении -5 свечей и цикл поиска свечи, начинался в зависимости от первого условия.

То есть Условие входа в позу должно выглядеть как-то так:

Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-1) AND Cross(EMA(Close, 25), EMA(Close, 15))
OR Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-2) AND Cross(EMA(Close, 25), EMA(Close, 15))
OR Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-3) AND Cross(EMA(Close, 25), EMA(Close, 15))
OR Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-4) AND Cross(EMA(Close, 25), EMA(Close, 15))
OR Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-5) AND Cross(EMA(Close, 25), EMA(Close, 15));

Но ни как не получается написать цикл для стопа для всех пяти условий. Если не трудно подскажи, как это сделать.
Надеюсь ты хоть что-то понял из моей писанины)))
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Вт Сен 21, 2010 4:25 pm Ответить с цитатой Вернуться к началу

Arahan писал(а):


То есть Условие входа в позу должно выглядеть как-то так:

Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-1) AND Cross(EMA(Close, 25), EMA(Close, 15))
OR Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-2) AND Cross(EMA(Close, 25), EMA(Close, 15))
OR Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-3) AND Cross(EMA(Close, 25), EMA(Close, 15))
OR Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-4) AND Cross(EMA(Close, 25), EMA(Close, 15))
OR Short = Ref (Cross(EMA(Close, 20), EMA(Close, 9)),-5) AND Cross(EMA(Close, 25), EMA(Close, 15));

Подобные вещи проще делать функцией hold( EXPRESSION, periods )
"замораживаешь" первоначальный сигнал и ждешь второй. Типа так
Код:

Short = hold( Cross(EMA(Close, 20), EMA(Close, 9)), 5 )  AND Cross(EMA(Close, 25), EMA(Close, 15));

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


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

СообщениеДобавлено: Вт Сен 21, 2010 4:30 pm Ответить с цитатой Вернуться к началу

Теперь по поводу цикла. Собственно надо изменить границы цикла в зависимости от того как давно было выполнено первое условие
Для этого удобнее воспользоваться функцией BarsSince()
Код:

qq = BarsSince(Cross(EMA(Close, 20), EMA(Close, 9)))

Lev = 0;
for(i = qq; i < 10 + qq; i++)
{
   Lev = IIf(Lev == 0, IIf(Ref(L, -i) < L, Ref(L, -i), 0), Lev);
}
Lev = IIf(Lev == 0, L, Lev);

Вроде так.

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



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

СообщениеДобавлено: Ср Сен 22, 2010 12:28 pm Ответить с цитатой Вернуться к началу

Почему-то не работает, вот эта строчка:

for(i = qq; i < 10 + qq; i++)

выдает ошибку:

Error 6. Condition in IF, WHILE, FOR statements has to be Numeric or Boolean type. You can not use array here, please use [] (array subscript operator) to access array elements
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Arahan



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

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

Олег, подскажи пожалуйста. Небольшой вопрос по теме стопов.

Если я хочу, чтобы в дополнение к моему условию, стоп выставлялся еще на 100 пунктов ниже\выше. Достаточно ли просто в ApplyStop добавить + 100?

Вот так:

ApplyStop(stopTypeLoss, stopModePoint, IIf(Sell, Lev2 - C +100 , 100 + C - Lev1), ExitAtStop = 1, Volatile = False);
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen