объяви функцию как double DlinnaPipSell()
ошибку типа переменной исправлял но это не помагает
не переменной, а функции
double DlinnaPipSell() { int cik; double dlinnaPipSell = 0; for (cik = 0; cik < OrdersTotal(); cik++) { OrderSelect (cik, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MN) dlinnaPipSell = PriceBigSell() - OrderOpenPrice() + dlinnaPipSell; } return (dlinnaPipSell / Point); }так не работает?
плюс проверь, сколько раз вообще функция в if заходит.
код, проще некуда, должен вычислять просадку всех сэлл ордеров в пунктах, по отношению к самому дорогому сэлл ордеру. PriceBigSell() возвращает наибольшую цену из всех сэлл ордеров (работает правильно), но не работает, выдает 0. Работает только в таком виде:
подскажите что не правильно...Хочется обойтись без MathAbsне переменной, а функции
ну да.. не правильно выразился, извини, приводил к одному типу и функцию и переменные которые с ней работают, int или double результат тот же. Я уже думаю что это windows 7 конфликтует, потому что такая же функция, только для бай, работает:
int DlinnaPipBuy() { int cik; double dlinna = 0; for (cik = 0; cik < OrdersTotal(); cik++) { OrderSelect (cik, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MN) dlinna = OrderOpenPrice() - BuyPriceSmall() + dlinna; } return (dlinna / Point); }
Все-таки, похоже, что PriceBigSell() работает неправильно, вопреки Вашей уверенности
"код ... должен вычислять просадку ... "
1. "PriceBigSell() - OrderOpenPrice()" - это не просадка;
2. причина, вероятно, в том, что внутри "PriceBigSell()" имеется "OrderSelect()";
3. в любом случае, вызывать "PriceBigSell()" многократно внутри данного цикла представляется излишним, лучше вызывать один раз перед циклом;
4. возможно, "Dlinna" лучше изменить на "Dlina" или "Distance".
"код ... должен вычислять просадку ... "
1. "PriceBigSell() - OrderOpenPrice()" - это не просадка;
2. причина, вероятно, в том, что внутрои "PriceBigSell()" имеется "OrderSelect()";
3. в любом случае, вызывать "PriceBigSell()" многократно внутри данного цикла представляется излишним, лучше вызывать один раз перед циклом;
4. возможно, "Dlinna" лучше изменить на "Dlina" или "Distance".
1 возможно стоило это назвать разницей в пунктах между самым дорогим и всеми остальными сэлл ордерами
2 там действительно есть OrderSelect() тк отбор ведется перебором, но как это может стать причиной?
3 да согласен дополнительные циклы внутри цикла замедляют (пусть даже и компы сейчас шустрые), красота и рациональность кода важней
4 не совсем понял как имя переменной влияет на работу, вроде бы это не зарезервированное слово..
вообще удивляют меня некоторые моменты:
for (cik = 0; cik < OrdersTotal(); cik++)
for (cik = OrdersTotal(); cik > 0; cik--)
на мой взгляд одинаковые головы цикла, только направление разное, но с одной работает поиск самова дорогова сэлл ордера, а с другой не работает
вообще удивляют меня некоторые моменты:
for (cik = 0; cik < OrdersTotal(); cik++)
for (cik = OrdersTotal(); cik > 0; cik--)
на мой взгляд одинаковые головы цикла, только направление разное, но с одной работает поиск самова дорогова сэлл ордера, а с другой не работает
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
код, проще некуда, должен вычислять просадку всех сэлл ордеров в пунктах, по отношению к самому дорогому сэлл ордеру. PriceBigSell() возвращает наибольшую цену из всех сэлл ордеров (работает правильно), но не работает, выдает 0. Работает только в таком виде:
подскажите что не правильно...Хочется обойтись без MathAbs