по моему вообще не верное условие, ну может просто документация не полная, но этот условие вообще не обязано что либо возвращать, это просто выбор позиции по символу
а чтоб узнать есть ли позиция по данному символу, я обычно просто перебирал все позиции и если с этим символом к примеру есть позиция какой нибудь переменной отметку ставлю, а если нет то эта переменная останется без отметки и там уж думаю что дальше делать
по моему вообще не верное условие, ну может просто документация не полная, но этот условие вообще не обязано что либо возвращать, это просто выбор позиции по символу
а чтоб узнать есть ли позиция по данному символу, я обычно просто перебирал все позиции и если с этим символом к примеру есть позиция какой нибудь переменной отметку ставлю, а если нет то эта переменная останется без отметки и там уж думаю что дальше делать
Вы абсолютно не правы.
//+------------------------------------------------------------------+ //| Access functions PositionSelect(...) | //+------------------------------------------------------------------+ bool CPositionInfo::Select(const string symbol) { return(PositionSelect(symbol)); // Вот значение возвращаемое функцией. }
Я-бы проверил такую конструкцию
CTrade trade; CPositionInfo myposition; void OnTick() { bool positionClose = false; if(IsNewBar()) { if(myposition.Select(_Symbol)==true) //Условие 1 { positionClose = trade.PositionClose(_Symbol); } if (positionClose) //Условие 2 { // Открытие сделки } } }
Вопрос - Почему данная конструкция всегда корректно отрабатывает на тестере и никогда не отрабатывает на реале, а конкретно - никогда не заходит в Условие 2 если до этого было выполненно Условие 1 ? Т.е. другими словами почему не выполняется условие отсутствия позиции сразу же после ее закрытия путем trade.PositionClose(_Symbol) ?. Подозреваю что проблема в том что приказ не успевает исполниться к моменту проверки, но как в этом случае простроить данную конструкцию с тем же смыслом ?
Так код пишут только "индусы". Сравнение ==true или == false для логических выражений не нужно. По человечески код должен выглядеть примерно так:
CTrade trade; CPositionInfo myposition; void OpenPosition() { //тут код открытия позиции. } void OnTick() { if(IsNewBar()) { if(myposition.Select(_Symbol)) //Условие 1 { trade.PositionClose(_Symbol); OpenPosition(); } else //Условие 2 { // Открытие сделки OpenPosition(); } } }
Так код пишут только "индусы". Сравнение ==true или == false для логических выражений не нужно. По человечески код должен выглядеть примерно так:
А если по стратегии надо на открытии бара закрыть имеющуюся позицию и открыть новую??? Как ваш код будет обработан?
На одном баре будет закрытие и только на следующем открытие новой позиции... Не всегда ельза рулит...
А если по стратегии надо на открытии бара закрыть имеющуюся позицию и открыть новую??? Как ваш код будет обработан?
На одном баре будет закрытие и только на следующем открытие новой позиции... Не всегда ельза рулит...
if(myposition.Select(_Symbol)) //Условие 1 { trade.PositionClose(_Symbol);//закрытие позиции OpenPosition();//открытие позиции }
А это тогда что? Вы невнимательно смотрели код.
....
Ваш пример кода, в случае если позиций нет, вообще ни чего открывать не будет. Если ваш пример использовать, то примерно так:
CTrade trade; CPositionInfo myposition; void OnTick() { bool positionClose = false; if(IsNewBar()) { if(myposition.Select(_Symbol)) //Условие 1 { positionClose = trade.PositionClose(_Symbol); }else positionClose = true; if (positionClose) //Условие 2 { // Открытие сделки } } }
P.S. Я не уверен возвращает ли функция trade.PositionClose(_Symbol) какое либо значение, если нет тогда это вообще работать не будет.
Если не хотите использовать else то можно писать так:
CTrade trade; CPositionInfo myposition; void OpenPosition() { //тут код открытия позиции. } void OnTick() { if(IsNewBar()) { if(myposition.Select(_Symbol)) //Условие 1 { trade.PositionClose(_Symbol); OpenPosition(); } if(!myposition.Select(_Symbol)) //Условие 2 { // Открытие сделки OpenPosition(); } } }
А это тогда что? Вы невнимательно смотрели код.
....
Ваш пример кода, в случае если позиций нет, вообще ни чего открывать не будет. Если ваш пример использовать, то примерно так:
P.S. Я не уверен возвращает ли функция trade.PositionClose(_Symbol) какое либо значение, если нет тогда это вообще работать не будет.
Если не хотите использовать else то можно писать так:
Ладно, не будем мериться ... что в алгоритме знает только автор. Я не предлагал готового решения. Если писать самому, то условия подбираются согласно своего алгоритма. А тот кусок кода я понял именно так как там написано.
Условие 1 наличие позиции - закрытие этой позиции
Условие 2 успешное закрытие позиции, соответственно отсутствие оной - открытие новой
Условия отсутствия позиций вообще, в этом куске кода нет...
Ладно, не будем мериться ... что в алгоритме знает только автор. Я не предлагал готового решения. Если писать самому, то условия подбираются согласно своего алгоритма. А тот кусок кода я понял именно так как там написано.
Условие 1 наличие позиции - закрытие этой позиции
Условие 2 успешное закрытие позиции, соответственно отсутствие оной - открытие новой
Условия отсутствия позиций вообще, в этом куске кода нет...
Да я и не мерился :) Просто почему то решил, что вы защищаете любителей писать "индусский код".
А зачем навязывать собственное мнение другим? Ну хочет человек писать так, ну и пусть пишет. Когда-то придёт к пониманию, что лишнее нажатие клавки утомительно и не будет так писать. И многое другое необязательное будет опускать. Зачем такие намёки на оскорбление? Или, как минимум, неуважительное отношение к инакомыслящим.
Какие оскорбления, о чем вы? Мой первоначальный комментарий предназначался топик стартеру. Вы по какой то причине на мой комментарий вставили свой необдуманный ответ, даже не соизволив нормально прочитать предложенный мной код. Не надо делать из мухи слона, надо же так загнуть "неуважительное отношение к инакомыслящим". Вы еще меня толерантности поучите. :)
О нём я и говорил. Было-бы это адресовано мне реакция была-бы не такая.
На ваш комментарий я не давал никакого ответа, а задал вопрос. В этом и вся разница, я задал вопрос, а вы навязывали человеку своё мнение с оценкой его способностей.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вопрос - Почему данная конструкция всегда корректно отрабатывает на тестере и никогда не отрабатывает на реале, а конкретно - никогда не заходит в Условие 2 если до этого было выполненно Условие 1 ? Т.е. другими словами почему не выполняется условие отсутствия позиции сразу же после ее закрытия путем trade.PositionClose(_Symbol) ?. Подозреваю что проблема в том что приказ не успевает исполниться к моменту проверки, но как в этом случае простроить данную конструкцию с тем же смыслом ?