Ответ
 
Опции темы
Старый 01.03.2015, 13:37   #3621 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Petr888 Посмотреть сообщение
а если вместо [0] будет [1]...[2]...[3]... и т.д.

это уже последующие бары, верно?
Да, но в данном примере не имеет значения.
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
Получается что время открытия бара сравнивается с прошлым запомненным значением. Если время открытия бара изменилось, значит появился новый бар.
Кстати, чтобы этот блок работал, переменная prevtime не должна обнуляться по тикам. Для этого она должна быть статической или объявлена на глобальном уровне.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Petr888 (01.03.2015)
Старый 01.03.2015, 15:45   #3622 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от Petr888 Посмотреть сообщение
а если вместо [0] будет [1]...[2]...[3]... и т.д.

это уже последующие бары, верно?
Это предыдущие времена будут открытия баров - отсчет идет в обратном направлении: 0 - текущий, 1 - предыдущий и т.д.
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Petr888 (02.03.2015)
Старый 01.03.2015, 16:21   #3623 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от Ugar Посмотреть сообщение
Да, но в данном примере не имеет значения.
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
Получается что время открытия бара сравнивается с прошлым запомненным значением. Если время открытия бара изменилось, значит появился новый бар.
Кстати, чтобы этот блок работал, переменная prevtime не должна обнуляться по тикам. Для этого она должна быть статической или объявлена на глобальном уровне.
Не уверен, что статическая в этом случае будет правильно работать, но прописать переменную в глобалках сова - однозначно нужно. Здесть можно эту функцию сделать не отрубающей, а вызываемой:

if(orders_modifi && Orders_modifi()) {... - дальнейшее выполнение всего, что в кривых скобках при включенной функции определения открытия нового бара -...}

А сама функция вне функции Старт:

bool Orders_modifi()
{
if (prevtime<=0) {prevtime==Time[0]; return(false);}
if (Time[0] == prevtime) return(false);
else
{prevtime = Time[0]; return (true);}
}

Последний раз редактировалось vladradon; 01.03.2015 в 16:27.
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Petr888 (02.03.2015)
Старый 01.03.2015, 16:41   #3624 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от vladradon Посмотреть сообщение
Не уверен, что статическая в этом случае будет правильно работать
А я уверен.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Petr888 (02.03.2015)
Старый 02.03.2015, 07:26   #3625 (permalink)
Новичок форума
 
Аватар для Игoрь
 
Регистрация: 05.08.2012
Сообщений: 45
Репутация: 7
Игoрь
Сказал(а) спасибо: 38
Поблагодарили 6 раз(а) в 4 сообщениях
Поинты: 20
подскажите, как описывается условие если цена изменилась на n пунктов за t секунд
Игoрь вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2015, 07:38   #3626 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Как-то так

Скрытый текст

Код:
datetime time_ctrl, time_current;
ushort   price_ctrl, price_current;

if(time_current > time_ctrl + t)
   if(MathAbs(price_current - price_ctrl) / _Point > n)
[свернуть]

Последний раз редактировалось matro3; 02.03.2015 в 07:41.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Игoрь (02.03.2015)
Старый 02.03.2015, 08:14   #3627 (permalink)
Активный участник
 
Аватар для sstyle
 
Регистрация: 06.01.2015
Сообщений: 59
Репутация: 36
sstyle
Сказал(а) спасибо: 5
Поблагодарили 35 раз(а) в 14 сообщениях
Поинты: 60
Подскажите пожалуйста, можно ли как-то сову заставить выводить на график цены индюк который подключен через iCustom? Ну как пример канал ТМА. получаю его значения через iCustom, но еще хочу чтобы сова его показывала. (кинуть отдельно индюк на график не подходит)
sstyle вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2015, 08:27   #3628 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
ChartIndicatorAdd - только в MQL5
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2015, 12:25   #3629 (permalink)
Новичок форума
 
Аватар для 1_Pilot
 
Регистрация: 22.09.2013
Сообщений: 13
Репутация: 6
1_Pilot
Сказал(а) спасибо: 6
Поблагодарили 5 раз(а) в 3 сообщениях
Поинты: 5
Доброго здравия!
Нажмите на изображение для увеличения
Название: 111.png
Просмотров: 3
Размер:	6.6 Кб
ID:	197929
можно ли программно использовать данное значение объема лота?
Если можно то как?
1_Pilot вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2015, 12:27   #3630 (permalink)
Новичок форума
 
Аватар для Игoрь
 
Регистрация: 05.08.2012
Сообщений: 45
Репутация: 7
Игoрь
Сказал(а) спасибо: 38
Поблагодарили 6 раз(а) в 4 сообщениях
Поинты: 20
Сообщение от matro3 Посмотреть сообщение
Как-то так

Скрытый текст

Код:
datetime time_ctrl, time_current;
ushort   price_ctrl, price_current;

if(time_current > time_ctrl + t)
   if(MathAbs(price_current - price_ctrl) / _Point > n)
[свернуть]
спасибо за ответ! а какая функция возвращает цену n секунд назад
Игoрь вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2015, 12:37   #3631 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Сообщение от Игoрь Посмотреть сообщение
спасибо за ответ! а какая функция возвращает цену n секунд назад
_http://docs.mql4.com/ru/dateandtime/timeseconds
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2015, 16:40   #3632 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от matro3 Посмотреть сообщение
_http://docs.mql4.com/ru/dateandtime/timeseconds
Ты что-то не так понял в вопросе.
Правильный ответ - никакая.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2015, 17:19   #3633 (permalink)
Новичок форума
 
Аватар для Игoрь
 
Регистрация: 05.08.2012
Сообщений: 45
Репутация: 7
Игoрь
Сказал(а) спасибо: 38
Поблагодарили 6 раз(а) в 4 сообщениях
Поинты: 20
Сообщение от AlexeyVik Посмотреть сообщение
Ты что-то не так понял в вопросе.
Правильный ответ - никакая.
тогда другой вопрос. Как реализовать в коде условие если цена за 10с выросла на 50п
Игoрь вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 02.03.2015, 18:20   #3634 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от Игoрь Посмотреть сообщение
тогда другой вопрос. Как реализовать в коде условие если цена за 10с выросла на 50п
Да вариантов-то несколько. Зависит как ты хочешь считать 10 секунд.
Допустим 00 сек. минуты сравнивать с 10 сек. минуты, затем сравнивать 10 сек с 20 сек и т.д.
Или 00 с 10, потом 01 с 11, 02 с 12 и т.д.
Первый вариант можно обойтись переменной глобального уровня и если не выполнено условие значение этой переменной переписывается и сравнивается через следующие 10 сек.
Во втором варианте наверное лучше через массив. Сравнивая значение в массиве [0] и [9] и копировать массив со сдвигом значений и записывая в последний индекс новое значение. И так каждую секунду.

А в общем-то если я правильно угадал, то эта затея не стоит внимания. Я это писал, с первым вариантом, ещё лет пять назад. прибыль есть, но не та о какой можно мечтать. Да и убытки есть не малые. Скачок есть, ордер открыли и откат...

Последний раз редактировалось AlexeyVik; 02.03.2015 в 18:23.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
vladradon (03.03.2015)
Старый 02.03.2015, 20:26   #3635 (permalink)
Новичок форума
 
Аватар для Игoрь
 
Регистрация: 05.08.2012
Сообщений: 45
Репутация: 7
Игoрь
Сказал(а) спасибо: 38
Поблагодарили 6 раз(а) в 4 сообщениях
Поинты: 20
второй вариант по-интересней. скачок есть - поставили сеть...
Игoрь вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 03.03.2015, 10:37   #3636 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от AlexeyVik Посмотреть сообщение
Да вариантов-то несколько. Зависит как ты хочешь считать 10 секунд.
Допустим 00 сек. минуты сравнивать с 10 сек. минуты, затем сравнивать 10 сек с 20 сек и т.д.
Или 00 с 10, потом 01 с 11, 02 с 12 и т.д.
Первый вариант можно обойтись переменной глобального уровня и если не выполнено условие значение этой переменной переписывается и сравнивается через следующие 10 сек.
Во втором варианте наверное лучше через массив. Сравнивая значение в массиве [0] и [9] и копировать массив со сдвигом значений и записывая в последний индекс новое значение. И так каждую секунду.

А в общем-то если я правильно угадал, то эта затея не стоит внимания. Я это писал, с первым вариантом, ещё лет пять назад. прибыль есть, но не та о какой можно мечтать. Да и убытки есть не малые. Скачок есть, ордер открыли и откат...
Полностью согласен и помимо ежесекундного считывания и перезаписи данных в массиве, нужно еще учитывать текущий плавающий спред, который может полностью свести на нет вход по такой стратегии, учитывая такой малый (в несколько секунд) шаг для анализа разницы цен. Это уже скальперный режим, для которого нужно еще кучу высокоскоростных проверок делать. А для торговли с учетом ТФ графика и каких-то доп инкикаторов - бесперспективняк.))
Я уж не говорю о том, что массивы для аварийного перезапуска сова, нужно хранить либо в файле, либо в глобалках терминала - это тоже приличная нагрузка на терминал и объем кода для скальпера.
Можно просто воткнуть функцию считывания текущего значения времени, зафиксировать ее в переменной, и сравнивать ее периодически по каждому тику с текущим значением графика. И если цена в нужном направлении выскочила за заданное количество пунктов, то уже давать команды на открытие, а если превышено время шага для определения новой цены отсчета и перезапуска таймера, то перезаписываем новое значение таймера (текущего времени) и цены графика на этот момент (тоже отдельная переменная). Т.е. фактически укладываемся в несколько строк кода без всяких наворотов. Этот вариант довольно простой, но будет зависеть от тиков графика и это особо не проблема. Я просто уже писал, что работа по таймеру сова на 5-ке у меня все равно зависит от тиков, а на 4-ке я пока не пробовал - не было необходимости.

Последний раз редактировалось vladradon; 03.03.2015 в 10:55.
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.03.2015, 11:02   #3637 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,525
Репутация: 3645
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,113
Поблагодарили 3,649 раз(а) в 1,470 сообщениях
Поинты: 2007
Сообщение от vladradon Посмотреть сообщение
Полностью согласен и помимо ежесекундного считывания и перезаписи данных в массиве, нужно еще учитывать текущий плавающий спред, который может полностью свести на нет вход по такой стратегии, учитывая такой малый (в несколько секунд) шаг для анализа разницы цен. Это уже скальперный режим, для которого нужно еще кучу высокоскоростных проверок делать. А для торговли с учетом ТФ графика и каких-то доп инкикаторов - бесперспективняк.))
Я уж не говорю о том, что массивы для аварийного перезапуска сова, нужно хранить либо в файле, либо в глобалках терминала - это тоже приличная нагрузка на терминал и объем кода для скальпера.
Можно просто воткнуть функцию считывания текущего значения времени, зафиксировать ее в переменной, и сравнивать ее периодически по каждому тику с текущим значением графика. И если цена в нужном направлении выскочила за заданное количество пунктов, то уже давать команды на открытие, а если превышено время шага для определения новой цены отсчета и перезапуска таймера, то перезаписываем новое значение таймера (текущего времени) и цены графика на этот момент (тоже отдельная переменная). Т.е. фактически укладываемся в несколько строк кода без всяких наворотов. Этот вариант довольно простой, но будет зависеть от тиков графика и это особо не проблема. Я просто уже писал, что работа по таймеру сова на 5-ке у меня все равно зависит от тиков, а на 4-ке я пока не пробовал - не было необходимости.
Да брось. Зачем хранить эти данные на случай перезапуска? Ведь они будут уже устаревшими и только испортят всё. Ведь ничего не мешает при запуске сделать задержку на заданное количество секунд для заполнения массива, чтобы уже можно было анализировать.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.03.2015, 11:13   #3638 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от AlexeyVik Посмотреть сообщение
Да брось. Зачем хранить эти данные на случай перезапуска? Ведь они будут уже устаревшими и только испортят всё. Ведь ничего не мешает при запуске сделать задержку на заданное количество секунд для заполнения массива, чтобы уже можно было анализировать.
Я сейчас чиркану функцию без хранения, но с заданным шагом обновления, как описал - проверишь и скажешь что не так.))
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.03.2015, 16:33   #3639 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от Игoрь Посмотреть сообщение
подскажите, как описывается условие если цена изменилась на n пунктов за t секунд
Прописываем переменные в глобальных сова:

exturn double Volume; //Уровень скачка цены в любом направлении в пунктах
exturn int StepTime; //Шаг в секундах, в течении которого будет производится отскок от последнего уровня цены

datetime Time0=0, Time1=0; // Промежуточные переменные для функции
double StartLevel;

int TimeSpread() //Начало функции
{
if (Time0==0) {Time0=TimeCurrent(); return (0);}
if (Time0==TimeCurrent()) {StartLevel= Bid; Time1==TimeCurrent(); return (0);}
if (TimeCurrent()>Time0+StepTime) {Time0=TimeCurrent(); StartLevel= Bid; return (0);}
if (Time0!=0 && Time1!=0 && Time1-Time0<StepTime && Bid>StartLevel+Volume) return (1); //Возвращает 1, если за указанный StepTime цена выросла на Volume
if (Time0!=0 && Time1!=0 && Time1-Time0<StepTime && Bid<StartLevel
-Volume) return (2); //Возвращает 2, если за указанный StepTime цена упала на Volume
return(0);
}
Заранее извиняюсь, если где-то опечатался - в терминале не проверял и весь код печатал сразу в ответе здесь на форуме.
Ну и соответственно: если запрос на функцию возвращает 1, то это типа сигнал на бай, 2 - на селл:
if (TimeSpread()==1)... -команды на на бай или разрешение открытия на бай - короче по стратегии дальше, а
if (TimeSpread()==2)... -соответственно противоположный сигнал.
Надеюсь, что поможет.)))

Последний раз редактировалось vladradon; 03.03.2015 в 16:45.
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 03.03.2015, 18:02   #3640 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 104
Репутация: 37
vladradon
Сказал(а) спасибо: 23
Поблагодарили 37 раз(а) в 25 сообщениях
Поинты: 168
Сообщение от vladradon Посмотреть сообщение
Прописываем переменные в глобальных сова:

exturn double Volume; //Уровень скачка цены в любом направлении в пунктах
exturn int StepTime; //Шаг в секундах, в течении которого будет производится отскок от последнего уровня цены

datetime Time0=0, Time1=0; // Промежуточные переменные для функции
double StartLevel;

int TimeSpread() //Начало функции
{
if (Time0==0) {Time0=TimeCurrent(); return (0);}
if (Time0==TimeCurrent()) {StartLevel= Bid; Time1==TimeCurrent(); return (0);}
if (TimeCurrent()>Time0+StepTime) {Time0=TimeCurrent(); StartLevel= Bid; return (0);}
if (Time0!=0 && Time1!=0 && Time1-Time0<StepTime && Bid>StartLevel+Volume) return (1); //Возвращает 1, если за указанный StepTime цена выросла на Volume
if (Time0!=0 && Time1!=0 && Time1-Time0<StepTime && Bid<StartLevel
-Volume) return (2); //Возвращает 2, если за указанный StepTime цена упала на Volume
return(0);
}
Заранее извиняюсь, если где-то опечатался - в терминале не проверял и весь код печатал сразу в ответе здесь на форуме.
Ну и соответственно: если запрос на функцию возвращает 1, то это типа сигнал на бай, 2 - на селл:
if (TimeSpread()==1)... -команды на на бай или разрешение открытия на бай - короче по стратегии дальше, а
if (TimeSpread()==2)... -соответственно противоположный сигнал.
Надеюсь, что поможет.)))
Нашел свою же ошибку:

exturn int Volume; //Уровень скачка цены в любом направлении в пунктах

int TimeSpread() //Начало функции
{
if (Time0==0) {Time0=TimeCurrent(); return (0);}
if (Time0==TimeCurrent()) {StartLevel= Bid; Time1==TimeCurrent(); return (0);}
if (TimeCurrent()>Time0+StepTime) {Time0=TimeCurrent(); StartLevel= Bid; return (0);}
if (Time0!=0 && Time1!=0 && Time1-Time0<StepTime && Bid>StartLevel+Volume*_Point) return (1); //Возвращает 1, если за указанный StepTime цена выросла на Volume
if (Time0!=0 && Time1!=0 && Time1-Time0<StepTime && Bid<StartLevel
-Volume*_Point) return (2); //Возвращает 2, если за указанный StepTime цена упала на Volume
return(0);
}
Только учет спреда я не вводил - его можно отдельно ввести, если таков счет, на котором торгуешь.

Последний раз редактировалось vladradon; 03.03.2015 в 18:13.
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Ответ

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


Опции темы

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

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



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


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