[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 82
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо за помощь. Логику с установкой флага и функцией возвращения количества ордеров я понял. Но меня ещё интересует момент, когда ордер закрывается. Получается, что условие флага снова стремится поставить ордер, а функция возвращения говорит, что ордеров стало на 1 меньше и тоже инициализирует открытие позиции. Поправьте, если я что упустил.
из того кода, что вы предоставили, условие стоит тока в одном месте (BUY=true) и пока флаг не изменится повторного открытия не произойдёт..т.к. вызов функции на открытие позиции идёт из этого блока условия..А флаг в данном коде может измениться только после перезапуска советника, когда произойдёт инициализация переменной со значением true.
или я не понял вопроса:)
из того кода, что вы предоставили, условие стоит тока в одном месте (BUY=true) и пока флаг не изменится повторного открытия не произойдёт..т.к. вызов функции на открытие позиции идёт из этого блока условия..А флаг в данном коде может измениться только после перезапуска советника, когда произойдёт инициализация переменной со значением true.
или я не понял вопроса:)
Спасибо, всё поняли верно. Сейчас реализую.
Вот эта версия оказалась рабочей. Огромное спасибо Вам и IgorM:
string Val="";
Val = iBands(NULL,0,50,2,0,PRICE_CLOSE,MODE_LOWER,0);
string substr=StringSubstr(Val,0,1);
point_low=StrToDouble(substr);
substr=StringSubstr(Val,2,1);
point_low+=StrToDouble(substr)/10;
substr=StringSubstr(Val,3,1);
point_low+=StrToDouble(substr)/100;
substr=StringSubstr(Val,4,1);
point_low+=StrToDouble(substr)/1000;
substr=StringSubstr(Val,5,1);
point_low+=StrToDouble(substr)/10000;
substr=StringSubstr(Val,6,1);
point_low+=StrToDouble(substr)/100000;
substr=StringSubstr(Val,7,1);
point_low+=StrToDouble(substr)/1000000; //тут плюсуем 6-ю цифру после запятой.
Люди, НИЧЕГО не помогает! Ну никак не могу добиться чтоб получилось значение с 5 знаками после запятой. обыграл все варианты какие смог придумать и перевод строки в число и перевод подстроки в число, и вынимал цифры (пример выше) и тупо плюсовал поштучно, дальше 4-го знака просто не плюсует а начинает округлять до 4-го знака. даже всунул прибавление 6-го знака после запятой. всё равно лажа(
Может такое быть что Alert не отображает дальше 4-го знака переменные дабл?(строку полностью показывает) я уже не знаю что думать.. мистика какая то(
Народ, помогите пожалуйста: написал два связанных между собой советника(не торгуют, а только создают GlobalVarы) и думаю, что на их основе можно было б сделать индикатор эквиобъемных графиков похожий на обычный график цен в мт4, но никак не соображу каким образом все это дело нужно нарисовать в "indicator_separate_window". Или если кто уже юзает нечто подобное - поделитесь кодом:)
Может такое быть что Alert не отображает дальше 4-го знака переменные дабл?(строку полностью показывает) я уже не знаю что думать.. мистика какая то(
да. он (как и Print) отображает стандарт 4 знака, если выводится только одно число.
для большей точности используйте DoubleToStr
РРРРРРРРРРРРРР. точно, Терминал в Alert не отображает дальше 4 знака.. перекинул дабл обратно в строку и вынул на экран посмотреть-всё корректно.
пол дня убил на этот тупняк. жесть, а всё было рабочее изначально(
Люди, НИЧЕГО не помогает! Ну никак не могу добиться чтоб получилось значение с 5 знаками после запятой. обыграл все варианты какие смог придумать и перевод строки в число и перевод подстроки в число, и вынимал цифры (пример выше) и тупо плюсовал поштучно, дальше 4-го знака просто не плюсует а начинает округлять до 4-го знака. даже всунул прибавление 6-го знака после запятой. всё равно лажа(
Может такое быть что Alert не отображает дальше 4-го знака переменные дабл?(строку полностью показывает) я уже не знаю что думать.. мистика какая то(
Ну как всегда всё опирается в эксперимент. Пишем скрипт:
Как видим, к скрипту подключена dll-ка. В ней всего одна функция, которая отбрасывает дробную часть числа. Длл-ку я приложил к данному посту. Теперь кидаем скрипт последовательно на 2 валютные пары. Я кинул на фунт и на еврояпонца. На фунте у меня 4 знака после запятой. На еврояпонце - два. Вот результат работы скрипта:
По фунту видим как последовательно перемещается запятая. И так же видно, что на последнем делении в дробной части остаётся 4 цифры. Можно сделать допущение, что поскольку Дигитс у меня = 4, то отсекается пятая цифра после запятой. Значит и на еврояпонце должно в результате остаться только 2 цифры после запятой, так как дигитс на нём = 2. Однако эксперимент показывает, что на нём тоже в результате получается 4 цифры после запятой. Значит наше предположение не верно и может быть происходит округление. Попробуем заменить конечную 4 на 7. Результат:
И что мы видим? Теперь результирующая пятёрка превращается в шестёрку. Следовательно происходит автоматическое округление.
Не знаю, как поведёт себя скрипт на пятизнаке, но работа на четырёх и двух-знаке меня не удовлетворила - терминал вмешался и сделал округление, о котором его ни кто не просил. Знач задавать вопросы нужно разработчикам. Либо - вариант 2 - снимаем показания индикатора, вгоняем их в строку, передаём строку в длл-ку, обрабатываем там данные как нам нужно, возвращаем из длл-ки торговый приказ.
Инфа из справки (По алерту):
Данные типа double выводятся с 4 десятичными цифрами после точки. Для вывода чисел с большей точностью используйте функцию DoubleToStr().
Вот и поди разберись зачем разработчики такое сделали...
спасибо, изучил код, очень интересно. Всё, как я описал выше, оказлось проще: терминал просто в окошке не отображает дальше 4-й цифры. а все идеи были рабочими, просто по-разному решали вопрос преобразования:)
зы. В который раз убеждаюсь, что все проблемы решаются логическим путём, а тут ситуация была изначально нелогична, поэтому не там искали затык :)