tol64: Почему то между 2001 и 2006 годом не тестируются эксперты. Смотрел по евро и фунту. Закрыл терминал, удалил историю. Закачалась заново. Всё равно. До 2001 сделки открываются. А начиная с 2001 по 2006 при наличии сигналов пропуск. Почему?
--- Дополнительная информация. Это происходит только, если в настройках тестера выбран таймфрейм D1. Если выбрать таймфрейм D1 в настройках эксперта, а в настройках тестера меньший ТФ, то пропуска нет. Это баг или есть какое-то этому объяснение?
Еще раз. В справке сказано, что для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect( Symbol() ) непосредственно перед обращением за ними. Приведенный мною код опровергает это утверждение. С точки зрения логики, сам код абсурден, но он подчеркивает неправильность утверждения в справке.
Теперь:
А косяк в том, что при отсутствии позиции функция PositionGetDouble(POSITION_VOLUME) должна возвращать ноль. Все. ИМХО.
Нет, вы ошибаете....
Возвращать ноль если есть (PositionSelect() ) позиция с объем=0.
Или вы думаете что если нет позиция надо возвращат и цена откритие =0 ?!?
А косяк в том, что при отсутствии позиции функция PositionGetDouble(POSITION_VOLUME) должна возвращать ноль.
:) "Косяк" в том, что при отсутствии открытой позиции бессмысленно запрашивать её данные и делать на основании этих данных дальнейшие расчёты.
..Ну вот, допустим, Вы достоверно знаете, что позиция отсутствует. Зачем же запрашивать данные о ней (делать лишние шаги), если уже известно, что позиции нет? Проще чуть переписать код.
papaklass:
Еще раз. В справке сказано, что для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect( Symbol() ) непосредственно перед обращением за ними. Приведенный мною код опровергает это утверждение. С точки зрения логики, сам код абсурден, но он подчеркивает неправильность утверждения в справке.
Приведённый ранее код говорит только том, что автор "для гарантированного получения свежих данных" вызывает функцию PositionSelect(), функция рапортует о своём неудачном завершении, но автор продолжает требовать получения свежих данных о позиции. Правильно?
Но тогда получается следующее:
(а) неудачное завершение функции PositionSelect означает, что свежие данные о позиции не были скопированы в программное окружение (как того хотелось бы автору);
и (б) последующие вызовы PositionGetDouble, PositionGetInteger и PositionGetString будут возвращать данные, скопированные когда-то ранее при удачной работе функции PositionSelect.
Иными словами, разработчики рекомендуют вызывать функцию, чтобы при её удачном завершении продолжать работу со свежими данными о позиции, и совершенно ничего не обещают, если функция вернула false. ...При получении false разработчики рекомендуют несколько иные процедуры :)
2. Более того, рассмотрим новую версию кода:
if(PositionSelect(Symbol()))
{//---еще одно непосредственное обращение//---например, расчитываем объем позиции при доливки
}
else
{
//---например, расчитываем объем позиции при отсутствии позиции
}
Здесь при неудачном завершении функции PositionSelect() предлагается тут же "расчитывать объем позиции при отсутствии позиции". Но кто сказал, что неудачное завершение функции PositionSelect() автоматически означает отсутствие позиции? Причины неудачи с работой функции PositionSelect() могут быть разными.
Рисунком хочу сказать что жизнено важно иметь возможность удалять отложенные ордера при достижении указанной цены. Без такой возможности мне как трейдеру МТ4 значительно интересней. Скажите пожалуйста какие ваши дальнейшие планы в этом направлении. Спасибо.
При работе с тестером очень часто вылетает терминал.
Отчеты о крахах терминала вроде как регулярно поступают разработчикам в автоматическом режиме. Но при желании можно оформить заявку в СД, где указать все подробности и прикрепить логи.
Interesting: Отчеты о крахах терминала вроде как регулярно поступают разработчикам в автоматическом режиме. Но при желании можно оформить заявку в СД, где указать все подробности и прикрепить логи.
То есть та информация, которая находится в разделе Details>> автоматически отправляется к разработчикам при условии включенного интернета? Если так, то вообще здорово. Всё должно быть автоматизированно.)))
Мой вопрос далеко уже улетел.)) Повторюсь.
tol64:
Почему то между 2001 и 2006 годом не тестируются эксперты. Смотрел по евро и фунту. Закрыл терминал, удалил историю. Закачалась заново. Всё равно. До 2001 сделки открываются. А начиная с 2001 по 2006 при наличии сигналов пропуск. Почему?
---
Дополнительная информация. Это происходит только, если в настройках тестера выбран таймфрейм D1. Если выбрать таймфрейм D1 в настройках эксперта, а в настройках тестера меньший ТФ, то пропуска нет. Это баг или есть какое-то этому объяснение?
Дык, посмотрите приведённый автором код. И в каком случае вызывается PositionGetDouble :)
Ну да, получаем данные после после того как определились что позиций в принципе нет и выбор конкретной позиции закончился неудачей...
Странно это как-то.
To Vedelkin
Еще раз. В справке сказано, что для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect( Symbol() ) непосредственно перед обращением за ними. Приведенный мною код опровергает это утверждение. С точки зрения логики, сам код абсурден, но он подчеркивает неправильность утверждения в справке.
Теперь:
А косяк в том, что при отсутствии позиции функция PositionGetDouble(POSITION_VOLUME) должна возвращать ноль. Все. ИМХО.
Нет, вы ошибаете....
Возвращать ноль если есть (PositionSelect() ) позиция с объем=0.
Или вы думаете что если нет позиция надо возвращат и цена откритие =0 ?!?
А косяк в том, что при отсутствии позиции функция PositionGetDouble(POSITION_VOLUME) должна возвращать ноль.
:) "Косяк" в том, что при отсутствии открытой позиции бессмысленно запрашивать её данные и делать на основании этих данных дальнейшие расчёты.
..Ну вот, допустим, Вы достоверно знаете, что позиция отсутствует. Зачем же запрашивать данные о ней (делать лишние шаги), если уже известно, что позиции нет? Проще чуть переписать код.
Еще раз. В справке сказано, что для гарантированного получения свежих данных о позиции рекомендуется вызывать функцию PositionSelect( Symbol() ) непосредственно перед обращением за ними. Приведенный мною код опровергает это утверждение. С точки зрения логики, сам код абсурден, но он подчеркивает неправильность утверждения в справке.
Приведённый ранее код говорит только том, что автор "для гарантированного получения свежих данных" вызывает функцию PositionSelect(), функция рапортует о своём неудачном завершении, но автор продолжает требовать получения свежих данных о позиции. Правильно?
Но тогда получается следующее:
Иными словами, разработчики рекомендуют вызывать функцию, чтобы при её удачном завершении продолжать работу со свежими данными о позиции, и совершенно ничего не обещают, если функция вернула false. ...При получении false разработчики рекомендуют несколько иные процедуры :)
2. Более того, рассмотрим новую версию кода:
Здесь при неудачном завершении функции PositionSelect() предлагается тут же "расчитывать объем позиции при отсутствии позиции". Но кто сказал, что неудачное завершение функции PositionSelect() автоматически означает отсутствие позиции? Причины неудачи с работой функции PositionSelect() могут быть разными.
Хочу еще раз пристать к разработчикаи...
Рисунком хочу сказать что жизнено важно иметь возможность удалять отложенные ордера при достижении указанной цены. Без такой возможности мне как трейдеру МТ4 значительно интересней. Скажите пожалуйста какие ваши дальнейшие планы в этом направлении. Спасибо.
При работе с тестером очень часто вылетает терминал.
При работе с тестером очень часто вылетает терминал.
При работе с тестером очень часто вылетает терминал.
Опишите вашу ситуацию подробно в Cервисдеск, где укажите
Отчеты о крахах терминала вроде как регулярно поступают разработчикам в автоматическом режиме. Но при желании можно оформить заявку в СД, где указать все подробности и прикрепить логи.
Опишите вашу ситуацию подробно в Cервисдеск, где укажите