Ответить
17.09.2016, 14:06
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
Но не раз сталкивался с тем, что котировки в тесторе выпрыгивают за 5 знаков после запятой (может и 8 и 16 быть). Это, конечно глюки брокеров, но они бывают.
Причём тут брокеры? Это особенность хранения дробных данных в переменных в С подобных языках программирования.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
18.09.2016, 10:45
Аватар для vladradon
vladradon vladradon вне форума Активный участник
Регистрация: 12.02.2015 / Сообщений: 190
Поблагодарили 67 раз(а) / Репутация: 66
Причём тут брокеры? Это особенность хранения дробных данных в переменных в С подобных языках программирования.
При чем тут особенности хранения, если у брокеров нет нормализации под определенное количество знаков или она (нормализация) дает сбои (а может и целенаправленно глючит). А если знаки не совпадают с заявленными, то сов или индюк скорее всего выдаст ошибку при попытке обработать нестандартное значение и с таким я уже не раз сталкивался.
18.09.2016, 10:51
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,039
Поблагодарили 873 раз(а) / Репутация: 859
Причём тут брокеры? Это особенность хранения дробных данных в переменных в С подобных языках программирования.
У меня была такая фишка с альпари на конкурсном реал-счете, где своп пересчитывается в цену открытия. В результате получалась дробное значение и цена из пятизначной становилась шестизначной. Мой незамысловатый трейлинг прибавлял N пунктов к цене и пытался выставить стоп на уровне цена открытия+N*Point = получалась опять шестизначная борода и альпари слал такой трейлинг вдаль
Ну, а я послал их туда же
18.09.2016, 11:11
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,851
Поблагодарили 9,515 раз(а) / Репутация: 9520
При чем тут особенности хранения, если у брокеров нет нормализации под определенное количество знаков или она (нормализация) дает сбои (а может и целенаправленно глючит). А если знаки не совпадают с заявленными, то сов или индюк скорее всего выдаст ошибку при попытке обработать нестандартное значение и с таким я уже не раз сталкивался.
Вы тут не правы, если на "пальцах", то от брокера в терминал поступают данные с точностью до 16 знака, а вот уже сам терминал приводит /округляет/ их к своей точности. При этом бывают "сбои" в приведению к нужному типу значений в работе терминала, о чем и писал ansol.
18.09.2016, 11:18
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,039
Поблагодарили 873 раз(а) / Репутация: 859
Вы тут не правы, если на "пальцах", то от брокера в терминал поступают данные с точностью до 16 знака, а вот уже сам терминал приводит /округляет/ их к своей точности. При этом бывают "сбои" в приведению к нужному типу значений в работе терминала, о чем и писал ansol.
Вообще-то, в рамках MQL4 было бы полезным объявлять некоторые переменные один раз на всю программу 5-значными, а не лепить везде NormalizeDouble, но, к сожалению, приходится.
Кстати, похожая ситуация имеется с лотом 0.07 - он всегда 0.07000000001(много нулей) и такой лот тоже обламывается в OrderSend, хотя логично было бы откусывать автоматом, а не мозги программеру компостировать.
18.09.2016, 12:13
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
Можно менять брокеров бесконечно, обвиняя их в кривых котировках. А можно разобраться в языке программирования и учитывать его особенности.
Запустите вот этот скрипт
#include <stdlib.mqh>
void OnStart()
{
//---
int maxfact=23;
double a=1;
for (int i=2; i<=maxfact; i++) { a=a*i; }
for (int j=maxfact; j>=2; j--) { a=a/j; }
Alert(" a=",DoubleToStrMorePrecision(a,16));
}
Смысл понятен? Должна получиться 1. А это поучается далеко не всегда. А котировки никаких брокеров здесь не используются. Какого же тогда брокера обвинить в кривых результатах?
Можете изменить int maxfact=35; и попробовать.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
18.09.2016, 12:33
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,039
Поблагодарили 873 раз(а) / Репутация: 859
Можно менять брокеров бесконечно, обвиняя их в кривых котировках. А можно разобраться в языке программирования и учитывать его особенности.
А можно изначально предусмотреть в языке нормализацию критичных значений, учитывая специфику применения данного инструмента.
Хреновые программисты в метаквотах, только и всего.
18.09.2016, 12:35
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,851
Поблагодарили 9,515 раз(а) / Репутация: 9520
Кстати, похожая ситуация имеется с лотом 0.07 - он всегда 0.07000000001(много нулей) и такой лот тоже обламывается в OrderSend, хотя логично было бы откусывать автоматом, а не мозги программеру компостировать.
И не только, хотя метаквоты говорят, что этот глюк относится только к выводу информации в коммент и принт, при этом, брокер получает верное значение.

