Interesting: У меня другой вопросы: 2. Как формируются их значения (предположу что это блок обработки событий)?
Да судя по всему, эти параметры взяты из статьи Лизара про торговлю с помощью пользовательских событий. Сначала надо получить точный ответ на мой вопрос, а затем - копать дальше, чтобы не прыгать с проверки одного условия на проверку другого.
2. Прибыль по позиции должна быть не просто "положительной", а больше 100. Выполняется?
Да, выполняется конечно, иначе не было бы вопроса.
Yedelkin: Да судя по всему, эти параметры взяты из статьи Лизара про торговлю с помощью пользовательских событий. Сначала надо получить точный ответ на мой вопрос, а затем - копать дальше, чтобы не прыгать с проверки одного условия на проверку другого.
Да, из статьи Лизара, на каждом символе стоят агенты и т.д.
Interesting:
У меня другой вопросы:
1. Чему были равны lparam и sparam ?
2. Как формируются их значения (предположу что это блок обработки событий)?
А там lparam -типа long и равно произошедшему событию,
sparam - типа string и равно собственно символу, с которого пришло событие.
Соответственно, то ли "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, т.е. с приходом первого тика нового дня.
В Вашем вопросе ничего не было сказано про выполнение именно этого условия. Поэтому и был задан уточняющий вопрос.
Итак, если указанное условие выполняется, то получается, что не срабатывает вот это условие, предыдущее:
Соответственно, то ли 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-ти мин. события.
Ясно, спасибо, похоже сегодня день начался НЕ с прибылей - вот и всё.
А модель ТС событийная, поэтому и спрашивал.
Посмотрим, чем и как он закончится.
Дааааа,уж.
Что- то я не так написал этот блок закрытия - вновь на начале нового дня положительная позиция НЕ закрылась.
Хотя на тесте всё шло!
Может кто подскажет в чём ошибка. Вот в этом куске:
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:
1. "Вставляйте код правильно" (с).
2. Прибыль по позиции должна быть не просто "положительной", а больше 100. Выполняется?
1. "Вставляйте код правильно" (с).
2. Прибыль по позиции должна быть не просто "положительной", а больше 100. Выполняется?
У меня другой вопросы:
1. Чему были равны lparam и sparam ?
2. Как формируются их значения (предположу что это блок обработки событий)?
...
Дело в том мой советник в 00-00 должен был (и будет) закрывать определённые положительные сделки
...
1. "Вставляйте код правильно" (с).
2. Прибыль по позиции должна быть не просто "положительной", а больше 100. Выполняется?
Да судя по всему, эти параметры взяты из статьи Лизара про торговлю с помощью пользовательских событий. Сначала надо получить точный ответ на мой вопрос, а затем - копать дальше, чтобы не прыгать с проверки одного условия на проверку другого.
Да, из статьи Лизара, на каждом символе стоят агенты и т.д.
У меня другой вопросы:
1. Чему были равны lparam и sparam ?
2. Как формируются их значения (предположу что это блок обработки событий)?
А там lparam -типа long и равно произошедшему событию,
sparam - типа string и равно собственно символу, с которого пришло событие.
Кстати, на реальном счете подобная методика может не сработать. В некоторых банках период с 00-00 до 00-05 исключен из торговой сессии.
Интересное замечание. А вот у товарища выше со скипшотом
отмечеется "новый день" в комментарии.
artall:
Да, выполняется конечно, иначе не было бы вопроса.
В Вашем вопросе ничего не было сказано про выполнение именно этого условия. Поэтому и был задан уточняющий вопрос.
Итак, если указанное условие выполняется, то получается, что не срабатывает вот это условие, т.е. предыдущее:
Соответственно, то ли "lparam!=CHARTEVENT_NEWBAR_D1", то ли "PositionSelect(sparam)==false", то ли соответствующее пользовательское событие вообще не посылается в указанное время. Конечно, было бы лучше, если бы проверка PositionSelect(sparam) была отдельной, типа if(PositionSelect(sparam)). А так остаётся только проверить
В Вашем вопросе ничего не было сказано про выполнение именно этого условия. Поэтому и был задан уточняющий вопрос.
Итак, если указанное условие выполняется, то получается, что не срабатывает вот это условие, предыдущее:
Соответственно, то ли lparam!=CHARTEVENT_NEWBAR_D1, то ли PositionSelect(sparam)==false. Конечно, было бы лучше, если бы проверка PositionSelect(sparam) была отдельной, типа if(PositionSelect(sparam)). А так остаётся только проверить
Про отдельную проверку это верно, я тоже об этом подумал.
На два первых вопроса ответ положительный, а вот по поводу "PositionSelect()==false" не вставил я Принт на ошибку в советнике(и в журнале,соотвт. нет записей,), потому что в тестере не было такого, -не озадачился.
Ещё думаю, что очерёдность событий смешивается\толкается чтоли? Да, нет не так надо было, а как-то так.
1. Пришло событие по символу.
2. Ищем есть ли открытая по нему поза.
3. Если есть, смотрим профит и если больше 100, то кроем.
4. Ну и на каждый НЕТ, продолжаем отслеживать 30-ти мин. события.