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

 
fxsaber #:
Чтобы не быть голословным, вот скрин из записи в блоге. Смотрим столбец Commission. В скобках размер комиссии в пипсах, он почти никуда не гуляет (3.37 - 3.41) даже в таком тяжелом и редком контексте. Тупо взята из истории торговли.
и что это подтверждает/опровергает?...
речь о том, что в реалтайм трейдеру неудобно мониторить PL, поскольку он без учета комиссии. 
да бросьте уже, я ж говорю, у Вас аргументация нормальная отсутствует, чего даже стоит Ваше выражение "сделайте минимальным лотом трейд, что бы узнать комиссии" не выдерживает никакой критики, потому что тогда комиссия будет настолько не точной, что это теряет практический смысл, мало того что смысла нет практического, так ещё и не решает проблему мониторинга PL. 
 
Andrey Dik #:
речь о том, что в реалтайм трейдеру неудобно мониторить PL, поскольку он без учета комиссии. 

Открыл демо-счет и на нем единственную позицию для чистоты эксперимента. Написал очень сложный скрипт.

// Вычисляет комиссию, которая будет начислена при закрытии текущей позиции.
#property script_show_inputs

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

input ulong inPositionTicket = 0;

void OnStart()
{
  if (OrderSelect(inPositionTicket, SELECT_BY_TICKET))
  {
    OrderPrint();

    const string Str = OrderCloseTime() ? "Position " + (string)inPositionTicket + " is closed. Full Commission = "
                                        : "The commission for closing position " + (string)inPositionTicket +  " will be ";
    
    Alert(Str + DoubleToString(OrderCommission(), 2));
  }
}


Запускаем.


Скрипт сообщил, что доп. комиссия при закрытии будет равна -5.42.


Надо бы проверить. Закрываем позицию и смотрим сделки.

Удивительное совпадение!


Запускаем снова скрипт.

Снова совпадение!


ЗЫ Правильнее делать, конечно, так. Но для демонстрации сойдет. В большинстве случаев будет работать даже это.

 
fxsaber #:

b3391
b3406
Можешь проверить у себя?
А то все отмолчались.
С CopyTicks() такое же происходит.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Roman, 2022.08.26 18:27

b3391

Запускаю этот код в тестере, на кастомном символе.
Почему в тестере CopyTicksRange() копирует по одному нарастающему объекту?
А в терминале возвращает все доступные. 

//+------------------------------------------------------------------+
//|                                                    TestTicks.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

MqlTick tick[];

int T = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   T = CopyTicksRange("LJ", tick, COPY_TICKS_TRADE, 0, 0);
   Print("Скопировано тиков:  ", T);

}
//+------------------------------------------------------------------+
2022.08.26 19:17:58.672 LJ,M1: testing of Experts\TestTicks.ex5 from 2022.08.22 00:00 to 2022.08.23 00:00 started
2022.08.26 19:17:58.714 LJ : real ticks begin from 2022.08.22 00:00:00
2022.08.26 19:17:58.715 2022.08.22 00:00:44   Скопировано тиков:  1
2022.08.26 19:18:01.114 2022.08.22 00:01:15   Скопировано тиков:  2
2022.08.26 19:18:03.515 2022.08.22 00:01:44   Скопировано тиков:  3
2022.08.26 19:18:05.916 2022.08.22 00:02:12   Скопировано тиков:  4
2022.08.26 19:18:08.316 2022.08.22 00:02:32   Скопировано тиков:  5
2022.08.26 19:18:10.716 2022.08.22 00:02:52   Скопировано тиков:  6
2022.08.26 19:18:13.117 2022.08.22 00:04:05   Скопировано тиков:  7
2022.08.26 19:18:15.517 2022.08.22 00:04:21   Скопировано тиков:  8

 
Roman #:

b3391
b3406
Можешь проверить у себя?
А то все отмолчались.
С CopyTicks() такое же происходит.

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

 
fxsaber #:

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

Не совсем понимаю, что значит проброшены. 
CopyTicks и CopyTicksRange разве не должны так же работать как в терминале?
То есть возвращать количество запрошенных тиков.
А не по одному прибавлять на каждом событии OnTick(). 
В визуальном режиме, ставлю медленный прогон, и всё равно так же.

UPD
С пробросом вроде дошло.
Но как тогда узнать количество всех доступных тиков для цикла?
Чтоб их пробросить.
Как же будут МО тестировать, с таким то костылём...

int OnInit()
{
   for(int i=0; i<?; i++)
      T = CopyTicksRange(_Symbol, tick, COPY_TICKS_TRADE, 0, 0);
      
   return(INIT_SUCCEEDED);
}


Renat Fatkhullin #:

Ренат, было бы разумно иметь штатную функцию,
которая возвращала бы количество всех доступных тиков по указанному символу.
Что-то наподобие TicksSize(_Symbol);
Полезно не только для этого случая,
но и чтоб лишний раз не дёргать COPY рейндж, когда необходимо знать только размер.

 

Объясняли раньше про комиссию открытых позиций - ее в общем случае нельзя точно рассчитать. Ссылки на частные случаи не подходят.

За любую ошибку нас будут(вы же в первую очередь) обвинять до конца жизни. Учтите, что любой брокер получит не только обвинения во введение в заблуждение, но и [до]судебные иски/предложения от юристов.

Поэтому правильно показывать комиссию по конкретным сделкам, а не на суперпозиции множества операций. Тем более, есть комиссии сложные многоуровневые и накопительные по проторгованному объему. Когда брокер их активирует, все аналитические методы по истории сделок начнут показывать ошибку.

 
Renat Fatkhullin #:

Объясняли раньше про комиссию открытых позиций - ее в общем случае нельзя точно рассчитать. Ссылки на частные случаи не подходят.

За любую ошибку нас будут(вы же в первую очередь) обвинять до конца жизни. Учтите, что любой брокер получит не только обвинения во введение в заблуждение, но и [до]судебные иски/предложения от юристов.

Поэтому правильно показывать комиссию по конкретным сделкам, а не на суперпозиции множества операций. Тем более, есть комиссии сложные многоуровневые и накопительные по проторгованному объему. Когда брокер их активирует, все аналитические методы по истории сделок начнут показывать ошибку.

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

 
Программа в режиме моделирования не имеет права знать ничего из будущего, включая длительность будущего.
 
Roman #:


UPD
С пробросом вроде дошло.
Но как тогда узнать количество всех доступных тиков для цикла?
Чтоб их пробросить.
Как же будут МО тестировать, с таким то костылём...



делайте CopyTicksRange  до цикла

 
Andrey Dik #:

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

Наивность в рамках текущей реальности и уровня потребительского экстремизма. О позиции юристов брокера задумайтесь на минутку. 

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

Тема закрыта.