Полезные советы для Участников Чемпионата - страница 11

 
VNIK писал (а):

Извините за нескромный вопрос к организаторам Чемпионата:

Как будет решаться вопрос с налогооблажением приза ( ведь сумма каждого приза очень большая):

каждый призер будет уплачивать сам? ( и по какой ставке?) или это будет решено централизовано? ( т.е. налоги уже учтены?).

Жалко ведь будет отдать полприза на налоги!

Солидарен с вами, мне тоже будет жалко отдавать половину вашего приза на уплату своих налогов...
А вообще-то лучше совсем не выигрывать, чтобы не жалко было.. .
 
VNIK:

Извините за нескромный вопрос к организаторам Чемпионата:

Как будет решаться вопрос с налогооблажением приза ( ведь сумма каждого приза очень большая):

каждый призер будет уплачивать сам? ( и по какой ставке?) или это будет решено централизовано? ( т.е. налоги уже учтены?).

Жалко ведь будет отдать полприза на налоги!


Да, призеры сами оплачивают все налоги - такова стандартная практика по отношению к призам во всем мире.
 
Никак не могу протестировать, будет ли всегда корректно работать такое закрытие ордеров:
while (OrdersTotal()>0)
   {
      OrderSelect(0,SELECT_BY_POS);
      if (OrderType()==OP_BUY)       OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      else if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      
      err=GetLastError();
      if (err==135 || err==138) RefreshRates();
   }
Вопрос в следующем: если код ошибки не будет равен 135 или 138 произойдет ли зацикливание? Если да, то как этого избежать, при этом с гарантией, что ордера закроются?
 
MAEstro:
Никак не могу протестировать, будет ли всегда корректно работать такое закрытие ордеров:
Тут ошибка на ошибке. Я насчитал 4 ошибки и все они катастрофические.
Прочтите еще раз статью с советами, пожалуйста.
 
Я эти советы помню наизусть, но похоже мало толку :(

Грубое пренебрежение контролем над ошибками с зацикливанием
(у меня стоит контроль на ошибки, отложенные ордера не используются, или ещё надо делать условие на выход из цикла? Как тогда быть с гарантированностью закрытия ордеров? Или я не все коды ошибок отработал?)

Отсутствие контроля за OrderSelect - асинхронность процессов в действии
(да, я не проверяю, что возвращает Order_Select! Ну допустим если в данном конкретном случае вернет false, что изменится внутри цикла, или что будет некорректно? Я же не модифицирую ордер, а закрываю его!)

Пропуск функции обновления рыночного окружения через RefreshRates()
(вроде рефрешусь, тут должно быть все нормально)

Может просто есть готовый кусок кода, по закрытию ВСЕХ ордеров? Буду признателен, если выложите!

P.S. то, что предлагал Rosh http://www.alpari-idc.ru/ru/experts/articles/9.html , не дает гарантии на закрытие ордеров!
 
Даже 5 ошибок:
  1. не проверяется результат OrderSelect
  2. не проверяется явным образом результат OrderClose()
  3. GetLastError() может вызываться без торговых операций (например, если нарвались на отложенных ордер)
  4. RefreshRates() вызывается не всегда, а лишь при отказах - грубейшая ошибка
  5. если в списке есть отложенные ордеры, то 100% зацикливание
Как результат: в 9 строках 5 ошибок - код только выкинуть.
 
Renat:
Даже 5 ошибок:
  1. не проверяется результат OrderSelect
  2. не проверяется явным образом результат OrderClose()
  3. GetLastError() может вызываться без торговых операций (например, если нарвались на отложенных ордер)
  4. ...
Как результат: в 9 строках 5 ошибок - код только выкинуть.
А зачем всё это громоздить в эксперт на конкурс? Почитать журнал?
OrderSelect должен выбрать , а OrderClose закрыть нужные ордера.
А ошибок быть не должно :-)
Или за счёт клиента :-)
 
Renat писал (а):
Даже 5 ошибок:
  1. не проверяется результат OrderSelect
  2. не проверяется явным образом результат OrderClose()
  3. GetLastError() может вызываться без торговых операций (например, если нарвались на отложенных ордер)
  4. RefreshRates() вызывается не всегда, а лишь при отказах - грубейшая ошибка
  5. если в списке есть отложенные ордеры, то 100% зацикливание
Как результат: в 9 строках 5 ошибок - код только выкинуть.

Задача: закрыть все ордера со 100% гарантией
Ограничения: не используются отложенные ордера

1. Зачем проверять результат, если требуется закрыть ордер? Если возвращает false, то вернется к нему в следующем проходе, так как используется цикл while.
2. См. п.1.
3. Для этого есть проверка на коды ошибок
4. Если обновлять всегда, тогда нет смысла проверять на ошибки :(
5. Нет отложенных ордеров

Все примеры по закрытию ордеров, которые я нашел в поиске, однопроходные и работают только если все хорошо с сервером, нет никаких реквот и т.д. И все они приводят к тому, что в один прекрасный момент, у нас не закроется какой-нибудь ордер и мы хорошо влетим... Если я не прав, поправте меня, или дайте ссылку, где я могу убедиться в своей неправоте.

Конечно, я прекрасно понимаю, что мой код может привести к зацикливанию, но на мой взгляд, это лучше, чем риск не закрытия ордера, который может привести к серъезным финансовым потерям.
Хотя лучше, чтобы все ордера закрывались со 100% гарантией и не было вероятности зацикливания, вот такой код я и хочу от Вас получить =)

Вот немного измененный код, который даже должен учитывать отложенные ордера:
while (OrdersTotal()>0)
   {
      OrderSelect(0,SELECT_BY_POS);
      if (OrderType()==OP_BUY)       OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      else if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      else OrderDelete(OrderTicket());
      
      RefreshRates();
      err=GetLastError();
      if (err!=135 && err!=138 && err!=0) break;
   }

Он не такой "безбашенный", как предыдущий?
Я так и не понял, зачем в данном случае проверять OrderSelect и OrderClose?
 
К сожалению, никаких гарантий по торговым операциям никто не даст. Указанный код гораздо лучше предыдущего.

OrderSelect надо всегда проверять, об этом явно сказано в Полезных советах:
  • Отсутствие контроля за OrderSelect - асинхронность процессов в действии


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

 
Renat:
К сожалению, никаких гарантий по торговым операциям никто не даст. Указанный код гораздо лучше предыдущего.

OrderSelect надо всегда проверять, об этом явно сказано в Полезных советах:
  • Отсутствие контроля за OrderSelect - асинхронность процессов в действии

    ... Позиции модифицируются, добавляются и удаляются. ...

Допустим, позиция модифицируется. По какому-то условию происходит запрос на выбор ордера. Происходит ошибка. Что можно изменить? В следующий тик может не оказаться исходных условий, зачем мне прежняя ошибка?
Про "добавляются и удаляются" без комментариев :-(
Пожалуйста, приведите мне работающий пример кода с использованием OrderSelect для получения OrderCloseTime.
Причина обращения: