Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Arahan писал(а): |
Олег, подскажи пожалуйста. Небольшой вопрос по теме стопов.
Если я хочу, чтобы в дополнение к моему условию, стоп выставлялся еще на 100 пунктов ниже\выше. Достаточно ли просто в ApplyStop добавить + 100?
Вот так:
ApplyStop(stopTypeLoss, stopModePoint, IIf(Sell, Lev2 - C +100 , 100 + C - Lev1), ExitAtStop = 1, Volatile = False); |
Конечно. Только если пункт например 0,1, то и добавлять надо 0,1*100 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
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, а в данном случае это не возможно.
Если уж позарез надо, то придется писать большой цикл с первого по последний бары и вне прогонять этот маленький. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Arahan
Зарегистрирован: 26.06.2010
Сообщения: 47
|
Если будет время, посмотри пожалуйста, что можно сделать. Пытаюсь написать маленькую системку и посмотреть, что это за зверь такой – робот Вроде и правила простые, всё на основе скользящих, а оно вон как сложно оказывается( |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Было время. Посмотрел
Все можно сделать гораздо проще.
В момент пересечения 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
|
Ух ты, спасибо большое) погоняю на тестере, отпишусь. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
Arahan
Зарегистрирован: 26.06.2010
Сообщения: 47
|
Работает отлично, спасибо! Стоп нужно написать так:
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
|
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
|
Так в принципе тоже хорошо получается. Вот только столкнулся с несколькими проблемами. Если я хочу входить по скользящим, а выходить по параболику.
Нужно определить где находится параболик вверху или внизу. А то иногда случается, что заходим в лонг, а параболик вверху. Вот так вроде это можно решить:
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
|
Олег, подскажи пожалуйста, как сделать чтобы в твоем роботе активировались стопы?
Закидываю в него вот такие правила системы:
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
|
А
из кода не убирал?
Я сейчас проверил у себя так
Код: |
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
|
Ничего не убирал, просто скопировал свои правила системы. Сейчас прогнал твой год в бэктестере и в сканере. В тестере показывает выход по уровню стопа(как и нужно), а в сканере показывает выход по закрытию свечи. Тоже самое показывалось и с тем кодом, который я вставляю. Завтра еще на свежую голову попробую погонять. Уже не соображаю ничего)
Олег, а как же добиться, чтобы срабатывало по уровню стопа, а не по закрытию свечи? Я вижу этот момент очень принципиальным, иначе весь смысл стопа пропадает, по крайней мере при работе со скользящими. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ааа. Вот что.
Чуток попозже напишу как сделать чтобы срабатывал по уровню стопа. Это не очень трудно. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В общем так.
В коде после
идут 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
|
Ух ты, спасибо! Попробую разобраться с этим. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
Arahan
Зарегистрирован: 26.06.2010
Сообщения: 47
|
Попробовал потестить. Выдает вот такие ошибки в этих поменянных строчках:
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 |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|