PS.
вот как значения выводятся в коммент в данном скрипте:
19.09.2016, 06:12
Аватар для Rennela
Rennela Rennela на форуме Активный участник
Регистрация: 04.01.2013 / Адрес: 俄罗斯 / Сообщений: 140
Поблагодарили 30 раз(а) / Репутация: 31
Вопрос может не в тему. Парни подскажите кто в этом шарит: устанавливаю скрипт на VPS,на 16 валютных пар и VPS тормозить начинает,оперативка заполнена меньше трети, но процессор двухядерный загружен на 100%. Могут ли установленные скрипты так загрузить VPS?
19.09.2016, 07:32
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,851
Поблагодарили 9,515 раз(а) / Репутация: 9520
Rennela, могут. Так снеси, скажем с 10 пар и посмотри как он себя поведет.
19.09.2016, 08:16
Аватар для Rennela
Rennela Rennela на форуме Активный участник
Регистрация: 04.01.2013 / Адрес: 俄罗斯 / Сообщений: 140
Поблагодарили 30 раз(а) / Репутация: 31
Rennela, могут. Так снеси, скажем с 10 пар и посмотри как он себя поведет.
Я их устанавливаю постепенно, и где-то на четвертой паре тормоза сильные начинаются. Что порекомендуете сделать в данной ситуации? Количество пар я буду только увеличивать,стратегия такая мультивалютная.На каждую пару свой терминал? Или может скрипт переписать под советник? Скрипт сам написал(начинающий)всего 458 строк кода.Или количество строк оптимизировать?
19.09.2016, 08:48
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 271
Поблагодарили 86 раз(а) / Репутация: 86
Я их устанавливаю постепенно, и где-то на четвертой паре тормоза сильные начинаются. Что порекомендуете сделать в данной ситуации? Количество пар я буду только увеличивать,стратегия такая мультивалютная.На каждую пару свой терминал? Или может скрипт переписать под советник? Скрипт сам написал(начинающий)всего 458 строк кода.Или количество строк оптимизировать?
Начинающий, а ты зацикливал скрипт While-ом со Sleep-ом?

Последний раз редактировалось _SERG_; 19.09.2016 в 08:51.
19.09.2016, 08:59
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,851
Поблагодарили 9,515 раз(а) / Репутация: 9520
Или может скрипт переписать под советник? Скрипт сам написал(начинающий)всего 458 строк кода.Или количество строк оптимизировать?
Тут не количество строк нужно оптимизировать, а сам код, причем, не зависимо, что Вы создаете. Сам скрипт - это разовое выполнение программы, а Вы его зациклили - вот и нагрузка на терминал. Как вариант, можно, если нет глубины истории, добавить её ограничение и после прохода всего кода установить задержку с помощью Sleep, параметр подбирать.
Самое верное, так это переписать под советник.
Удачи.
19.09.2016, 09:20
Аватар для Rennela
Rennela Rennela на форуме Активный участник
Регистрация: 04.01.2013 / Адрес: 俄罗斯 / Сообщений: 140
Поблагодарили 30 раз(а) / Репутация: 31
Тут не количество строк нужно оптимизировать, а сам код, причем, не зависимо, что Вы создаете. Сам скрипт - это разовое выполнение программы, а Вы его зациклили - вот и нагрузка на терминал. Как вариант, можно, если нет глубины истории, добавить её ограничение и после прохода всего кода установить задержку с помощью Sleep, параметр подбирать.
Самое верное, так это переписать под советник.
Удачи.
Сам скрипт состоит из блоков, которые идут один за другим по ходу работы,т.е. один блок отработал и break,и более он не используется. Вашу мысль я понял, так и сделаю. Спасибо.

Последний раз редактировалось Rennela; 19.09.2016 в 09:31.
19.09.2016, 09:27
Аватар для Rennela
Rennela Rennela на форуме Активный участник
Регистрация: 04.01.2013 / Адрес: 俄罗斯 / Сообщений: 140
Поблагодарили 30 раз(а) / Репутация: 31
Начинающий, а ты зацикливал скрипт While-ом со Sleep-ом?
Скрипт работает. Все блоки зациклены while т.к. брокеры любят или отреквотить или оффквот,да и просто сбой может какой-нибудь произойти. Sleep-ы стоят где без них никак. Или нужно Sleep ставить в конце каждого while? Если так,то какой оптимальный промежуток времени в мс?
19.09.2016, 09:37
Регистрация: 13.03.2009 / Сообщений: 2,362
Поблагодарили 1,968 раз(а) / Репутация: 2045
Скрипт работает. Все блоки зациклены while т.к. брокеры любят или отреквотить или оффквот,да и просто сбой может какой-нибудь произойти. Sleep-ы стоят где без них никак. Или нужно Sleep ставить в конце каждого while? Если так,то какой оптимальный промежуток времени в мс?
Без Sleep цикл повторяется с максимальной скорость, которую может выдать процессор.То есть грузить проц на максимум. Чем меньше спит, тем больше нагрузка. Ставь 300. Обычно достаточно выполнять 3 раза в секунду.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 19.09.2016 в 09:43.
19.09.2016, 13:11
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 271
Поблагодарили 86 раз(а) / Репутация: 86
...... брокеры любят или отреквотить или оффквот,да и просто сбой .......
Они ж не просто так это любят, у них тоже железо не резиновое, тоже не успевает за любителями зациклить скрипты. Да и коммуникация между брокером и тобой, тож не пуля.
По поводу времени задержки выполнения кода, вопрос не тривиальный, поскольку в течение суток интенсивность поступления котировок меняется. И в зацыкленном скрипте есть возможностьменяя параметр у Sleep(), "регулировать" количество обработок, но в интервале времени до секунды. Так шо пишите.
Идею переписать в виде советника, одобряю, только в этом случае хорошо подумай как организовать его работу, и судя по словам выше в ветке, потребности зацикливать код, нет необходимости, достаточно вписаться в стандартные функции.
22.09.2016, 23:06
Аватар для vladradon
vladradon vladradon вне форума Активный участник
Регистрация: 12.02.2015 / Сообщений: 190
Поблагодарили 67 раз(а) / Репутация: 66
Это именно для какого-то цикла внутри скрипта или сова или индюка - не важно, слипинг при неопределенно ориентированном выходе из цикла может быть уместен, но такой цикл должен иметь выход, чтобы он не подвесил весь алгоритм. Цикл должен запускаться извне (по ходу проги) и иметь выход по-умолчанию (типа фальсе - ну... не получилось) и тогда будет все без тормозов.))
23.09.2016, 02:16
Аватар для vladradon
vladradon vladradon вне форума Активный участник
Регистрация: 12.02.2015 / Сообщений: 190
Поблагодарили 67 раз(а) / Репутация: 66
Только позавчера наблюдал на конкурсном счете на Exness в момент выхода новости - несколько минут тупо не обновлялись котировки, пока все не успокоилось. Мои скальперы (совы) на другом брокере слили по 5-ти стоплоссам. Как ни странно, пока фракталки в сочетании с мартином прут в гору...

Последний раз редактировалось vladradon; 23.09.2016 в 02:19.
23.09.2016, 10:38
Аватар для e-partner
e-partner e-partner вне форума Местный знаток
Регистрация: 29.09.2010 / Адрес: Москва / Сообщений: 690
Поблагодарили 553 раз(а) / Репутация: 554

По умолчанию Прошу помочь исправить код

Привет, коллеги, привет всем кого знаю и не знаю!

Прошу помочь с таким кодом. Цель: сделать обновление советника каждое энное время, независимо от поступления тиков:



PHP код:
[SIZE="2"]
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   
Comment(TimeCurrent());
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- create timer
   
EventSetTimer(1);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   
EventKillTimer();
   
Comment(""); } [/SIZE
Проверка_OnTimer.mq4

В комментарий выводится кол-во секунд неравномерно. Идут задержки зависимые от поступления тиков. Нужно, чтобы отсчет велся равномерно, без пропусков.

Жду помощи от тех, кто смог решить однажды такую задачку!
----------------
Я теперь понял, что пик совершенства в трейдерстве - это прибыльная торговля на чистом графике, математические методы могут использоваться. Индикаторы практически не используются. Надеюсь, я уже очень близок к этому!))))
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 09:03. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO