Автор |
Сообщение |
VladimirN
Зарегистрирован: 07.11.2009
Сообщения: 49
|
Есть в Ами хорошая функция - ApplyStop(stopTypeTrailing, ...
Включаем ее на 300 пунктов, входим в лонг и у нас появляется стоп в 300 пунктах ниже входа. А когда цена идет вверх - стоп постепенно подтягивается вверх за ней. До срабатывания, когда он командует "Sell" - закрыть лонг.
Но этой функцией, как я понял, можно подтягивать цену закрытия ( в данном случае - цену продажи) - только снизу входа. А мне надо еще и сверху. Скользящий тэйк-профит.
Как сделать такой же подтягивающийся Take Profit ? Причем подтягивающийся ближе к цене, если цена уходит от него. Ну и пусть, что такое подтягивание уменьшит профит при срабатывании - главное выйти.
Должно быть так. Вошли в лонг, и включен некий (несуществующий пока) Stop-TakeProfit-Trailing, стартующий в 300 пунктах выше цены входа. Если цена сразу идет вверх навстречу этому Тэйку и дотрагивается до него - он срабатывает, закрывая позицию с профитом в 300 пунктов. Хорошо.
А вот цена не идет вверх, а падает на новый Лоу, ниже входа в позицию (до стоп-лосса не достает). Скользящий тэйк-профит должен переместится вниз. Стать на меньшую цену. В 300 пунктах выше нового Лоу. Если цена развернется и поднимется к стопу - он сработает, закрыв Лонг с неким профитом (а может и с убытком). Но закроет. И вверх подниматься не будет.
Вобщем, нужен скользящий стоп-приказ на продажу -SellStop-Trailing. Как закодировать? Пока без наворотов типа Параболика, или АТР... Подскажите пожалуйста, или дайте ссылку где почитать.
Заранее спасибо.
P.S. В СмартТрейде такие стопы встроены и они включаются независимо - есть у тебя лонг или шорт. Ими даже можно входить в позицию, а не выходить. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По простому не получится. В принципе уровень профита в ApplyStop(stopTypeProfit, ..) можно менять если установить опцию Volatile = TRUE.
Соответственно можно сделать типа следящий. Но не просто... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
VladimirN
Зарегистрирован: 07.11.2009
Сообщения: 49
|
[quote="000"]По простому не получится.
Соответственно можно сделать типа следящий. [/quote]
Беглый поиск в библиотеке AFL по словам TRAILING PROFIT STOP нашел некую формулу. Она большая, я подсократил все что касается шортов и статистики... прошу прокоментировать оставшийся код.
У меня он что-то рисует, но трейлинг рисует НИЖЕ входа... А мне надо выше... В целом, как оцениваете идею автора по способу расчета скользящего тэйка? (И как ее можно модифицировать что бы тэйк для лонга ставился сверху и потом опускался?)
------------------------------
укороченный вариант. целиком см на
http://www.amibroker.com/library/detail.php?id=660
---------
/// BASIC STRATEGY AND PLOTS ///////
Buy = Cross( Close, MA(Close, 35) );
Sel l= LinRegSlope( MA(Close,18), 2 )<0;
// I am sceptical to if the original applystop functions (trailing etc) reallyworks!?
//I have therefor coded my own stop functions below.
//////// STOP LOSS PARAMETERS /////////////
e = Equity(1,0); //* Highly Important!!. "Removes all extra signals, evaluates stops AND writes BACK signals to Sell/Cover arrays". As it should be!!*/
Lprofit = e - ValueWhen( Buy, e);
////// TRAILING PROFIT STOP/////////
x3=Param("DECLINE OF PROFIT IN POINTS ",300 ,0 ,500 ,1);
////////FOR LONG POSITION PERCENT////
XXL=HighestSince( Buy==1, Lprofit, 1 ); //returns the highest profit since last Buy Signal. the basis for the trailing calculation.
ZL= ExRem( Cross(XXL, Lprofit), Buy==1); // Just first signal counts. highly important!!!!!!!! Also calculates critical Sell levels
Sell= IIf(ZL==1 AND TL==True, 4, 0); // return a sell signal=4 if z1=1 and TL=True (yes)
PlotShapes( Buy* shapeUpArrow , colorGreen, 0);
PlotShapes( Sell* shapeDigit1 , colorRed, 0);
Plot(XXL, "L TRAILING LEVEL",colorGreen,styleLeftAxisScale, styleLine);
Plot(Lprofit,"L PROFIT",colorYellow,styleLeftAxisScale, styleLine) ; |
|
|
Посмотреть профиль Отправить личное сообщение |
|
VladimirN
Зарегистрирован: 07.11.2009
Сообщения: 49
|
Еще сильнее порезал найденный код, рисовать он кое-что начал, и даже дает команду на выход, но я обнаружил две странности.
Применяю код как индикатор (не в бэкстестере), и...
1 - не могу там добиться выполнения нормальных ApplyStops - они просто не срабатывают. Это нормально? Как их включить?
2 - Lprofit, который вычисляется через
e = Equity(1,0); Lprofit = e - ValueWhen( Buy, e);
Начинает вычислятся только со второго входа в Лонг. А после первого входа его просто нет... Как победить?
_SECTION_BEGIN("test");
//************/
SetPositionSize(1, spsShares );
x3=Param("DECLINE OF PROFIT IN POINTS ",200 ,0 ,500 ,1);
WriteVal(x3);
ApplyStop(stopTypeLoss, stopModePoint, 100, True )
//вот этот стоп (и другого типа) просто не срабатывает...
Buy = Cross( Close, MA(Close, 35) );
Sell = Cross( MA(Close, 35), Close );
e = Equity(1,0);
Lprofit = e - ValueWhen( Buy, e);
XXL=HighestSince( Buy==1, Lprofit, 1 )-x3; //returns the highest profit since last Buy Signal. the basis for the trailing calculation.
ZL= ExRem( Cross(XXL, Lprofit), Buy==1); // Just first signal counts. highly important!!!!!!!! Also calculates critical Sell levels
Sell= IIf(ZL==1, 4, 0); // return a sell signal=4 if z1=1
WriteVal(e);
WriteVal(XXL);
WriteVal(Lprofit);
Plot(XXL,"XXL",colorPink,styleLeftAxisScale, styleLine) ;
Plot(Lprofit,"L PROFIT",colorYellow,styleLeftAxisScale, styleLine) ;
PlotShapes( Buy* shapeUpArrow , colorGreen, 0);
sellshape = IIf( Sell == 1, shapeSquare + shapePositionAbove,
IIf( Sell == 2, shapeSquare + shapePositionAbove,
IIf( Sell == 3, shapeSquare + shapePositionAbove,
IIf( Sell == 4, shapeStar + shapePositionAbove,
IIf( Sell == 5, shapeSquare + shapePositionAbove,0 )))));
PlotShapes( SellShape, colorYellow, 0, C);
_SECTION_END(); |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
VladimirN писал(а): |
1 - не могу там добиться выполнения нормальных ApplyStops - они просто не срабатывают. Это нормально? Как их включить? |
А какая бумага тестируется?
Дело в том, что иногда ошибочно понимают stopModePoint как стоп именно в пунктах. На самом деле это просто в ценах. Т.е. если пункт 0,001, то stopModePoint = 100 это не 0,01, а именно 100.
VladimirN писал(а): |
2 - Lprofit, который вычисляется через
e = Equity(1,0); Lprofit = e - ValueWhen( Buy, e);
Начинает вычислятся только со второго входа в Лонг. А после первого входа его просто нет... Как победить?
|
Хм. Чесно говоря не вижу причин почему не работает. По коду вроде все грамотно. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|