Автор |
Сообщение |
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Код: |
r=Ref(round(atr(3)*100/C)/100,-1);
Buy=Cover=H>Ref(H,-1);
Sell=Short=0;
trailARRAY = Null;
trailstop = 0;
StopLevel=r;
for( i = 1; i < BarCount; i++ )
{
if( trailstop == 0 AND Buy[ i ] AND Cover[i])
{
trailstop = L[ i ] * (1-stoplevel[i]);
}
else Buy[ i ] = 0 AND Cover[i]=0;
// remove excess buy signals
if( trailstop > 0 )
{
trailstop = Max( L[ i ] * (1-stoplevel), trailstop );
trailARRAY[ i ] = trailstop;
}
if( trailstop > 0 AND Low[ i ] < trailstop[i-1] )
{
Sell[ i ] = Short[i]=1;
SellPrice[ i ] = ShortPrice[i]=trailstop[i-1];
trailstop=0;
}
}
BuyPrice=CoverPrice=Max(O,Ref(H,-1));
PlotShapes(Buy*shapeUpArrow,colorBlue,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);
Plot( Close,"Price",colorBlack,styleBar);
Plot( StopLevel,"trailing stop level", colorRed ); |
Хочу чтоб от волотильности на каждом входе цикл сам подставлял значение стопа, до целого процента, все перепробывал уже. Циклы к сожалению не понимаю. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Как то так
Код: |
r=Ref(round(ATR(3)*100/C)/100,-1);
Buy=Cover=H>Ref(H,-1);
Sell=Short=0;
trailARRAY = Null;
trailstop = 0;
StopLevel=r;
for( i = 1; i < BarCount; i++ )
{
if( trailstop == 0 AND Buy[i] AND Cover[i])
{
trailstop = L[i];// * (1-stoplevel[i]);
trailARRAY[i] = trailstop * (1-stoplevel[i]);
}
// remove excess buy signals
else if( trailstop > 0 )
{
Buy[i] = 0;
Cover[i]= 0;
trailstop = Max( L[ i ], trailstop );
trailARRAY[i] = trailstop * (1-stoplevel[i]);
if(Low[i] < trailARRAY[i-1] )
{
Sell[i] = Short[i]=1;
SellPrice[i] = ShortPrice[i] = trailARRAY[i-1];
trailstop = 0;
}
}
}
BuyPrice=CoverPrice=Max(O,Ref(H,-1));
PlotShapes(Buy*shapeUpArrow,colorBlue,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);
Plot( Close,"Price",colorBlack,styleBar);
Plot( StopLevel,"trailing stop level", colorRed );
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
HELP
Зарегистрирован: 02.06.2014
Сообщения: 9
|
|
Посмотреть профиль Отправить личное сообщение |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
Помогите плз понять этот код, а именно этот момент:
r=Ref(round(ATR(3)*100/C)/100,-1);
StopLevel=r;
...
trailstop = L[i];// * (1-stoplevel[i]);
trailARRAY[i] = trailstop * (1-stoplevel[i]);
...
При трейлинг стопе фиксируется локальный хай, а потом система следит не ушла ли котировка ниже значения (Хай - параметр). Если это лонг.
Насколько я понимаю, в данном коде r это как раз параметр, но я не очень понимаю, как этот код описывает "слежку" от максимума... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По этому куску кода вообще ничего сказать нельзя... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
000 писал(а): |
По этому куску кода вообще ничего сказать нельзя... |
Собственно это часть кода, который целиком написан в этой теме во втором посте сверху. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Слежка тут
Код: |
trailstop = Max( L[ i ] * (1-stoplevel), trailstop ); |
функция Max() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
Пытаюсь использовать трейлинг стоп в цикле, но как-то криво получается. Подскажите плз, может какая ошибка в коде.
для простоты код для лонгов:
Код: |
Cond1 = ...;
support = ...;
Buy = Sell = 0;
pos = 0;
trailstop = 0;
trailArray = Null;
for( i= 1; i < BarCount; i++)
{
if ( pos == 0)
{
if( Cond1[i])
{
Buy[i] = 1;
BuyPrice[i] =C[i];
pos = 1;
}
}
else if( pos == 1)
{
trailstop = Max( support[i], trailstop); // если в позе, то выбираем максимальное значение индикатора поддержки, чтобы стоп только приближался
trailArray[i] = trailstop; // записываем это значение в переменную, чтобы на каждой свече значь уровень стопа
if( C[i] < trailArray[i]) // продаем, если закрытие свечи меньше уровня стопа на этой свече
{
Sell[i] = 1;
SellPrice[i] = C[i];
pos = 0;
}
}
}
Plot( TrailArray, "TA", colorBlue, styleLine); |
Проблема в том, что на некоторых участках кода все делается как задумано, а на каких-то появляются непонятные сигналы на продажу или стоп вообще не рисуется(рисунок). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Покажи линию support |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
000 писал(а): |
Покажи линию support |
это обычный болинжер
sup = Ref( BBandBot( C, p, w), -1); |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот смотри. У тебя неправильные выходы (судя по стрелкам на картинке) всегда на следующем баре после входа.
Т.е. именно в начале ведения позиции возникает косяк.
Скорее всего дело в том, что после выхода из позы ты trailstop не обнуляешь. Соответственно его значение остается после прошлой позы...
Вот сюда
Код: |
{
Buy[i] = 1;
BuyPrice[i] =C[i];
pos = 1;
} |
вставь инициализацию trailstop при входе. Типа так
Код: |
{
Buy[i] = 1;
BuyPrice[i] =C[i];
pos = 1;
trailstop = support[i];
} |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
SPR
Зарегистрирован: 10.11.2008
Сообщения: 45
|
Спасибо большое! Все прекрасно работает!
Получается, что я изначально неправильно понимал как работает тестер..
Я думал, что если код содержит такую конструкцию:
Код: |
pos = 0;
trailstop = 0;
for ( i=1, i < BarCount, i++ )
{
...
} |
то после выхода их позиции значение trailstop обнуляется, так как перед циклом у меня это инициализровано.
Оказывается, что нет... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|