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



Зарегистрирован: 21.11.2008
Сообщения: 67
Откуда: Рязань

СообщениеДобавлено: Чт Дек 25, 2008 3:14 pm Ответить с цитатой Вернуться к началу

написал вот такой код
после входа в позицию необходимо, чтобы стоп передвигался под лоу свечи, если оно выше чем предыдущее
но почему то не двигается стоп((

Код:



Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);
Cond5=ADX(18)> Ref(ADX(18),-1);
Cond6=PDI(18)>MDI(18);
Cond8=Cond5 AND Cond6;

H1=Ref(HHV(H,10), -1);
L1=Ref(LLV(L,10), -1);
Cond9=C > H1 AND Cond8;
Cond10=Cond1 AND Cond2 AND Cond3 AND Cond4;

Buy=Cond9 OR Cond10;
Sell=0;
pos=0;

for(i = 1; i<BarCount; i++)
{
  if (pos !=1) // если система не в лонге
   {
      stoplevel=0;
      if(Buy[i])
      {
         pos=1;// открыта позиция
         stoplevel=Low[i];
      }
   }
  else // если система в лонге
   {
      Buy[i]=0; // убираем лишние покупки
      if (L[i] <stoplevel) // проверка условия выхода
      {
         Sell[i]=1; // продажа
         SellPrice=stoplevel; // цена продажи равна цене стоп-уровня
         stoplevel=0; // обнуляем стоп
         pos=0; // система не в лонге
      }
      else
      {
         if (stoplevel[i]>stoplevel[i-1]) // если лоу текущее, выше чем лоу на пред.свечке
         {
            Buy[i]=0; // удаляем лишние покупки
            stoplevel=stoplevel[i]; // передвигаем стоп вверх, на текущее лоу
         }
      }
   }
}

Plot(C,"",colorBlack,styleCandle);
Plot(stoplevel ,"",colorIndigo);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);


_________________
per aspera ad astra...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пт Дек 26, 2008 12:46 am Ответить с цитатой Вернуться к началу

Основной косяк в том, что stoplevel иногда используется как массив (с индексом [i]), а иногда как переменная (без индекса). Недавно обсуждали тут http://amisite.ru/phpBB2/viewtopic.php?p=2580#2580

Если использовать как переменную, то выводить линию стопов на график смысла нет (она фигню нарисует).
В общем поправил код и получилось так. Возможно есть ошибки, но у меня нарисовало вроде правильно.
Код:

Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);
Cond5=ADX(18)> Ref(ADX(18),-1);
Cond6=PDI(18)>MDI(18);
Cond8=Cond5 AND Cond6;

H1=Ref(HHV(H,10), -1);
L1=Ref(LLV(L,10), -1);
Cond9=C > H1 AND Cond8;
Cond10=Cond1 AND Cond2 AND Cond3 AND Cond4;

Buy=Cond9 OR Cond10;
Sell=0;
pos=0;

for(i = 1; i<BarCount; i++)
{
  if (pos != 1) // если система не в лонге
   {
      stoplevel[i] = Null;
      if(Buy[i])
      {
         pos = 1;// открыта позиция
         stoplevel[i] = Low[i];
      }
   }
  else // если система в лонге
   {
      Buy[i] = 0; // убираем лишние покупки
 
      if (L[i] <= stoplevel[i-1]) // проверка условия выхода
      {
         Sell[i] = 1; // продажа
         SellPrice[i] = stoplevel[i-1]; // цена продажи равна цене стоп-уровня
         stoplevel[i] = Null; // обнуляем стоп
         pos = 0; // система не в лонге
      }
      else
      {
         if (L[i] > L[i-1]) // если лоу текущее, выше чем лоу на пред.свечке
         {
            stoplevel[i] = L[i]; // передвигаем стоп вверх, на текущее лоу
         }
      }
   }
}

Plot(C,"",colorBlack,styleCandle);
Plot(stoplevel ,"",colorIndigo);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);

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


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

СообщениеДобавлено: Пт Дек 26, 2008 12:53 am Ответить с цитатой Вернуться к началу

Вообще по описанию в начале
Цитата:

после входа в позицию необходимо, чтобы стоп передвигался под лоу свечи, если оно выше чем предыдущее

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

Cond1=Ref(MA(Close,20),-1)>Ref(MA(Close,20),-5);
Cond2=Ref(Close,-1)<Ref(Close,-5);
Cond3=Ref(Close,-1)>Ref(Close,(-25));
Cond4=Close>Ref(Close,-1);
Cond5=ADX(18)> Ref(ADX(18),-1);
Cond6=PDI(18)>MDI(18);
Cond8=Cond5 AND Cond6;

H1=Ref(HHV(H,10), -1);
L1=Ref(LLV(L,10), -1);
Cond9=C > H1 AND Cond8;
Cond10=Cond1 AND Cond2 AND Cond3 AND Cond4;

Buy = Cond9 OR Cond10;
Sell = Low < Ref(Low, -1);
SellPrice =  Ref(Low, -1);

Plot(C,"",colorBlack,styleCandle);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-10);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-10);

Конечно тут не точно написано, т.к. если вдруг был обалденный геп вниз, то по цене прошлого лоу стоп исполнится никак не мог, но не трудно учесть и этот момент.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen