Automated Trading Championship 2012: Чемпионат стартовал! - страница 5

 
artall:

Ясно, спасибо, похоже сегодня день начался НЕ с прибылей - вот и всё.

А модель ТС событийная, поэтому и спрашивал.

Посмотрим, чем и как он закончится.


Дааааа,уж.

Что- то я не так написал этот блок закрытия - вновь на начале нового дня положительная позиция НЕ закрылась.

Хотя на тесте всё шло!

Может кто подскажет в чём ошибка. Вот в этом куске:

  if(lparam ==CHARTEVENT_NEWBAR_D1 && PositionSelect(sparam))
   {
   if(PositionGetDouble(POSITION_PROFIT)>100.0)
 //--- закрываем позицию по текущему символу
    if(!trade.PositionClose(sparam, Slippage))
     {
      //--- сообщим о неудаче
      Print("Метод PositionClose() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
     }
   else
     {
      Print("Метод PositionClose() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
     }
  }  


 

artall:

  if(lparam ==CHARTEVENT_NEWBAR_D1 && PositionSelect(sparam)) 
   { 
    if(PositionGetDouble(POSITION_PROFIT)>100.0)
 //--- закрываем позицию по текущему символу
       if(!trade.PositionClose(sparam, Slippage))
         {
          Print("Метод PositionClose() потерпел неудачу. Код возврата=",trade.ResultRetcode(),
            ". Описание кода: ",trade.ResultRetcodeDescription());
         }
       else
         {
          Print("Метод PositionClose() выполнен успешно. Код возврата=",trade.ResultRetcode(),
            " (",trade.ResultRetcodeDescription(),")");
         }
   }   

 

1. "Вставляйте код правильно" (с).

2. Прибыль по позиции должна быть не просто "положительной", а больше 100. Выполняется?

 
Yedelkin:

1. "Вставляйте код правильно" (с).

2. Прибыль по позиции должна быть не просто "положительной", а больше 100. Выполняется?

У меня другой вопросы:

1. Чему были равны lparam и sparam ?

2. Как формируются их значения (предположу что это блок обработки событий)?

 
Interesting: У меня другой вопросы: 2. Как формируются их значения (предположу что это блок обработки событий)?
Да судя по всему, эти параметры взяты из статьи Лизара про торговлю с помощью пользовательских событий. Сначала надо получить точный ответ на мой вопрос, а затем - копать дальше, чтобы не прыгать с проверки одного условия на проверку другого.
 
artall:

...

Дело в том мой советник в 00-00 должен был (и будет) закрывать определённые положительные сделки

... 

Кстати, на реальном счете подобная методика может не сработать. В некоторых банках период с 00-00 до 00-05 исключен из торговой сессии.
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 
Yedelkin:

1. "Вставляйте код правильно" (с).

2. Прибыль по позиции должна быть не просто "положительной", а больше 100. Выполняется?

Да, выполняется конечно, иначе не было бы вопроса.
Yedelkin:
Да судя по всему, эти параметры взяты из статьи Лизара про торговлю с помощью пользовательских событий. Сначала надо получить точный ответ на мой вопрос, а затем - копать дальше, чтобы не прыгать с проверки одного условия на проверку другого.

Да, из статьи Лизара, на каждом символе стоят агенты и т.д.

Interesting:

У меня другой вопросы:

1. Чему были равны lparam и sparam ?

2. Как формируются их значения (предположу что это блок обработки событий)?

А там lparam -типа  long и равно произошедшему событию,

sparam - типа string и равно собственно символу, с которого пришло событие.



 
Midas:
Кстати, на реальном счете подобная методика может не сработать. В некоторых банках период с 00-00 до 00-05 исключен из торговой сессии.

Интересное замечание. А вот у товарища выше со скипшотом

отмечеется "новый день" в комментарии.

 

artall:

Yedelkin: 2. Прибыль по позиции должна быть не просто "положительной", а больше 100. Выполняется?

Да, выполняется конечно, иначе не было бы вопроса.

В Вашем вопросе ничего не было сказано про выполнение именно этого условия. Поэтому и был задан уточняющий вопрос.

Итак, если указанное условие выполняется, то получается, что не срабатывает вот это условие, т.е. предыдущее:

if(lparam ==CHARTEVENT_NEWBAR_D1 && PositionSelect(sparam)) 

Соответственно, то ли "lparam!=CHARTEVENT_NEWBAR_D1", то ли "PositionSelect(sparam)==false", то ли соответствующее пользовательское событие вообще не посылается в указанное время. Конечно, было бы лучше, если бы проверка PositionSelect(sparam) была отдельной, типа if(PositionSelect(sparam)). А так остаётся только проверить

  • имеет ли параметр lparam в пользовательском событии значение, соответствующее CHARTEVENT_NEWBAR_D1;
  • соответствует ли  sparam  выбранному символу;
  • какой код ошибки возвращается, если PositionSelect()==false;
  • отправляется ли пользовательское событие в принципе.
 
Midas: Кстати, на реальном счете подобная методика может не сработать. В некоторых банках период с 00-00 до 00-05 исключен из торговой сессии.
Для точного ответа на эту версию ("сработает - не сработает") надо смотреть код Лизара и уточнять, при каких условиях посылается сигнал о наступлении CHARTEVENT_NEWBAR_D1. Вполне возможно, что в описанной Вами ситуации сигнал просто поступит не в 00-00, а в 00-05, т.е. с приходом первого тика нового дня.
 
Yedelkin:

В Вашем вопросе ничего не было сказано про выполнение именно этого условия. Поэтому и был задан уточняющий вопрос.

Итак, если указанное условие выполняется, то получается, что не срабатывает вот это условие, предыдущее:

Соответственно, то ли lparam!=CHARTEVENT_NEWBAR_D1, то ли PositionSelect(sparam)==false. Конечно, было бы лучше, если бы проверка PositionSelect(sparam) была отдельной, типа if(PositionSelect(sparam)). А так остаётся только проверить

  • имеет ли параметр lparam в пользовательском событии значение, соответствующее CHARTEVENT_NEWBAR_D1;
  • соответствует ли  sparam  выбранному символу;
  • какой код ошибки возвращается, если PositionSelect()==false

Про отдельную проверку это верно, я тоже об этом подумал.

На два первых вопроса ответ положительный, а вот по поводу "PositionSelect()==false" не вставил я Принт на ошибку в советнике(и в журнале,соотвт. нет записей,), потому что в тестере не было такого, -не озадачился.

Ещё думаю, что очерёдность событий смешивается\толкается чтоли? Да, нет не так надо было, а как-то так.

1. Пришло событие по символу.

2. Ищем есть ли открытая по нему поза.

3. Если есть, смотрим профит и если больше 100, то кроем.

4. Ну и на каждый НЕТ, продолжаем отслеживать 30-ти мин. события.