Скачать MetaTrader 5

Как выполнить только однократное действие по серии убытков?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай самые обсуждаемые темы на форуме. Заходи в раздел Стена!
Igor Kim
2739
Igor Kim 2012.03.14 03:41 

Нужно остановить работу советника по достижении им некоторого количества убыточных сделок подряд.

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

2. Количество убытков считывать непосредственно из истории сделок. Тоже не катит, т.к. после достижения критического значения будет постоянное выбрасывание из функции start() даже после перезапуска советника.

Кто-нибудь может предложить надёжный вариант?

PapaYozh
3768
PapaYozh 2012.03.14 04:11  
KimIV:

Нужно остановить работу советника по достижении им некоторого количества убыточных сделок подряд.

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


Это с какого перепугу значения глобальных переменных теряются?
Igor Kim
2739
Igor Kim 2012.03.14 04:26  
PapaYozh:

Это с какого перепугу значения глобальных переменных теряются?
Может быть Вы имеете в виду глобальные переменные терминала, а не советника?
Andrey Dik
11210
Andrey Dik 2012.03.14 04:35  

В extern нужна переменная - флаг, который предписывает эксперту запретить работу после заданной серии убытков или игнорировать серию убытков.

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

PapaYozh
3768
PapaYozh 2012.03.14 04:36  
KimIV:
Может быть Вы имеете в виду глобальные переменные терминала, а не советника?


Естественно. Я думал, и Вы имели ввиду "глобальные переменные", а не "глобальные переменные".

;)

Roman Kutemov
1787
Roman Kutemov 2012.03.14 04:37  
У меня сделано так:
запрограммирована серия убыточных сделок в день.
С приходом нового дня серия обнуляется.
Andrey Dik
11210
Andrey Dik 2012.03.14 04:39  
Stells:
У меня сделано так:
запрограммирована серия убыточных сделок в день.
С приходом нового дня серия обнуляется.
Тоже хороший вариант. Можно зделать вообще любой период "заморозки" эксперта, по истечении которого советник возобновит работу.
Roman Kutemov
1787
Roman Kutemov 2012.03.14 04:42  
   prevday=DayOfYear();

      int Orders=HistoryTotal();  // history orders total
        int Losses=0; // number of losses orders without a break

        for(int s=Orders-1;s>=0;s--)
                  {
                 if(OrderSelect(s,SELECT_BY_POS,MODE_HISTORY)==false) 
                   { 
                        Print("Ошибка в истории!"); 
                        break;
                   }
                if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 
                  continue;
                 if(OrderProfit()>0 && TimeDayOfYear(OrderOpenTime())==prevday)  break;
                if(OrderProfit()<0 && TimeDayOfYear(OrderOpenTime())==prevday) Losses++;
                  }
                if(Losses>=Losses_orders) {torg=1;}else
                if(Losses<Losses_orders) {torg=-1;}
Igor Kim
2739
Igor Kim 2012.03.14 04:50  

Всем спасибо за варианты, но ситуация всё равно пока не проясняется.

Самым надёжным я вижу считывание данных из истории. joo, насколько я понял, предлагает сделать внешнее управление игнорированием серии убытков. Тогда получается, что пользователь должен будет после прибыли обратно включить отслеживание серии убытков. А если забудет? Сам лошара? :-))

Переменные... пусть даже глобальные терминала... Откуда брать информацию для их заполнения? Тоже из истории? Тогда в них вообще нет смысла. По факту появления убытка? А как отследить срабатывание стопа без считывания истории?

Актер
2301
Актер 2012.03.14 05:37  
KimIV:

Всем спасибо за варианты, но ситуация всё равно пока не проясняется.

Самым надёжным я вижу считывание данных из истории. joo, насколько я понял, предлагает сделать внешнее управление игнорированием серии убытков. Тогда получается, что пользователь должен будет после прибыли обратно включить отслеживание серии убытков. А если забудет? Сам лошара? :-))

Переменные... пусть даже глобальные терминала... Откуда брать информацию для их заполнения? Тоже из истории? Тогда в них вообще нет смысла. По факту появления убытка? А как отследить срабатывание стопа без считывания истории?

Можно рассмотреть вариант добавления на чарт графических объектов с внесением нужных данных в свойства.

Такие объекты статичны и даже при перезагрузке терминала информация не теряется.

Как вариант, тоже самое можно реализовать посредством записи инфы в файл.

Igor Kim
2739
Igor Kim 2012.03.14 05:52  
OnGoing:

Можно рассмотреть вариант добавления на чарт графических объектов с внесением нужных данных в свойствах типа description и т.п.

Такие объекты статичны и даже при перезагрузке терминала информация не теряется.

Как вариант, тоже самое можно реализовать посредством записи инфы в файл.

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

Но задачу пока никто не отменял и она состоит в том, чтобы советник прекращал работу после серии убытков. В какой-то момент времени пользователь решает, что уже пора советник оживить, что-то там в нём передёргивает и советник начинает работать как с нуля. Есть мысль, заставить пользователя писать во внешний параметр дату и время, с которых учитывать убытки. Как Вам такая мысль? Вроде должно сработать...

12345
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий