АвторСообщение



Сообщение: 29
Зарегистрирован: 17.10.14
Репутация: 0
ссылка на сообщение  Отправлено: 16.12.14 17:26. Заголовок: Перетаскивание сделки на график привело к убыткам


Речь пойдет о том, как перетаскивание закрытого ордера из истории счета на график с целью посмотреть на метки сделки на графике привело к большим убыткам.
Дело было так. Вначале на экране было 4 графика 4-х разных валютных пар с подвешенными экспертами. При перетаскивании ордера GBPUSD из истории счета на график внезапно появился второй график GBPUSD тоже с подвешенным экспертом. При этом график USDCHF исчез. После этого эксперт-двойник начал открывать убыточные ордера и тут же их закрывать. За минуту с небольшим было открыто и закрыто 22 таких ордера, что привело к похудению счета на 15 %. Хорошо еще сумма на счете небольшая и не так обидно. Если бы я не удалил вредоносный эксперт, то думаю от счета ничего не осталось бы через несколько минут. Примечательно, что эксперт на первом графике GBPUSD бездействовал, как ему и надлежало- ведь сигнала к открытию ордера не было. Что бы это все могло значить и как с этим бороться? Может запретить повторное открытие ордеров на текущем баре? Тогда конечно некоторые выгодные сделки будут потеряны, но зато удастся избежать лавины ордеров.
Скорее всего я по ошибке бросил ордер GBPUSD из истории счета на график USDCHF. При таком эксперименте на демо-счете график USDCHF заменялся на график GBPUSD-двойник тоже с подвешенным экспертом. Отсюда мораль: при перетаскивании ордеров из истории счета "не перепутайте Кутузов" .. графики.
Как то мне запомнилось из одной книги, что брокер прекращает торговлю, если ордера то открываются то закрываются непрерывно один за другим. В моем случае этого не произошло. Интересно, а если бы так была потеряна большая сумма, то можно ли от брокера добиться восстановления своих кровных, заработанных непосильным трудом?
Ниже приведен фрагмент истории счета, иллюстрирующий сказанное (номер тикета удален).

Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 9 [только новые]


постоянный участник




Сообщение: 994
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 2
ссылка на сообщение  Отправлено: 16.12.14 19:44. Заголовок: Да, очень странная и..


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

С уважением! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1050
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 17.12.14 10:42. Заголовок: Stoletov пишет: При..


Stoletov пишет:

 цитата:
При перетаскивании ордера GBPUSD из истории счета на график внезапно появился второй график GBPUSD


Это "фишка" обоих Meta Trader'ов - когда на график перетаскивается сделка из истории счета, то отображается окно с соответствующей валютной парой. Решение, действительно, спорное. На мой взгляд было бы правильнее, как минимум, ничего не отображать, а лучше всего - вывести на экран сообщение, указывающее на ошибку пользователя, и только по его подтверждению открывать новый график.

Stoletov пишет:

 цитата:
тоже с подвешенным экспертом


А вот это уже непонятно. Такого быть не должно. Пытался воспроизвести у себя - не получается. Даже если сохранить шаблон с прикрепленным экспертом как default, то на текущем графике не отображаются данные этого шаблона. Все остается как есть (даже таймфрейм), за исключением имени символа.

Stoletov пишет:

 цитата:
Отсюда мораль: при перетаскивании ордеров из истории счета "не перепутайте Кутузов" .. графики.


Глубже - не используйте на реальных счетах советники, которые не прошли доскональную проверку в тестере и онлайн на демо-счете. "Доскональная проверка" заключается в обработке программой всех мыслимых и немыслимых ситуаций. Иначе получаем такие вот казусы. Как минимум, совместную работу двух и более экспертов на одной валютной паре просто необходимо проверить - как они себя поведут? Аналогичным образом проверяется ситуация с отключением связи (света и т. д.). Советник вручную удаляется с графика, а через некоторое время возвращается обратно. Тестируется поведение с рыночными ордерами и без оных.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 31
Зарегистрирован: 17.10.14
Репутация: 0
ссылка на сообщение  Отправлено: 18.12.14 14:28. Заголовок: Genry пишет: Да, ..


Genry пишет:

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


Да, Henry, мне тоже хотелось бы понять причину такого лавинного обвала. Я попробовал смоделировать то же самое на демо-счете, т.е. кинул ордер на другой график, на котором был подвешен эксперт. Но повторить фокус с лавиной ордеров не удалось. При смене графика одновременно сменяется и подвешенный индикатор на индикатор соответствующей валютной пары. Если бы это было не так, то еще можно предположить, что неправильные сигналы давал «неправильный» индикатор. При тех условиях, которые были в тот момент, индикатор сигнала на открытие не давал. Он давал сигнал на закрытие. Будто какая-то неведомая сила открывала ордер, а потом срабатывал индикатор и закрывал его и так без остановки.
Scriptong пишет:

 цитата:
А вот это уже непонятно. Такого быть не должно.


Здесь ничего удивительного нет. Ведь эксперт был уже подвешен к графику USDJPY (раньше в изложении я ошибся: кинул ордер GBPUSD на график не USDCHF, а USDJPY). Естественно после бросания ордера на график эксперт остался.
Scriptong пишет:

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


Все это я и делал, кроме проверки одновременной работы двух экспертов на одной валютной паре на разных графиках с одним и тем же периодом. Выключение связи или света не фатально, т.к. все же есть защитный стоп-лосс, он ведь и без связи действует. Перезапускал терминал, выгружал эксперт и снова загружал с ордерами и без них.
Вообще эксперт я взял из учебника Ковалева, того самого, на который есть ссылка в самом МТ4 в меню «справка-MQL4 community» (раздел «создание обычной программы»). В этом эксперте используются еще функции старого образца init, start и deinit. Я заменил в нем процедуру Criterion – в ней вставил ссылку на свой индикатор посредством iCustom и изменил условия открытия -закрытия. Кстати у автора книги в данной процедуре ордера открываются и закрываются при срабатывании критерия и только. Мне это не понравилось, т.к. при таком подходе как раз и может появиться лавина ордеров (правда я этого не проверял) . Поэтому добавил еще в качестве условия открытия Mas_Tip[0]==0 && Mas_Tip[1]==0, что означает отсутствие ордеров buy и sell, а в качестве условия закрытия Mas_Tip[0]>0 или Mas_Tip[1]>0 , что означает наличие ордеров buy или sell. При этом все работало нормально. Еще правда вызывает сомнения то, что в программе объявлены массивы типа double, например double Mas_Ord_New[31][9] , и их элементы сравниваются потом с помощью знака ==. А как пишет Scriptong с данными типа double так делать нельзя. Видимо тогда не было структур, а сейчас может имеет смысл заменить эти массивы на структуры, позволяющие объединять данные разных типов?
Раньше я использовал флаги для фиксации факта открытия и закрытия ордера. Потом понял, что этого делать нельзя, т.к. в случае перезапуска эксперта при наличии открытого ордера флаг может принять другое значение (true вместо false и наоборот) и нарушится работа программы. Поэтому вместо флагов стал сравнивать элементы массивов с нулем, как описано выше.
Теперь я понял, что в случае какой-то экстренной ситуации лучше просто отключить автоматическую торговлю, чем удалять эксперты.


Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 45
Зарегистрирован: 17.10.14
Репутация: 0
ссылка на сообщение  Отправлено: 24.01.15 08:56. Заголовок: Теперь, коллеги, мо..


Теперь, коллеги, могу поделиться новыми наблюдениями по лавине ордеров. Напомню, что под лавиной понимается множественное открытие и закрытие ордеров без видимых причин с временем жизни ордера не более нескольких секунд.
Оказывается, перетаскивание закрытого ордера на график не являлось прямой причиной возникновения лавины, а лишь способствовало ей. Такой вывод зиждется на том , что лавины образовывались и без моего вмешательства. Так, при тестировании on-line на демо-счете в один день удалось «сгенерировать» целых 4 лавины на разных парах. В терминале было подвешено по 2 разных эксперта к 4-м повторяющимся валютным парам, т.е всего было 8 графиков для 4-х пар (на периодах Н4 и М15). Для лавин было характерно следующее:
- лавина сама заканчивается (значит есть шанс, что полного разорения не будет!);
- все ордера лавины открываются в одну и ту же сторону;
- все ордера лавины закрываются не по стопу, но сигнала закрытия от индикатора нет (сигнал открытия есть);
- количество ордеров в лавине разное: от 2 до 94;
- чаще всего ордер закрывается через 1 сек или в ту же секунду после открытия, а следующий ордер открывается тоже через 1 сек или в ту же секунду после закрытия предыдущего ордера.

Похоже образование лавин как-то связано с тем, что в терминале одновременно присутствует 2 графика одной и той же валютной пары с двумя подвешенными экспертами (не обязательно одинаковыми). Но ведь система этого не запрещает, значит что-то неправильно работает в программе. Вместе с тем если присмотреться к истории закрытых ордеров в моем первом сообщении, то видно, что у двух ордеров s/l и t/p равны нулю. Но этого не должно быть, т.к. в программе оператором OrderModify задаются ненулевые s/l и t/p (у GKFX задать их оператором OrderSend невозможно, t/p задаю нереально большим - 10000 пипсов, т.к. срабатывание t/p мне не нужно, а нулевое значение t/p задать в OrderModify нельзя).

По уму для выяснения причины такого сбоя нужно выводить на печать или в файл при открытии и закрытии ордера все значимые переменные, которые могут влиять на открытие /закрытие, и потом в случае появления лавины проверить их значения. Я решил поступить проще. В рубрике «консультации по программированию» под темой «программное определение закрытии ордера по стопу» я вложил фрагмент программы, который запрещает повторное открытие в ту же сторону после стопа в течение заданного времени. В этом фрагменте надо просто убрать неравенство проверки закрытия по стопу, и тогда будет запрет на все повторные открытия, а не только по стопу, в течение например 1 часа. По моему расчету это должно помешать образованию лавины. Таким образом убиваю двух зайцев – лавину и нежелательное открытие после стопа, ведущее обычно к убытку. Привожу этот фрагмент ниже в модифицированном виде. Предвижу, что Scriptong не согласится с такой полумерой. Оправдание этому вижу одно: с момента возникновения первой лавины эксперт доработан - заменены массивы на структуру, модифицированы условия открытия /закрытия и т.д., так что может предпосылок для лавины уже и нет.

static datetime tstop_buy, tstop_sell;
static bool buy=true, sell=true;
for(i=OrdersHistoryTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol()==Sym)
if(OrderCloseTime()<TimeCurrent()-3600)
break; // более старые ордера, чем 1 час назад, не проверяем
else
{if(OrderType()==0)
{buy=false; // запрещаем открытие buy в ту же сторону
tstop_buy=OrderCloseTime();
break;}
if(OrderType()==1)
{sell=false;
tstop_sell=OrderCloseTime();
break;}}
if(TimeCurrent()-tstop_buy>3600)
buy=true; // через 1 час после закрытия разрешаем открытие buy в ту же сторону
if(TimeCurrent()-tstop_sell>3600)
sell=true;


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1138
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 25.01.15 12:31. Заголовок: Stoletov пишет: зна..


Stoletov пишет:

 цитата:
значит что-то неправильно работает в программе


Видимо, действительно, имеет место конфликт экспертов. Но решается это в два приема:
    1. Эксперт должен фильтровать ордера по своему символу. Тогда при запуске одного и того же эксперта на разных символах конфликт исключен.
    2. Эксперт должен фильтровать ордера по MagicNumber для тех случаев, когда два или более экспертов запущены на одном и том же символе. Пользователь при этом должен помнить о необходимости установки разных MagicNumber у экспертов, запускаемых на одном и том же символе.

В приведенном Вами коде не видна фильтрация по MagicNumber.


Stoletov пишет:

 цитата:
(у GKFX задать их оператором OrderSend невозможно


Да, у GKFX тип исполнения рыночных ордеров - Market Execution, при котором стоп и профит запрещено устанавливать в той же операции, в которой отправляется приказ об открытии ордера. К слову, разработчики терминала уже давно анонсировали дополнительную возможность терминала - разрешение установки стопов и профитов в одном приказе при Market Execution. Я так понимаю, терминал сам дробит такую операцию на две. Но работает эта возможность еще не везде - требуется полное обновление серверных частей всех ДЦ на новый билд. Думаю, в течение этого кода мы такое уже увидим.

Stoletov пишет:

 цитата:
t/p задаю нереально большим - 10000 пипсов, т.к. срабатывание t/p мне не нужно, а нулевое значение t/p задать в OrderModify нельзя


Можно. Это код везде отрабатывает корректно:

 цитата:
int ticket = OrderSend(NULL, OP_BUY, 0.1, Ask, 0, 0, 0);
bool is = OrderModify(ticket, 0, Ask - 500 * Point, 0.0, OrderExpiration());



Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 46
Зарегистрирован: 17.10.14
Репутация: 0
ссылка на сообщение  Отправлено: 26.01.15 16:08. Заголовок: Scriptong пишет: 1...


Scriptong пишет:

 цитата:
1. Эксперт должен фильтровать ордера по своему символу. Тогда при запуске одного и того же эксперта на разных символах конфликт исключен.


Это делается и конфликтов на разных символах не наблюдалось.

Scriptong пишет:

 цитата:
2.Эксперт должен фильтровать ордера по MagicNumber для тех случаев, когда два или более экспертов запущены на одном и том же символе. Пользователь при этом должен помнить о необходимости установки разных MagicNumber у экспертов, запускаемых на одном и том же символе.


А вот это не делается. У меня в эксперте MagicNumber вычисляется через текущее время: MN=TimeCurrent(). Это не я придумал, а автор учебника, из которого взят эксперт. При таком подходе у ордеров, открытых из двух разных экспертов, MagicNumber могут быть равны, если эти ордера откроются в одну и ту же секунду. Не из-за этого ли конфликт? Правда, когда возникала лавина в одном эксперте, в другом эксперте открытых на той же паре ордеров не было (хотя в одном случае как только в одном эксперте ордер закрылся, то в другом эксперте на той же паре в ту же секунду началась лавина). Но я понял: надо задавать MagicNumber как-то иначе, чтобы их потом различать у разных экспертов, запущенных на одной и той же паре. К слову, сравнивать работу двух экспертов в режиме on-line на демо-счете удобно именно на одной и той же паре. Чтобы потом различать, какой ордер от какого эксперта произошел, я ставлю в экспертах в OrderSend разные комментарии (1-2 символа), и оба эксперта запускаю в одном терминале.
Scriptong пишет:

 цитата:
Можно. Это код везде отрабатывает корректно:


Проверил - действительно можно. Когда раньше пытался задать в OrderModify t/p=0, то почему-то не прокатывало. Вот и решил, что так нельзя.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1145
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 26.01.15 22:11. Заголовок: Stoletov пишет: У м..


Stoletov пишет:

 цитата:
У меня в эксперте MagicNumber вычисляется через текущее время: MN=TimeCurrent(). Это не я придумал, а автор учебника, из которого взят эксперт.


У Сергея Ковалева философия на этот счет следующая - на одном счете должна работать одна суперпрограмма и ничего больше. Эта программа должна управлять всем. А потому проблема распознавания своих/чужих ордеров не стоит. У этой точки зрения есть рациональное зерно, но только для того случая, когда подобная программа уже разработана. А вот для этапов разработки этой программы Magic Number, все же, нужен. Более того, код программы-одновалютника (для которой нужен MN) отлаживать намного проще, чем мультивалютного эксперта (для него в принципе MN не обязателен).

Stoletov пишет:

 цитата:
я ставлю в экспертах в OrderSend разные комментарии (1-2 символа), и оба эксперта запускаю в одном терминале.


К сожалению, поле комментария не является константой. Его в любой момент может изменить сторона брокера. Таким образом, по комментарию свои ордера определять не стоит. Вот MN - это незыблемо, подходит даже для таких ситуаций, когда брокер переоткрывает ордера с началом суток (метод начисления свопа путем переоткрытия позиции - ролловер). К тому же, как утверждают разработчики терминала, MN не может видеть брокер.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 48
Зарегистрирован: 17.10.14
Репутация: 0
ссылка на сообщение  Отправлено: 28.01.15 17:43. Заголовок: Scriptong пишет: У ..


Scriptong пишет:

 цитата:
У Сергея Ковалева философия на этот счет следующая - на одном счете должна работать одна суперпрограмма и ничего больше. Эта программа должна управлять всем.


Не знал, что можно одним экспертом управлять торговлей на нескольких валютных парах. В качестве эксперимента попробовал подвесить эксперт с оператором OrserSend(“GBPUSD”, ….) на график USDJPY. Ордер успешно открылся на графике GBPUSD. Получается, что мультивалютный эксперт можно бросить на любую валютную пару, и он будет работать. На мой взгляд мультивалютный эксперт неудобен тем, что если потом захотел работать еще с одной парой, то в программе во многих местах надо будет прописать эту новую пару. Или надо заранее в эксперт включить названия всевозможных пар на перспективу. А преимущество мультивалютного эксперта видимо в том, что легче распределить средства между разными валютными парами. В то время как для одновалютника с целью контроля распределения этих средств надо вводить глобальную переменную клиентского терминала. Интересно узнать, а какой подход у вас, Игорь - один или мульти?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 1154
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 28.01.15 19:45. Заголовок: Stoletov пишет: В к..


Stoletov пишет:

 цитата:
В качестве эксперимента попробовал подвесить эксперт с оператором OrserSend(“GBPUSD”, ….) на график USDJPY.


Только не забывайте, что при работе с другим символом необходимо использовать его данные: не Ask, а SymbolInfoDouble("GBPUSD", SYMBOL_ASK), не High[1], а High("GBPUSD", ТФ, 1) и т. д.

Stoletov пишет:

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


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

Stoletov пишет:

 цитата:
Интересно узнать, а какой подход у вас, Игорь - один или мульти?


Исходя из реалий МТ4 (МТ5), намного удобнее использовать моновалютный советник. При условии, что стратегия основана на показаниях графика одного символа. Такой подход проще как в написании программы, так и в ее контроле - на каких графиках запустил, там и торгуешь.

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

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 3
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет