Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 486

 

Вопрос - учитывает ли тестер своп?

Произвел расчет в экселе (счет центовый), получил странный результат

№ П.П. Data Type Lot Price  MaxHigh MaxEqDrd
1 2014.06.12 09:52 sell 0,1 1,6824 0,16824 1,7179 -3,55
2 2014.06.12 15:18 sell 0,2 1,6831 0,33662 1,7179 -6,96
3 2014.06.12 17:52 sell 0,3 1,6836 0,50508 1,7179 -10,29
4 2014.06.12 19:10 sell 0,5 1,6839 0,84195 1,7179 -17,00
5 2014.06.12 23:00 sell 0,8 1,6845 1,3476 1,7179 -26,72
6 2014.06.16 09:59 sell 1,3 1,6985 2,20805 1,7179 -25,22
7 2014.06.19 09:58 sell 2,1 1,7017 3,57357 1,7179 -34,02
8 2014.06.19 11:21 sell 3,4 1,7018 5,78612 1,7179 -54,74
9 2014.06.19 20:40 sell 5,5 1,7033 9,36815 1,7179 -80,30
10 2014.06.19 22:12 sell 8,9 1,7036 15,16204 1,7179 -127,27
11 2014.06.20 05:10 sell 14,4 1,7047 24,54768 1,7179 -190,08
12 2014.06.20 05:22 sell 23,3 1,7049 39,72417 1,7179 -302,90
13 2014.06.26 12:38 sell 37,7 1,7030 64,2031 1,7179 -561,73
14 2014.06.26 15:18 sell 61,0 1,7033 103,9013 1,7179 -890,60
15 2014.06.27 06:51 sell 98,7 1,7050 168,2835 1,7179 -1273,23
16 2014.06.30 17:37 sell 100,0 1,7079 170,79 1,7179 -1000,00
17 2014.06.30 17:37 sell 59,7 1,7079 101,96163 1,7179 -597,00
18 2014.07.01 09:03 sell 100,0 1,7100 171 1,7179 -790,00
19 2014.07.01 09:03 sell 100,0 1,7100 171 1,7179 -790,00
20 2014.07.01 09:03 sell 58,4 1,7100 99,864 1,7179 -461,36
21 2014.07.01 11:30 sell 100,0 1,7110 171,1 1,7179 -690,00
22 2014.07.01 11:30 sell 100,0 1,7110 171,1 1,7179 -690,00
23 2014.07.01 11:30 sell 100,0 1,7110 171,1 1,7179 -690,00
24 2014.07.01 11:30 sell 100,0 1,7110 171,1 1,7179 -690,00
25 2014.07.01 11:30 sell 18,1 1,7110 30,9691 1,7179 -124,89
26 2014.07.02 02:33 sell 100,0 1,7145 171,45 1,7179 -340,00
27 2014.07.02 02:33 sell 100,0 1,7145 171,45 1,7179 -340,00
28 2014.07.02 02:33 sell 100,0 1,7145 171,45 1,7179 -340,00
29 2014.07.02 02:33 sell 100,0 1,7145 171,45 1,7179 -340,00
30 2014.07.02 02:33 sell 100,0 1,7145 171,45 1,7179 -340,00
31 2014.07.02 02:33 sell 100,0 1,7145 171,45 1,7179 -340,00
32 2014.07.02 02:33 sell 76,5 1,7145 131,15925 1,7179 -260,10
33 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
34 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
35 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
36 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
37 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
38 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
39 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
40 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
41 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
42 2014.07.02 11:32 sell 100,0 1,7176 171,76 1,7179 -30,00
43 2014.07.02 11:32 sell 94,6 1,7176 162,48496 1,7179 -28,38
 Итого:  2865,5  4909,88611  -12756,34
    Средняя цена открытия -> 1,7134  
       
High 04.07.2014   1,7179   
       
    Просадка в пунктах -> 0,0045  
    Просадка в валюте -> 12756,34  
       
    Просадка согласно коду -> 13823,00  
    Просадка согласно отчету тестера -> 23669,03  
       
    TP - > 1,7084  
    Прибыль в пунктах -> 0,0050  
    Прибыль по расчету - > 14465,91  
       
    Прибыль по отчету - > 13915,05  


Каким образом просадка не сходится - особенно с отчетом тестера? До этого закрытых позиций не было!

 

Так выглядит ситуация на чарте



 
Приложил расчет в экселе - может я там тупонул!?
Файлы:
Calculation.zip  104 kb
 

-Aleks-:

Глобальная переменная актуальна при реальной работе по рынку - мне нужна тестовая информация - поэтому и не заморачивался.

Я не говорил о GlobalVariable, я говорил об уровне глобальных переменных.

-Aleks-:

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

Я особо не вникал в формулу вычисления прсадки в тестере, но можно попробовать посчитать разницу между балансом перед открытием ордера и минимальным размером средств до закрытия ордера. Или считать и максимум и минимум средств и максимальная разница и будет максимальной просадкой.

-Aleks-:

Почему Вы считаете, что неравенство  if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;  никогда не выполняется? Оно лишь не выполняется на том баре, когда достигнут новый максимум баланса (или эквити - всё равно не верно), но в этот момент я фиксирую просадку по прибыли ProfitMin=ProfitNew.

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

Согласен, тут я был не достаточно внимателен.

Частота записи в файл дело сугубо личное, но просадка считается не за день, а за время жизни ордера(ов), а дальше средства становятся балансом. Это как раз и есть те места на графике тестера где линии средств и баланса в одной точке.

 
Alexey Viktorov:

Я не говорил о GlobalVariable, я говорил об уровне глобальных переменных.

Видимо я не правильно Вас понял - у меня переменные инициализируются до блока исполнения кода int start(), поэтому проблем вроде как быть не должно с затиранием или типа того... или есть другая причина?


Alexey Viktorov:

Я особо не вникал в формулу вычисления прсадки в тестере, но можно попробовать посчитать разницу между балансом перед открытием ордера и минимальным размером средств до закрытия ордера. Или считать и максимум и минимум средств и максимальная разница и будет максимальной просадкой.

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

Alexey Viktorov:

Частота записи в файл дело сугубо личное, но просадка считается не за день, а за время жизни ордера(ов), а дальше средства становятся балансом. Это как раз и есть те места на графике тестера где линии средств и баланса в одной точке.

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

Мне нужна просадка по дням для проверки торгового портфеля - для понимания, сколько средств одномоментно может понадобится и как часто.

 

Математически (получилась просадка 23497,1 против тестера 23669,03), просадка близка к размеру отрезка, который символизирует изменение депозита - т.е. разницу между максимальным значением эквити и минимальным значением Эквити.

 
-Aleks-:

Видимо я не правильно Вас понял - у меня переменные инициализируются до блока исполнения кода int start(), поэтому проблем вроде как быть не должно с затиранием или типа того... или есть другая причина?


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

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

Мне нужна просадка по дням для проверки торгового портфеля - для понимания, сколько средств одномоментно может понадобится и как часто.

Не совсем так. Не для каждого ордера, а от открытия первого и до закрытия последнего. Тоесть от OrdersTotal() == 0 до OrdersTotal() == 0

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

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

В общем мне не понравился твой метод подсчёта просадки. Что-то мне кажется что печатает так часто, что разобраться потом в этом надо иметь особое терпение.

 

Karputov Vladimir:
Не кусок, а программу, которую можно скомпилировать и прогнать в режиме отладки.

 

Прошу прощения за беспокойство, пока чистил программу, чтобы найти проблему остановки тестера, в тексте программы нашел нарушение алгоритма ее работы. Кмпиляция проходила нормально, а тестер останавливался не показывая место сбоя
 
Alexey Viktorov:

Не совсем так. Не для каждого ордера, а от открытия первого и до закрытия последнего. Тоесть от OrdersTotal() == 0 до OrdersTotal() == 0

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

Так в рассматриваемом примере как раз и соблюдены эти условия - открыты ордера и отслеживаются до закрытия на каждом тике.

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

Alexey Viktorov:

В общем мне не понравился твой метод подсчёта просадки. Что-то мне кажется что печатает так часто, что разобраться потом в этом надо иметь особое терпение.

 Мне то как раз интересно сколько нужно реально средств для работы советника - т.е. реальная просадка(текущий убыток) с момента открытия ордера и до его закрытия без учета упущенной прибыли.

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

 
Здраствуйте!

На первый взгляд, задача простая, как три копейки. НО!....
Есть линия любого осциллятора в индикаторном окне, которая болтается относительно "0" с различной амплитудой.
Собственно, задача:
- при пересечении "0" снизу вверх, нарисовать стрелку у нижней границы индикаторного окна,
- при пересечении "0" сверху вниз, нарисовать стрелку у верхней границы индикаторного окна,
- при самомасштабировании графика осциллятора в индикаторном окне, стрелки должны автоматически оставаться у своих границ индикаторного окна.
Т.е. прокручивая чарт по истории взад-вперёд или меняя его горизонтальный масштаб, стрелки всё время должны автоматически оставаться у своих границ индикаторного окна.

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

Заранее, спасибо!
Причина обращения: