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


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

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

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

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

Вот так:

ApplyStop(stopTypeLoss, stopModePoint, IIf(Sell, Lev2 - C +100 , 100 + C - Lev1), ExitAtStop = 1, Volatile = False);

Конечно. Только если пункт например 0,1, то и добавлять надо 0,1*100 Smile

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


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

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

Arahan писал(а):
Почему-то не работает, вот эта строчка:

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

Ууу, бля. Точно. И не будет работать. Получается, что вразных местах графика разные пределы для for, а в данном случае это не возможно. Smile

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

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



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

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

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


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

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

Было время. Посмотрел Smile
Все можно сделать гораздо проще.
В момент пересечения EMA(Close, 20) и EMA(Close, 9)
фиксируем значение уровня Low и потом в момент входа в позицию смотрим его. Вот код.
Код:

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);

qq = ValueWhen(Cross(EMA(Close, 20), EMA(Close, 9)), Lev);


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

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



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

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

Ух ты, спасибо большое) погоняю на тестере, отпишусь.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Arahan



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

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

Работает отлично, спасибо! Стоп нужно написать так:

ApplyStop(stopTypeLoss, stopModePoint, IIf(Short, qqq - C , C - qq ),
ExitAtStop = 1, Volatile = False);

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

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

Вот несколько мыслей, как это обойти, если сложно выловить на истории где была точка:

Может можно вычислить, скажем, расстояние от -2 второй точки до -1 и считать, что на этом расстоянии появится следующая точка. Конечно это не точно, но на мелком фрейме эту погрешность можно считать за проскальзывание ))

Или считать, что точка была на уровне -1 –ой и на этом уровне и ставить стоп. Как-то так.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

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

Arahan писал(а):

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

А ло закрытия перевернувшей свечи нельзя точно сказать где будет эта точка (касание которой перевернет SAR)
Arahan писал(а):

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

Мы знаем только точку прошлого бара. Текущую не знаем. В этом вся проблема. Если хочешь переворачивайся по прошлой. Это просто.
Типа
Код:

Sell = L < Ref(SAR(0.02, 0.2), -1);
SellPrice = Ref(SAR(0.02, 0.2), -1);

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



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

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

Так в принципе тоже хорошо получается. Вот только столкнулся с несколькими проблемами. Если я хочу входить по скользящим, а выходить по параболику.
Нужно определить где находится параболик вверху или внизу. А то иногда случается, что заходим в лонг, а параболик вверху. Вот так вроде это можно решить:

Buy = IIf (Ref(SAR(0.02, 0.2), -1)<L ,Cross(EMA(Close, 12), EMA(Close,20)),27);

Sell = L < Ref(SAR(0.02, 0.2), -1);

SellPrice = Ref(SAR(0.02, 0.2), -1);

Другая проблема, это если свеча, которая перевернула параболик, не доходит до уровня -1-й точки. То получается непонятный вход на закрытии этой свечи. Нужно как-то заморозить этот уровень, чтобы если параболик уже перевернулся а цена не достигла -1 точки, этот уровень сохранялся. А вот как это сделать, ни как не могу допереть.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Arahan



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

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

Олег, подскажи пожалуйста, как сделать чтобы в твоем роботе активировались стопы?
Закидываю в него вот такие правила системы:

Buy= Cross (EMA(Close, 31), EMA(Close, 40));

Sell= Cross (EMA(Close, 40), EMA(Close, 31));

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);

qq = ValueWhen(Cross(EMA(Close, 31), EMA(Close40)), Lev1 );


Short =Cross (EMA(Close, 40), EMA(Close, 31));

Cover = Cross (EMA(Close, 31), EMA(Close, 40));


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);

qqq = ValueWhen(Cross(EMA(Close, 40), EMA(Close,31)), Lev2 );


ApplyStop(stopTypeLoss, stopModePoint, IIf(Short, qqq - C , C - qq ),
ExitAtStop = 1, Volatile = False);
__________

ApplyStop в тестере игнорируется, происходит просто работа по скользящим.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

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

А
Код:
Equity(1, 0);

из кода не убирал?
Я сейчас проверил у себя так
Код:

Buy = Cross (EMA(Close, 31), EMA(Close, 40));
Sell = 0; //Cross (EMA(Close, 40), EMA(Close, 31));

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);

Short = Cross (EMA(Close, 40), EMA(Close, 31));
Cover = 0; //Cross (EMA(Close, 31), EMA(Close, 40));

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, IIf(Short, abs(C - Lev2), abs(C - Lev1)), ExitAtStop = 1, Volatile = False);
ApplyStop(stopTypeProfit, stopModePoint, 1, ExitAtStop = 1, Volatile = False);

Т.е. совсем убрал выход по пересечению, но добавил выход по профиту. Все хорошо. И входит и выходит....
Один нюанс. Выходит не в момент достижения стопа а в момент открытия следующего бара...

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



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

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

Ничего не убирал, просто скопировал свои правила системы. Сейчас прогнал твой год в бэктестере и в сканере. В тестере показывает выход по уровню стопа(как и нужно), а в сканере показывает выход по закрытию свечи. Тоже самое показывалось и с тем кодом, который я вставляю. Завтра еще на свежую голову попробую погонять. Уже не соображаю ничего)

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


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

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

Ааа. Вот что.
Чуток попозже напишу как сделать чтобы срабатывал по уровню стопа. Это не очень трудно. Smile

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


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

СообщениеДобавлено: Ср Окт 13, 2010 8:24 am Ответить с цитатой Вернуться к началу

В общем так.
В коде после
Код:
Equity(1, 0);

идут 4 строки. Измени их на эти
Код:

Buy = LastValue(Ref(Buy, -1));
Sell = LastValue(IIf(Sell > 1.1 AND Sell < 4.9, Sell, Ref(Sell, -1));
Short = LastValue(Ref(Short, -1));
Cover = LastValue(IIf(Cover > 1.1 AND Cover < 4.9, Cover, Ref(Cover, -1));

там 2 не меняются где Buy и Short, а две другие изменяться. И стопы должны начать срабатывать без задержки.

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



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

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

Ух ты, спасибо! Попробую разобраться с этим.
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Arahan



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

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

Попробовал потестить. Выдает вот такие ошибки в этих поменянных строчках:

Error 31. Syntax error, expecting <list of tokens>
Occurs The syntax is incorrect because the parser expects specifiec tokens and finds something else.

А так же в коде в который “лучше руками не лазить” там где условия для sell и cover:

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
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen