Ошибки, баги, вопросы - страница 3195

 
Скорее всего тут нужно создавать указатель на CGraphic а потом его удалять
 
Aleksei Beliakov #:
Скорее всего тут нужно создавать указатель на CGraphic а потом его удалять

Можете кодом пример показать - пока не понял как.

 

В общем проблема оказалась в том, что код генерировал новое имя объекта

 string NameGraf="Test_"+Type+"_";

и удалялась только один последний объект (точка), как я понял.

 

Добавлю, что у CGraphic нет возможности получить координаты с кривой - получается дорога в один конец.

И получить имя кривой, связать её с индексом - не ясно как.

 

В статистике тестера неправильно подсчитывается общая комиссия (в составе Gross Loss), также Gross Profit.

И как можно получить размер комиссии для символа?


 
Petros Shatakhtsyan #:

В статистике тестера неправильно подсчитывается общая комиссия (в составе Gross Loss), также Gross Profit.

Каждой сделке сопоставляется сумма следующих DEAL-свойств

  • DEAL_COMMISSION
  • DEAL_SWAP
  • DEAL_PROFIT
  • DEAL_FEE

Далее отрицательные числа складываются и получается Gross Loss, положительные - Gross Profit. Смысл этих показателей совсем не такой, как в MT4. Поэтому и PF обозначает несколько иное.


В отчете количество таких сделок в поле Total Deals.

 

Билд 3320 - решил оптимизировать код советника, ну думаю, есть хитрая фишка "Начать профилирование на исторических данных" - запускаю, выявляю точку избыточного потребления - оптимизирую - запускаю профилирование работает медленней, а если оптимизирую и запускаю обычную компиляцию - быстрей.

Запустил два раза подряд профилирование - ничего не менял в коде - время прохода отличается на 20 секунд и результаты разные калькуляции профилировщика.

Вторая попытка

Фин результат сходится.

Режим моделирования тиков OHLC.

Добавлено:

Закрыл все окна в терминале и ещё раз запустил

Повторный запуск пошел опять накручивать счетчики - ерунда какая то


 
fxsaber #:

Каждой сделке сопоставляется сумма следующих DEAL-свойств

  • DEAL_COMMISSION
  • DEAL_SWAP
  • DEAL_PROFIT
  • DEAL_FEE

Далее отрицательные числа складываются и получается Gross Loss, положительные - Gross Profit. Смысл этих показателей совсем не такой, как в MT4. Поэтому и PF обозначает несколько иное.


В отчете количество таких сделок в поле Total Deals.

Чтобы использовать DEAL_COMMISSION, надо копаться в истории и поискать все сделки символа.

И поскольку все брокерские компании указывают размер комиссии для каждого символа, а также кредитное плечо,то можно было получить размер комиссии символа,

например задавая: SYMBOL_COMMISSION, а также реальное плечо символа:  SYMBOL_LEVERAGE.

Они значительно ускорят расчеты.

 

PositionGetDouble

Функция возвращает запрошенное свойство открытой позиции, предварительно выбранной при помощи функции PositionGetSymbol или PositionSelect. Свойство позиции должно быть типа double.  Существует 2 варианта функции.

1. Непосредственно возвращает значение свойства.

double  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id      // идентификатор свойства
   );

2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром.

bool  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // идентификатор свойства
   double&                        double_var       // сюда примем значение свойства
   );

Параметры

property_id

[in]  Идентификатор свойства позиции. Значение может быть одним из значений перечисления ENUM_POSITION_PROPERTY_DOUBLE.

double_var

[out]  Переменная типа double, принимающая  значение запрашиваемого свойства.

Возвращаемое значение

Значение типа double. В случае неудачного выполнения возвращает 0.

движок форума зачем-то разделил выделенный текст на несколько отдельных после придания ему стиля "Предупреждение", но пост не об этом.


Вопрос 1. функцией PositionGetDouble () получаем значение, к примеру SL или TP позиции, получаем 0.0, что это будет означать, что SL или TP у позиции нет, или что получена ошибка при выполнении функции? - неизвестно.

Вопрос 2. у брокера Just2Trade при исполнении функции OrderSend () структура MqlTradeResult значение price (Цена в сделке, подтверждённая брокером) всегда возвращает 0.0, чья это ошибка, MT5 или брокера? - очевидно, что брокера, но не это самое интересное, а то, что в тестере эта функция заполняет структуру результата нормально. таким образом, советник, отлаженный и протестированный в тестере, не сможет нормально работать на счете брокера в некоторых случаях построения логики. причем если сразу же запросить цену позиции после выполнения функции  OrderSend () функцией  PositionGetDouble (), то получим 0.0 (см. Вопрос 1), но, подождав 1 секунду, запросив снова цену позиции функцией PositionGetDouble (), получим.... цену позиции!!!


„В действительности всё не так, как на самом деле.“ —  (с) Антуан Мари Жан-Батист Рожер де Сент-Экзюпери Станислав Ежи Лец

 
Andrey Dik #:

Вопрос 1. функцией PositionGetDouble () получаем значение, к примеру SL или TP позиции, получаем 0.0, что это будет означать, что SL или TP у позиции нет, или что получена ошибка при выполнении функции? - неизвестно.

Ошибка может быть получена только в случае, если ни разу до этого не была удачно вызвана PositionSelect*-функция. Но в таком случае и POSITION_TICKET будет нулевой.

Вопрос 2. у брокера Just2Trade при исполнении функции OrderSend () структура MqlTradeResult значение price (Цена в сделке, подтверждённая брокером) всегда возвращает 0.0, чья это ошибка, MT5 или брокера? - очевидно, что брокера, но не это самое интересное, а то, что в тестере эта функция заполняет структуру результата нормально. таким образом, советник, отлаженный и протестированный в тестере, не сможет нормально работать на счете брокера в некоторых случаях построения логики.

Видимо, речь идет про маркет-ордер. Описанное поведение правильное, просто еще не получили представление, как устроено. Собственно, для этого и пишутся торговые библиотеки.

причем если сразу же запросить цену позиции после выполнения функции  OrderSend () функцией  PositionGetDouble (), то получим 0.0 (см. Вопрос 1), но, подождав 1 секунду, запросив снова цену позиции функцией PositionGetDouble (), получим.... цену позиции!!!

Если PositionSelect выполнился удачно, то PositionGet* будет отрабатывать без ошибок.