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





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

Добрый день.

Мне нужно чтобы при входе стоп составлял 200 пунктов а при движении цены в мою сторону более чем на 150 пунктов переносился в безубыток.

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


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

СообщениеДобавлено: Сб Сен 13, 2008 9:07 pm Ответить с цитатой Вернуться к началу

К сожалению простого способа либо не существует, либо я о нем не знаю. Sad

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





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

жаль конечно. ну тогда хоть какой нить вариант
000
Site Admin


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

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

Подожди пару дней. Рожу какой-нить вариант.

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





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

Спасибо Олег! Буду ждать, а то без этого пресловутого стопа все тестирование встало
000
Site Admin


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

СообщениеДобавлено: Вт Сен 16, 2008 6:33 pm Ответить с цитатой Вернуться к началу

Получилось довольно сложно. Сам не проверял, но вроде ошибок нету
Код:

Buy = ...;
Sell = ...;
Short = ...;
Cover = ...;


ReverceSignal = 0 ;
// если 1 то переворот при наличии обратного сигнала
// если 0 то обратный сигнал игнорируется.

Exit = 0;
// если 1 то сигнал на выход закрывает позу
// если 0 то сигнал на выход игнорируется

FirstStop = 200 * TickSize;
// уровент начального стопа

trans = 150 * TickSize;
// при достижении профита переносим стоп сюда


Long = 0;
tran = 0;

for(i = 1; i < BarCount; i++)
{
   if(Buy[i])
   {
      Long = 1;
      Price = BuyPrice[i];
      stop = Price - FirstStop;
      tran = 0; // стоп не перенесен
   }
   if(Short[i])
   {
      Long = -1;
      Price = ShortPrice[i];
      stop = Price + FirstStop;
      tran = 0; // стоп не перенесен
   }

////// выход //////////
   if(exit)
   {
      if(Long == 1)
      {
         if(Sell[i] > 0)
            Long = 0;
      }
      if(Long == -1)
      {
         if(Cover[i] > 0)
            Long = 0;
      }
   }

////// переворот //////////
   if(ReverceSignal) 
   {
      if(Long == 1)
      {
         if(Short[i] > 0)
         {
            Long = -1;
            Price = ShortPrice[i];
            stop = Price + FirstStop;
            tran = 0; // стоп не перенесен
         }
      }
      if(Long == -1)
      {
         if(Buy[i] > 0)
         {
            Long = 1;
            Price = BuyPrice[i];
            stop = Price - FirstStop;
            tran = 0; // стоп не перенесен
         }
      }
   }
////////// перенос стопа ////////////
   if(tran == 0)
   {
      if(Long == 1)
      {
         if(H[i] > Price + trans)
         {
            tran = 1; // стоп перенесен
            stop = Price;
         }
      }
      if(Long == -1)
      {
         if(L[i] < Price - trans)
         {
            tran = 1; // стоп перенесен
            stop = Price;
         }
      }
   }

////////// стоп ///////////
   if(Long == 1)
   {
      if(L[i] < stop)
      {
         Sell[i] = 1;
         SellPrice[i] = stop;
         Long = 0;
      }
   }
   if(Long == -1)
   {
      if(H[i] > stop)
      {
         Cover[i] = 1;
         CoverPrice[i] = stop;
         Long = 0;
      }
   }
}

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.

Последний раз редактировалось: 000 (Ср Сен 24, 2008 12:12 am), всего редактировалось 2 раз(а)
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
kent
Гость





СообщениеДобавлено: Ср Сен 17, 2008 7:08 am Ответить с цитатой Вернуться к началу

Добрый день! Скопировал код вставил, выдает такую ошибку:
Line 143, Column 1:
Long = 0;

}

}

}
^

Error 3.
Condition in IF, WHILE, FOR statements
has to be Numeric or Boolean type.
You can not use array here,
please use [] (array subscript operator)
to access array elements
000
Site Admin


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

СообщениеДобавлено: Ср Сен 17, 2008 8:02 am Ответить с цитатой Вернуться к началу

Трудно сказать что там за ошибка в строке 143. У меня в коде всего 121 строка...
Вообще говоря это черновик потому, что совсем универсальный код написать неполучилось. Разумеется его работоспособность зависит от того, как заданы Buy, Sell, short, cover и какие в коде есть еще прибамбасы...

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





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

Добрый день. вышеуказанную ошибку так и не смог устранить, залез на сайт амиброкера там копался в готовых кодах, вот что нарыл:// TRADING SYSTEM LONG STOP FORMULA
// ****************************************************************************************

BuyStopLoss = 0; // 0 - not a stop loss formula, stop must be activated
// 1 - stop is activated without checking ActiveLevel

// How many bars ago was the last Buy signal?
BuyBarsSince = BarsSince(Buy == 1);

// Setting stop level
// As an example BuyStopLevel depends directly on BuyPrice and a constant
// Could be also: BuyPrice + ATR or any other dynamic formula
BuyStopLevel = Ref(BuyPrice, -BuyBarsSince) + 3;

// Setting the level to activate stop
// BuyActivateLevel depends directly on BuyPrice and a constant
// and I think this is how it should be - BuyActiveLevel should not be dynamically calculated
// NOTE: When BuyStopLoss = 1, BuyActiveLevel is not important
BuyActiveLevel = Ref(BuyPrice, -BuyBarsSince) + 22;

// Active is triggered when the highest price since Buy is higher then BuyActiveLevel or
// is always 1 (True) when BuyStopLoss = 1
// NOTE: Cross() returns 0 when HHV = BuyActiveLevel
BuyActive = Cross(BuyActiveLevel, HHV(High, -BuyBarsSince)) OR BuyStopLoss;

// BuyStop is triggered when Low of the session is lower than BuyStopLevel
// NOTE: Cross() returns 0 when BuyStopLevel = Low
BuyStop = Cross(Low, BuyStopLevel);

// BuyActive will be 1 (True) till BuyStop is triggered
// therefore we will know if BuyStop is activated and should be executed
BuyActive = Flip(BuyActive, BuyStop);

// When gap on open - use Open otherwise use BuyStopLevel as a SellPrice
SellPrice = Min(Open, BuyStopLevel);

У меня блин не тока с формулами но и с английским не очень, но из того что удалось перевести вроде то что я ищу, что скажаеш Олег?
000
Site Admin


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

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

Эта формула генерирует стопы и входы при пробое ценой уровня задаваемого при выполнении некоторых условий . Совсем не похоже на перенос стопа в безубыток. Скинь мне в личку свою готовую формулу. Посмотрю, что там не работает. Только не обещаю быстро. Мне еще надо главу про аккаунт менеджер дописать... ))))

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


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

СообщениеДобавлено: Пн Сен 22, 2008 11:19 pm Ответить с цитатой Вернуться к началу

у меня в коде была небольшая ошибочка. Исправил и смотри личку.

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



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

СообщениеДобавлено: Ср Мар 31, 2010 12:43 pm Ответить с цитатой Вернуться к началу

а код который выложен выше он уже исправлен?
не подскажите как здесь нарисовать стрелки именно где сработал стоп?
а тут stop на stop[i] не надо заменить?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Мар 31, 2010 2:58 pm Ответить с цитатой Вернуться к началу

Ошибка исправлена.
stop на stop[i] заменять не надо.
Стрелки на срабатывание стопа в данном случае по простому не нарисовать.

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



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

СообщениеДобавлено: Ср Мар 31, 2010 3:26 pm Ответить с цитатой Вернуться к началу

Спасибо!
Посмотреть профиль Отправить личное сообщение
TeRGeR



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

СообщениеДобавлено: Чт Апр 01, 2010 12:41 pm Ответить с цитатой Вернуться к началу

все никак не могу придумать скользящий стоп ((

есть только такая идея, но пока не работает...
есть какие-нить идеи?
Код:

ReverceSignal = 0 ;
// если 1 то переворот при наличии обратного сигнала
// если 0 то обратный сигнал игнорируется.

Exit = 0;
// если 1 то сигнал на выход закрывает позу
// если 0 то сигнал на выход игнорируется

FirstStop = TickSize*200;
// уровент начального стопа
trans = 200*TickSize;
// при достижении профита переносим стоп сюда


for(i = 1; i < BarCount; i++)
{
   if(Buy[i])
   {
      Long = 1;
      Price = BuyPrice[i];  // BuyPrice[i] Определяет массив, цену покупки 
      stop = Price - FirstStop;
      tran = 0; // стоп не перенесен
   }
   if(Short[i])
   {
      Long = -1;
      Price = ShortPrice[i]; // ShortPrice[i] Определяет массив, цену продажи 
      stop = Price + FirstStop;
      tran = 0; // стоп не перенесен
   }

////// выход //////////
   if(exit)
   {
      if(Long == 1)
      {
         if(Sell[i] > 0)
            Long = 0;
      }
      if(Long == -1)
      {
         if(Cover[i] > 0)
            Long = 0;
      }
   }
////// переворот //////////
   if(ReverceSignal)
   {
      if(Long == 1)
      {
         if(Short[i] > 0)
         {
            Long = -1;
            Price = ShortPrice[i]; // ShortPrice[i] Определяет массив, цену продажи 
            stop = Price + FirstStop;
            tran = 0; // стоп не перенесен
         }
      }
      if(Long == -1)
      {
         if(Buy[i] > 0)
         {
            Long = 1;
            Price = BuyPrice[i];  // BuyPrice[i] Определяет массив, цену покупки 
            stop = Price - FirstStop;
            tran = 0; // стоп не перенесен
         }
      }
   }

////////// перенос стопа ////////////

      if(Long == 1)
      {
         if(H[i] > Price + trans)
         {
            stop = Price;
          Price = H[i];
         }


      if(Long == -1)
      {
         if(L[i]  < Price - trans)
         {

            stop = Price;
           Price = L[i];
         }
      }
   }


////////// стоп ///////////
   if(Long == 1)
   {
      if(L[i] < stop)
      {
         Sell[i] = 1;
         SellPrice[i] = stop; // SellPrice[i] Определяет массив, цену по которой совершается закрытие длинной  продажи.
         Long = 0;

      }
   }
   if(Long == -1)
   {
      if(H[i] > stop)
      {
         Cover[i] = 1;
         CoverPrice[i] = stop; // CoverPrice[i] Определяет массив, цену по которой совершается закрытие короткой продажи.
         Long = 0;

      }
   }
}

"выход" и "переворот" у меня не на что не влияют почему-то


Последний раз редактировалось: TeRGeR (Чт Апр 01, 2010 3:10 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen