Ответить
16.09.2014, 10:12
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,059
Поблагодарили 891 раз(а) / Репутация: 877
Ну когда нужно идти, можно и костыли поюзать еще скажи что 5хх билды лучше
Не лучше, хотя
Костыль работает так: ставим сову на любой другой график, а вместо Period() или _Period указываем период ренко-графика, тогда все индюки и уровни берутся по этому графику и все работает.
Но раньше работало прямо на этом графике, вот и интересно мне, в чем заключается "эмуляция онлайн графика".
Вот этот кусок, видимо влияет:
PHP код:
void UpdateChartWindow() {
    static 
int hwnd 0;

     if(
hwnd == 0) {
        
hwnd WindowHandle(SymbNameRenkoTimeFrame);
        if(
hwnd != 0) Print("Chart window detected");
    }
 
    if(
EmulateOnLineChart && MT4InternalMsg == 0
        
MT4InternalMsg RegisterWindowMessageA("MetaTrader4_Internal_Message");
 
    if(
hwnd != 0) if(PostMessageA(hwndWM_COMMAND0x822c0) == 0hwnd 0;
    if(
hwnd != && MT4InternalMsg != 0PostMessageA(hwndMT4InternalMsg21);
 
    return;

16.09.2014, 11:09
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,059
Поблагодарили 891 раз(а) / Репутация: 877
Нашел уже, всем спасибо
Надо RegisterWindowMessageA и PostMessageA заменить на
RegisterWindowMessageW и PostMessageW.
Все.
16.09.2014, 17:18
Аватар для Bob5
Bob5 Bob5 вне форума Новичок форума
Регистрация: 12.01.2011 / Сообщений: 79
Поблагодарили 25 раз(а) / Репутация: 26
Немнного переделал условие:
условие проверяется каждые раз в 7 минут (фрейм м15), с открытием первого начального бара (Старт),
и идет дальше, не смотря на следующие бары. Вот так - 00. 07. 14. 21. 28. 35. дальше ошибка - 43.
И так ошибка через каждые 6-7проверок. В чем может быть ошибка ?

Условие обрабатывается в Start().
Может неправильно определил открытие нового бара ?

extern int T_m= 7; // ЧЕРЕЗ СКОЛЬКО МИНУТ ПРОВЕРКА


static datetime b ;

if (TimeCurrent()== Time[0] ) b++;
if ( TimeCurrent()>= b+T_m*60 )
{
b=TimeCurrent();
Open_BUY(); // ДЛЯ ПРОВЕРКИ В ТЕСТЕРЕ, ПО ВРЕМЕНИ ОТКРЫТИЯ
}
16.09.2014, 18:37
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Немнного переделал условие:
условие проверяется каждые раз в 7 минут (фрейм м15), с открытием первого начального бара (Старт),
и идет дальше, не смотря на следующие бары. Вот так - 00. 07. 14. 21. 28. 35. дальше ошибка - 43.
И так ошибка через каждые 6-7проверок. В чем может быть ошибка ?

Условие обрабатывается в Start().
Может неправильно определил открытие нового бара ?

extern int T_m= 7; // ЧЕРЕЗ СКОЛЬКО МИНУТ ПРОВЕРКА


static datetime b ;

if (TimeCurrent()== Time[0] ) b++;
if ( TimeCurrent()>= b+T_m*60 )
{
b=TimeCurrent();
Open_BUY(); // ДЛЯ ПРОВЕРКИ В ТЕСТЕРЕ, ПО ВРЕМЕНИ ОТКРЫТИЯ
}
Я так и не понял зачем это:
if (TimeCurrent()== Time[0] ) b++;

Попробуй так:
static datetime b, LastTime ;
//Новый бар
if(LastTime==0)LastTime= Time[0];
if (LastTime!= Time[0] ) b=Time[0];
LastTime= Time[0];
//Прошло время от открытия бара или прошлого события
if ( TimeCurrent()>= b+T_m*60 )
{
b=TimeCurrent();
Open_BUY(); // ДЛЯ ПРОВЕРКИ В ТЕСТЕРЕ, ПО ВРЕМЕНИ ОТКРЫТИЯ
}[/QUOTE]
Я так и не понял зачем это:
if (TimeCurrent()== Time[0] ) b++;
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Bob5 
18.09.2014, 07:52
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Толкните в нужном направлении:
нужно посчитать профит сетки ордеров (в одну сторону) в пунктах (все это сделано) с учетом лота (вот тут затуп у меня)
18.09.2014, 08:44
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Похоже глупость сморозил.
Решил что тралить сетку буду после профита всех ордеров в валюте.
Как привести к единым пунктам все ордера не придумал.
18.09.2014, 21:11
Аватар для Bob5
Bob5 Bob5 вне форума Новичок форума
Регистрация: 12.01.2011 / Сообщений: 79
Поблагодарили 25 раз(а) / Репутация: 26
Не могу добиться точного отсчета от конкретного события.
По условию - если текущее время - поймало время
открытие первого бара (фрейм 15м)- обозначим это Стартом.
От старта начинаем каждые 7 минут проверять условие (открываю Buy).
15 сделок идет точно, открытие каждые 7минут от Старта.
Потом ошибка +2 минуты к 7. И так постоянно.
Пока немогу придумать лучше этого, но и здесь недочеты. Если можно, подскажите -
как правильно написать код !!!

static datetime b ;
bool sobitie=false;
if (TimeCurrent()== Time[0] ) sobitie=true; // ЗАФИКСИРОВАЛИ СОБЫТИЕ, ОТ НЕГО НАЧИНАЕМ ОТСЧЕТ
if ( TimeCurrent()>= b+T_m*60 )
{
b=TimeCurrent();
Open_BUY(); // ДЛЯ ПРОВЕРКИ В ТЕСТЕРЕ ПО ВРЕМЕНИ ОТКРЫТИЯ
}
if (Number_of_Orders_Buy()==0) sobitie = false; // ЕСЛИ НЕТ СДЕЛОК - СОБЫТИЕ СБРАСЫВАЕТСЯ
19.09.2014, 05:09
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
PHP код:
static datetime b;

TimeCurrent();

if ( 
TimeCurrent()>= b+7*60 )
{
b=TimeCurrent(); 
Alert(b); // ДЛЯ ПРОВЕРКИ В ТЕСТЕРЕ ПО ВРЕМЕНИ ОТКРЫТИЯ

Этот код работает исправно.
Видимо где-то меняете T_m
19.09.2014, 09:13
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Не могу добиться точного отсчета от конкретного события.
По условию - если текущее время - поймало время
открытие первого бара (фрейм 15м)- обозначим это Стартом.
От старта начинаем каждые 7 минут проверять условие (открываю Buy).
15 сделок идет точно, открытие каждые 7минут от Старта.
Потом ошибка +2 минуты к 7. И так постоянно.
Пока немогу придумать лучше этого, но и здесь недочеты. Если можно, подскажите -
как правильно написать код !!!

static datetime b ;
bool sobitie=false;
if (TimeCurrent()== Time[0] ) sobitie=true; // ЗАФИКСИРОВАЛИ СОБЫТИЕ, ОТ НЕГО НАЧИНАЕМ ОТСЧЕТ
if ( TimeCurrent()>= b+T_m*60 )
{
b=TimeCurrent();
Open_BUY(); // ДЛЯ ПРОВЕРКИ В ТЕСТЕРЕ ПО ВРЕМЕНИ ОТКРЫТИЯ
}
if (Number_of_Orders_Buy()==0) sobitie = false; // ЕСЛИ НЕТ СДЕЛОК - СОБЫТИЕ СБРАСЫВАЕТСЯ
Это наипростейший вариант решения задачи. Есть у него и недостатки.
Главный, это постепенное отставание. Оно происходит из за того что тики могут идти не каждую секунду. На 4 значных котировках они могут быть совсем редкими, что приведёт к большему отставанию.
Например, ровно через 7 минут не было тика, а пришёл через 7 минут 10 секунд. Вот опоздание на 10 секунд. Дальше время отсчитывается от этого опоздавшего события, и то же может быть с опозданием...
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
19.09.2014, 09:35
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,059
Поблагодарили 891 раз(а) / Репутация: 877
Это наипростейший вариант решения задачи. Есть у него и недостатки.
Главный, это постепенное отставание. Оно происходит из за того что тики могут идти не каждую секунду. На 4 значных котировках они могут быть совсем редкими, что приведёт к большему отставанию.
Например, ровно через 7 минут не было тика, а пришёл через 7 минут 10 секунд. Вот опоздание на 10 секунд. Дальше время отсчитывается от этого опоздавшего события, и то же может быть с опозданием...
Мне вообще непонятно как на "if (TimeCurrent()== Time[0] )" можно рассчитывать? Даже если тик придет на второй секунде, это условие не выполнится вообще до следующей свечи.
Ugar 
19.09.2014, 11:05
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Мне вообще непонятно как на "if (TimeCurrent()== Time[0] )" можно рассчитывать? Даже если тик придет на второй секунде, это условие не выполнится вообще до следующей свечи.
Здесь это я проглядел. Когда первый раз он это написал я поправил, а он опять за своё...
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
19.09.2014, 11:58
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,624
Поблагодарили 3,758 раз(а) / Репутация: 3750
Это наипростейший вариант решения задачи. Есть у него и недостатки.
Главный, это постепенное отставание. Оно происходит из за того что тики могут идти не каждую секунду. На 4 значных котировках они могут быть совсем редкими, что приведёт к большему отставанию.
Например, ровно через 7 минут не было тика, а пришёл через 7 минут 10 секунд. Вот опоздание на 10 секунд. Дальше время отсчитывается от этого опоздавшего события, и то же может быть с опозданием...
Ты не прав, Андрей. Достаточно преобразовать в строку с точностью до минут и обратно в datetime.
Код:
StringToTime(TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES))
и от этого времени считать.
19.09.2014, 13:10
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
Ты не прав, Андрей. Достаточно преобразовать в строку с точностью до минут и обратно в datetime.
Код:
StringToTime(TimeToString(TimeCurrent(), TIME_DATE|TIME_MINUTES))
и от этого времени считать.
Нет, это ты не прав. Я писал о конкретно том варианте, без преобразований.
А если уж считать по минутам, то и преобразовывать не надо. Есть же Minute(), тогда вообще в datetime лезть не стоит.
А вообще, почти любую задачу можно решить несколькими способами. Вопрос встаёт о оптимальности и целесообразности какого то конкретного варианта исполнения.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
19.09.2014, 14:46
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,624
Поблагодарили 3,758 раз(а) / Репутация: 3750
Нет, это ты не прав. Я писал о конкретно том варианте, без преобразований.
А если уж считать по минутам, то и преобразовывать не надо. Есть же Minute(), тогда вообще в datetime лезть не стоит.
А вообще, почти любую задачу можно решить несколькими способами. Вопрос встаёт о оптимальности и целесообразности какого то конкретного варианта исполнения.
Minute() есть, да возвращает количество минут без часа и остального.
Ладно, не пыхти. Я знаю что ты смог-бы сделать при необходимости. А по чужому коду "на коленке" давать советы... и сам частенько советую с ошибками.
Ugar 
19.09.2014, 15:10
Аватар для Bob5
Bob5 Bob5 вне форума Новичок форума
Регистрация: 12.01.2011 / Сообщений: 79
Поблагодарили 25 раз(а) / Репутация: 26
Я понимаю что для Вас, вариантов много - дайте хоть один пример, ибо для меня это пока трудновато
19.09.2014, 18:32
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,624
Поблагодарили 3,758 раз(а) / Репутация: 3750
Я понимаю что для Вас, вариантов много - дайте хоть один пример, ибо для меня это пока трудновато
А ты сделай выводы из наших пререканий и всё узнаешь.
Например, моё замечание Андрею, перевести из секунд в минуты... вариант...
Ответ Андрея... тоже вариант при условии что это может быть только в текущем часе.
Ну а в остальном... Программист не тот кто умеет складывать программу из чужих блоков как домик из кубиков, а тот кто может что-то понять как работает.
А в общем, я как всегда вечером пьян и внятно объяснить что либо не могу. звиняйте...
19.09.2014, 19:41
Аватар для Bob5
Bob5 Bob5 вне форума Новичок форума
Регистрация: 12.01.2011 / Сообщений: 79
Поблагодарили 25 раз(а) / Репутация: 26
Вот что получилось, в тестере идет без ошибок.
Если что не так - просьба подправить !!!


static datetime b, LastTime ;

if(LastTime==0)LastTime= Time[0];
if (LastTime!= Time[0] ) LastTime= Time[0];
if (TimeCurrent()>= b+T_m*60 )
{
b=StringToTime(TimeToString(TimeCurrent(),TIME_DAT E|TIME_MINUTES));
Open_BUY();
}
20.09.2014, 04:38
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,624
Поблагодарили 3,758 раз(а) / Репутация: 3750
Вот что получилось, в тестере идет без ошибок.
Если что не так - просьба подправить !!!


static datetime b, LastTime ;

if(LastTime==0)LastTime= Time[0];
if (LastTime!= Time[0] ) LastTime= Time[0];

if (TimeCurrent()>= b+T_m*60 )
{
b=StringToTime(TimeToString(TimeCurrent(),TIME_DAT E|TIME_MINUTES));
Open_BUY();
}
А какая роль у тех двух строк которые я выделил?
20.09.2014, 07:49
Регистрация: 13.03.2009 / Сообщений: 2,394
Поблагодарили 1,974 раз(а) / Репутация: 2051
А какая роль у тех двух строк которые я выделил?
Ему надо было всегда отмерять время от открытия бара.
Я привёл пример, но Bob5 его изменил, как всегда не разобрав что и зачем в нём.
А в таком виде этот кусок не имеет никакого отношения к остальному, по сути бесполезные операции.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
20.09.2014, 10:14
Аватар для AlexeyVik
AlexeyVik AlexeyVik на форуме Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,624
Поблагодарили 3,758 раз(а) / Репутация: 3750
Ему надо было всегда отмерять время от открытия бара.
Я привёл пример, но Bob5 его изменил, как всегда не разобрав что и зачем в нём.
А в таком виде этот кусок не имеет никакого отношения к остальному, по сути бесполезные операции.
Да я не сомневался никогда в твоей компетентности.
Потому и спросил, что бесполезные операции. И говорил о том кого можно считать программистом хотя-бы начинающим.
Но если надо открываться через 7 минут от открытия бара, то надо вместо TimeCurrent() ставить LastTime (это "тонкий" намёк для Bob5)
Bob5 
Ответить

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


Опции темы

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

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



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


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