Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А зачем весь этот геморой? Почему не использовать просто ApplyStop() ??? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Вот щщет, эта хрень работает! Я думал на это только тестер реагирует... Спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Стоп. А тебе для чего надо? Не для робота случайно? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Да не, индюк уже год работает, стрелки только по сигналам рисует, без анализатора. Торгую рученками, ибо к потным рученкам деньги липнут! )))
Чет я рано обрадовался. Изменил в коде строчки "вход" на
Цитата: |
// - вход---------------------------------------------------------
DwSig = DwSigOk; // вход в шорт
CloseDw = CloseDwOk OR UpSigOk OR ApplyStop( 2, 1, Tsl, 0 );
UpSig = UpSigOk; // вход в лонг
CloseUp = CloseUpOk OR DwSigOk OR ApplyStop( 2, 1, Tsl, 0 ); |
появились двойные входы и нет реакции на размер лосса - Tsl. Не подскажешь как корректно ввернуть туда ApplyStop? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Лучше конечно видеть весь код целиком. Что не хочешь светить лучше убери, но желательно видеть всю цепочку.
Вот так не делается
Код: |
CloseDw = CloseDwOk OR UpSigOk OR ApplyStop( 2, 1, Tsl, 0 ); |
Лучше так
Код: |
CloseDw = CloseDwOk OR UpSigOk;
ApplyStop( 2, 1, Tsl, 0 ); |
ApplyStop работает так. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Так тоже не сработало. Готовлю код чтоб выложить.
Вот он, упрощен, но рабочий. Если кинуть на дневки акций газпрома, видно, что не отрабатывает трейлингстоп например в сентябре 2012.
Код: |
_SECTION_BEGIN("1. -b PA Tr");
SetBarsRequired(sbrAll, sbrAll);
SetChartOptions(0,chartShowArrows|chartShowDates);
GraphXSpace = 10;
Level = Param("Вход", 2, 1, 10, 1);
Level_out = Param("Выход", 0, -10, 10, 1);
mtdSL = ParamToggle("Stop метод", "indx|Trail",1);
Tsl=Param("Stop пунктов", 1, 0, 5, 1);
PMA= Param("Период MA", 30, 10, 100, 10);
//===========Расчеты=======================
mom=(C-Ref(C,-1))/Ref(C,-1)*100;
Cpr=Cum(mom);
RCpr=Ref(Cpr,-1);
Mid = MA(Cpr,PMA); uplvl=Mid+Level; dwlvl=Mid-Level;
RMId=Ref(Mid,-1); Ruplvl=Ref(uplvl ,-1); Rdwlvl=Ref(dwlvl ,-1);
// ==============Сигналы=============
// - короткие позиции
DwSigOk = mom < 0 AND RCpr>Ruplvl; // условие шорт
// Стоп по TrailStop или ниже indx
CloseDwOk = IIf(mtdSL,
Cpr>RCpr AND Cpr>LLV(Cpr,BarsSince(DwSigOk))+Tsl,
Cpr>RCpr AND RCpr<RMId);
// - длинные позиции---------------------------------
UpSigOk = mom > 0 AND RCpr<Rdwlvl; // условие лонг
// Стоп по TrailStop или выше indx
CloseUpOk = IIf(mtdSL,
Cpr<RCpr AND Cpr<HHV(Cpr,BarsSince(UpSigOk))-Tsl,
Cpr<RCpr AND RCpr>RMId);
// - вход--------------------------------------------
DwSig = DwSigOk; // вход в шорт
CloseDw = CloseDwOk OR UpSigOk;// выход или stoploss
UpSig = UpSigOk; // вход в шорт
CloseUp = CloseUpOk OR DwSigOk; // выход или stoploss
//--удаляем лишние сигналы
UpSig = ExRem(UpSig, CloseUp);
CloseUp = ExRem(CloseUp, UpSig);
DwSig = ExRem(DwSig, CloseDw);
CloseDw = ExRem(CloseDw, DwSig);
//--Индикация позиции с тригерами залипания и Life--
US = Flip(UpSig, CloseUp);
CU = Flip(CloseUp, UpSig);
DS = Flip(DwSig, CloseDw);
CD = Flip(CloseDw, DwSig);
pos= WriteIf(US,"Buy",WriteIf(DS,"Sell",""));
Life=Min(BarsSince(UpSig),BarsSince(DwSig));
//================Рисовать=============================
Plot(Cpr, "price", colorBlue, styleThick);
Plot(Mid,"",colorDarkGrey,styleLine, styleNoLabel);
Plot(Mid+Level, "", colorGreen, styleNoLabel);
Plot(Mid+Level_out, "", colorDarkGrey, styleLine, styleNoLabel);
Plot(Mid-Level, "", colorRed, styleLine, styleNoLabel);
Plot(Mid-Level_out, "", colorDarkGrey, styleLine, styleNoLabel);
//--Рисуем флаги--
PlotShapes( IIf( UpSig, shapeUpTriangle, shapeNone ), colorGreen );
PlotShapes( IIf( DwSig, shapeDownTriangle, shapeNone ), colorRed );
PlotShapes( IIf( CloseUp, shapeDownArrow, shapeNone ), colorDarkGrey );
PlotShapes( IIf( CloseDw, shapeUpArrow, shapeNone ), colorDarkGrey );
_N(Title ="\\c241. -b PA Tr \\c16"+"= "+C+" ("+Prec(mom,2)+"%) "+
"\\c24 momentum= \\c16"+Prec(Mom,2)+"\\c24 вход \\c16"+Level+
"\\c24 выход \\c16"+ Level_out+"\\c24 стоп \\c16"+Tsl+
"\\c24 позиция= \\c16"+pos+WriteIf(US OR DS,"\\c24 life= \\c16","")+
IIf(US OR DS,Life,0)+
"\n \\c24 период MA= \\c16"+PMA
);
|
edit
тэээкс..., нашел одну ошЫбку, у Ами приоритет + и - перед > и <, исправляем скобками
Код: |
Cpr<(HHV(Cpr,BarsSince(UpSigOk))-Tsl) |
edit 2
отладкой нашел ещё
Код: |
Cpr<(HHV(Cpr,BarsSince(UpSigOk)+1)-Tsl) |
edit 3
ну и перенос стопа в безубыток
Код: |
Cpr<(HHV(Cpr,BarsSince(UpSigOk)+1)-IIf(Cpr>Mid,0,Tsl)) |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В таком случае лучше всего написать трейлинг циклом. Это идеальный вариант. Либо в воскресенье либо в понедельник сделаю. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Проверяй работу.
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Вт Авг 27, 2013 6:42 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Ты здесь трейл только для лонгов написал? Работает вроде, попробую вникнуть в алгоритм, спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Нет. И для лонгов и для шортов. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Тогда пороюсь на досуге, в этом виде код отрабатывает трейл только на лонгах. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вечером проверю. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Хм. Странно, что оно вообще работало. Пробуй теперь
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Ср Авг 28, 2013 12:25 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
= в if заменить на == я и в прошлый раз догадался.
Только в лонгах трейлинг работает.
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
SetBarsRequired(sbrAll, sbrAll);
SetChartOptions(0,chartShowArrows|chartShowDates);
GraphXSpace = 10;
Level = Param("Вход", 2, 1, 10, 1);
Level_out = Param("Выход", 0, -10, 10, 1);
mtdSL = ParamToggle("Stop метод", "indx|Trail", 1);
Tsl=Param("Stop пунктов", 1, 0, 5, 1);
PMA= Param("Период MA", 30, 10, 100, 10);
//===========Расчеты=======================
mom=(C-Ref(C,-1))/Ref(C,-1)*100;
Cpr=Cum(mom);
RCpr=Ref(Cpr,-1);
Mid = MA(Cpr,PMA);
uplvl=Mid+Level;
dwlvl=Mid-Level;
RMId=Ref(Mid,-1);
Ruplvl=Ref(uplvl, -1);
Rdwlvl=Ref(dwlvl, -1);
// ==============Сигналы=============
// - короткие позиции
DwSigOk = mom<0 AND RCpr>Ruplvl; // условие шорт
// - длинные позиции---------------------------------
UpSigOk = mom>0 AND RCpr<Rdwlvl; // условие лонг
// - вход--------------------------------------------
trSt = UpSig = DwSig = CloseUp = CloseDw = pos = 0;
for(i = 0; i < BarCount; i++)
{
if(pos == 0)
{
if(UpSigOk[i])
{
UpSig[i] = 1;
pos = 1;
trSt = Cpr[i] - Tsl;
}
else if(DwSigOk[i])
{
DwSig[i] = 1;
pos = -1;
trSt = Cpr[i] + Tsl;
}
}
else if(pos == 1)
{
trSt = Max(Cpr[i] - Tsl, trSt);
if(DwSigOk[i])
{
CloseUp[i] = 1;
DwSig[i] = 1;
pos = -1;
trSt = Cpr[i] + Tsl;
}
else if(mtdSL == 1)
{
if(Cpr[i]<RCpr[i] AND Cpr[i]<trSt)
{
CloseUp[i] = 1;
pos = 0;
}
}
else if(mtdSL == 0)
{
if(Cpr[i]<RCpr[i] AND RCpr[i]>RMId[i])
{
CloseUp[i] = 1;
pos = 0;
}
}
}
else if(pos == -1)
{
trSt = Min(Cpr[i] + Tsl, trSt);
if(UpSigOk[i])
{
CloseDw[i] = 1;
UpSig[i] = 1;
pos = 1;
trSt = Cpr[i] - Tsl;
}
else if(mtdSL == 1)
{
if(Cpr[i]>RCpr[i] AND Cpr[i]>trSt)
{
CloseDw[i] = 1;
pos = 0;
}
}
else if(mtdSL == 0)
{
if(Cpr[i]>RCpr[i] AND RCpr[i]<RMId[i])
{
CloseDw[i] = 1;
pos = 0;
}
}
}
}
//--Индикация позиции с тригерами залипания и Life--
US = Flip(UpSig, CloseUp);
CU = Flip(CloseUp, UpSig);
DS = Flip(DwSig, CloseDw);
CD = Flip(CloseDw, DwSig);
pos= WriteIf(US,"Buy",WriteIf(DS,"Sell",""));
Life=Min(BarsSince(UpSig),BarsSince(DwSig));
//================Рисовать=============================
Plot(Cpr, "price", colorBlue, styleThick);
Plot(Mid,"",colorDarkGrey,styleLine, styleNoLabel);
Plot(Mid+Level, "", colorGreen, styleNoLabel);
Plot(Mid+Level_out, "", colorDarkGrey, styleLine, styleNoLabel);
Plot(Mid-Level, "", colorRed, styleLine, styleNoLabel);
Plot(Mid-Level_out, "", colorDarkGrey, styleLine, styleNoLabel);
//--Рисуем флаги--
PlotShapes( IIf( UpSig, shapeUpTriangle, shapeNone ), colorGreen );
PlotShapes( IIf( DwSig, shapeDownTriangle, shapeNone ), colorRed );
PlotShapes( IIf( CloseUp, shapeDownArrow, shapeNone ), colorDarkGrey );
PlotShapes( IIf( CloseDw, shapeUpArrow, shapeNone ), colorDarkGrey );
_N(Title ="\\c241. -b PA Tr \\c16"+"= "+C+" ("+Prec(mom,2)+"%) "+
"\\c24 momentum= \\c16"+Prec(Mom,2)+"\\c24 вход \\c16"+Level+
"\\c24 выход \\c16"+ Level_out+"\\c24 стоп \\c16"+Tsl+
"\\c24 позиция= \\c16"+pos+WriteIf(US OR DS,"\\c24 life= \\c16","")+
IIf(US OR DS,Life,0)+
"\n \\c24 период MA= \\c16"+PMA
); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|