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


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Ср Июн 04, 2014 1:34 pm Ответить с цитатой Вернуться к началу

Код:
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

СообщениеДобавлено: Ср Июн 04, 2014 4:03 pm Ответить с цитатой Вернуться к началу

Как то так
Код:

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

СообщениеДобавлено: Ср Июн 04, 2014 5:08 pm Ответить с цитатой Вернуться к началу

спс Олег
Посмотреть профиль Отправить личное сообщение
SPR



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

СообщениеДобавлено: Вт Авг 11, 2015 4:48 pm Ответить с цитатой Вернуться к началу

Помогите плз понять этот код, а именно этот момент:

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

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

По этому куску кода вообще ничего сказать нельзя...

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



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

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

000 писал(а):
По этому куску кода вообще ничего сказать нельзя...

Собственно это часть кода, который целиком написан в этой теме во втором посте сверху.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Авг 11, 2015 6:38 pm Ответить с цитатой Вернуться к началу

Слежка тут
Код:
trailstop = Max( L[ i ] * (1-stoplevel), trailstop );

функция Max()

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



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

СообщениеДобавлено: Сб Авг 15, 2015 11:50 am Ответить с цитатой Вернуться к началу

Пытаюсь использовать трейлинг стоп в цикле, но как-то криво получается. Подскажите плз, может какая ошибка в коде.
для простоты код для лонгов:

Код:

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

СообщениеДобавлено: Сб Авг 15, 2015 12:22 pm Ответить с цитатой Вернуться к началу

Покажи линию support

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



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

СообщениеДобавлено: Сб Авг 15, 2015 12:27 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Покажи линию support


это обычный болинжер

sup = Ref( BBandBot( C, p, w), -1);
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Сб Авг 15, 2015 1:47 pm Ответить с цитатой Вернуться к началу

Вот смотри. У тебя неправильные выходы (судя по стрелкам на картинке) всегда на следующем баре после входа.
Т.е. именно в начале ведения позиции возникает косяк.
Скорее всего дело в том, что после выхода из позы ты 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

СообщениеДобавлено: Вс Авг 16, 2015 10:18 pm Ответить с цитатой Вернуться к началу

Спасибо большое! Все прекрасно работает!
Получается, что я изначально неправильно понимал как работает тестер..
Я думал, что если код содержит такую конструкцию:
Код:
 
pos = 0;
trailstop = 0;
for (  i=1, i < BarCount, i++ )
{
...
}

то после выхода их позиции значение trailstop обнуляется, так как перед циклом у меня это инициализровано.
Оказывается, что нет...
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen