Советники: Трал

 

Трал:

Трейлинг-стоп по балансу

Author: Виталий

 

Спасибо.

 
vasilyt:

Спасибо.

пожалуйста.

Завтра попробую объдинить Loker (со стохастиком) и трал. Причем действвать он будет на всех таймфреймах. То есть будет брать сигналы со всех ТФ и по каждому ставить ордера.

Позже сделаю мультивалютного эксперта.

 

К СОЖАЛЕНИЮ ТРАЛ ЛОВИТ ДАЛЕКО НЕ ВСЕ ОРДЕРА А ТРАЛИТ ТОК ПОСЛЕДНИЙ ОТКРЫТЫЙ.. МОЖЕТ АВТОР ПОДРЕДАКТИРУЕТ КОД ЧТОБ ИСПРАВИТЬ ЭТОТ НЕДОСТАТОК???

 
sllawa3:

К СОЖАЛЕНИЮ ТРАЛ ЛОВИТ ДАЛЕКО НЕ ВСЕ ОРДЕРА А ТРАЛИТ ТОК ПОСЛЕДНИЙ ОТКРЫТЫЙ..

не может быть. Он не тралит ордера как таковые, а только их общий профит. Ему нет разницы какие убыточные, какие прибыльные. Они могут по ходу меняться местами из убыточных в прибыльные и обратно. Но если суммарный профит будет меньше положенного (при обязательном условиии срабатывания - об этом сообщается в комменте) - он закроет все ордера, находящиеся в терминале открытыми ( не относится к отложенным).

 
sllawa3:

К СОЖАЛЕНИЮ ТРАЛ ЛОВИТ ДАЛЕКО НЕ ВСЕ ОРДЕРА А ТРАЛИТ ТОК ПОСЛЕДНИЙ ОТКРЫТЫЙ.. МОЖЕТ АВТОР ПОДРЕДАКТИРУЕТ КОД ЧТОБ ИСПРАВИТЬ ЭТОТ НЕДОСТАТОК???

пример покажи.

 

Модерировать долго, поэтому для тех, у кого не безлимитка, можете вынести или заменить в коде частоту обновления (в коде 0.05 сек). Можно обновляться раз в секунду или реже. Для этого вместо Sleep (50), поставьте любое значение или объявить и вынести во внешне параметры как переменную.

extern int updaterates=1000;
......
start ()
{
.......
Sleep (updaterates);
.......

P.S. Это для тех, кто не знает

 

/*вставка в код

'Трал'

Трейлинг-стоп по балансу

Ловит все ордера в терминале. Если нет нужного профита -ждет. Подходит как для ручной торговли, так и для советников, в которых не предусмотрен трейлинг-стоп.

Если есть нужный профит, устанавливает просадку. По ней трейлит. Просадка в процентах. Допустим стоят параметры минимальный профит = 1000. Процент 20. Ордера вышли в плюс 1000. При падении профита до 800 - закрывает их. Если пошло дальше, допустим до 2000, допустимая просадка составит уже 400. То есть закрываться ордера будут уже при общем профите 1600. Фиксированной просадки нет, так как не считаю полезным пользоваться абсолютными величинами.

В теории можно поставить процент = 0. Будет действовать как общий тейкпрофит. Можно поставить процент 100 будет действовать как безубыток (не стоит забывать, что пока одни ордера закрываются - остальные моут уйти в минус).

Внимание!! Советник работает независимо от поступления котировок, кроме первой. Для изменения параметров в режиме торговли, смены графика и/или таймфрейма, необходимо выключить советника кнопкой! Так же после каждой компиляции кода нужно проверять его состояние.

===============

Модерировать долго, поэтому для тех, у кого не безлимитка, можете вынести или заменить в коде частоту обновления (в коде 0.05 сек). Можно обновляться раз в секунду или реже. Для этого вместо Sleep (50), поставьте любое значение или объявить и вынести во внешне параметры как переменную.

extern int updaterates=1000;
......
start ()
{
.......
Sleep (updaterates);
.......

P.S. Это для тех, кто не знает

======

Спасибо.

*/

 

Отличный трал.А нельзя ли сделать,чтобы он при достижении профита удалял все ордера,и отложенные тоже?

 
lazarik:

Отличный трал.А нельзя ли сделать,чтобы он при достижении профита удалял все ордера,и отложенные тоже?

Конечно.Нужно после

...if (close_start)
         {
         for (int i=OrdersTotal();i>=1;i--)
            {
            OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
               {

дописать 

               if (OrderType() == OP_BUYLIMIT ||
                   OrderType() == OP_SELLLIMIT||
                   OrderType() == OP_BUYSTOP  ||
                   OrderType() == OP_SELLSTOP  )
                  {
                  OrderDelete (OrderTicket());
                  }
               ...
 
Vitalya_1983:
lazarik:

Отличный трал.А нельзя ли сделать,чтобы он при достижении профита удалял все ордера,и отложенные тоже?

Конечно.Нужно после

...if (close_start)
         {
         for (int i=OrdersTotal();i>=1;i--)
            {
            OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
               {



дописать 



               if (OrderType() == OP_BUYLIMIT ||
                   OrderType() == OP_SELLLIMIT||
                   OrderType() == OP_BUYSTOP  ||
                   OrderType() == OP_SELLSTOP  )
                  {
                  OrderDelete (OrderTicket());
                  }
               ...

Если бы я умел это делать....

Причина обращения: