MW 0 Share Posted August 25, 2008 Помогите внять: Сущствует индикатор и в разное время он отображает текущую ситуацию на рынке, как сделать так чтобы этот индикатор мог отобразить свой старт, тоесть когда время равно 00.00? Quote Жми быка! Дави медведя! Link to post Share on other sites
Acer80 0 Share Posted August 25, 2008 Здравствуйте. Помогите пожалуйста...облазил весь инет и ничего не нашел. Проблема в следующем...Есть индикатор, на основании данных индикатора хочу написать советника, но как данные которые возращает индикатор засунуть в советник. Думал что через GV-переменные..но чего-то не получается..Задать я из задал (по F3 их видно), но как их прочитать в советнике ума не приложу..Помогите...ПЛИЗ Quote Link to post Share on other sites
Programmer 33 Author Share Posted August 25, 2008 To MW: Уточните вопрос. 1. 00.00 - это начало очередного дня или начало первого бара в истории терминала? 2. Я правильно понимаю, что Вы хотите модифицировать код индикатора так, чтобы он показывал на экране своё значение в какое-то определённое время? Приведите пример, пожалуйста. Quote Link to post Share on other sites
Programmer 33 Author Share Posted August 25, 2008 To Acer80: Вы ищите функцию iCustom(). Quote Link to post Share on other sites
Acer80 0 Share Posted August 25, 2008 TO Programmer Я может криво как-то проблему объяснил..попробую по другому.. У меня индикатор выдает значение, которое я присваиваю глобальной переменной через GlobalVariableSet(это я делаю в индикаторе.....значение к примеру 1,50). Как мне с помощью (GlobalVariableGet возможно) получить это значение в советнике? Потому что на основании этого значение у меня идет анализ открытия длинной или короткой позиции. А можно как-нить через icq пообщаться? з.ы. а что возращает функция icustom? у меня значение вернул 2147483647..как его расшифровать? Quote Link to post Share on other sites
~~SOM~~ 1 Share Posted August 25, 2008 TO ProgrammerЯ может криво как-то проблему объяснил..попробую по другому.. У меня индикатор выдает значение, которое я присваиваю глобальной переменной через GlobalVariableSet(это я делаю в индикаторе.....значение к примеру 1,50). Как мне с помощью (GlobalVariableGet возможно) получить это значение в советнике? Потому что на основании этого значение у меня идет анализ открытия длинной или короткой позиции. Если GlobalVariableSet("POS", Ask); то pos1=GlobalVariableGet("POS"); Так точно работает. Quote Link to post Share on other sites
Programmer 33 Author Share Posted August 25, 2008 Согласен. Но я бы всё-таки через iCustom() делал. Глобальные переменные - mauvais ton. Quote Link to post Share on other sites
Acer80 0 Share Posted August 25, 2008 To MOS Огромное спасибо...все взлетело...супер... Quote Link to post Share on other sites
~~SOM~~ 1 Share Posted August 25, 2008 Согласен.Но я бы всё-таки через iCustom() делал. Глобальные переменные - mauvais ton. Вы, наверное. и к GOTO с подозрением относитесь . Есть такая школа. Лет двадцать ей уже :). Quote Link to post Share on other sites
MW 0 Share Posted August 25, 2008 To MW: Уточните вопрос. 1. 00.00 - это начало очередного дня или начало первого бара в истории терминала? 2. Я правильно понимаю, что Вы хотите модифицировать код индикатора так, чтобы он показывал на экране своё значение в какое-то определённое время? Приведите пример, пожалуйста. 1. Начало любого бара из истории в зависимости от таймфрейма. 2. Да правильно, значения нужны когда бар только открылся и без реакции на close. Quote Жми быка! Дави медведя! Link to post Share on other sites
Programmer 33 Author Share Posted August 25, 2008 To MW: Понял. Объясняю. В инидикаторе есть буфер. Это массив, в котором нумерация начинается с конца и все элементы этого массива сдвигаются влево на 1 при появлении нового бара. Т.е., грубо говоря, усстроено всё так: 1. Рассматриваем какой-то ТФ. 2. Каждому бару истории этого ТФ в инидикаторе поставлена в соответствии ячейка (элемент буфера). 3. Дальше всё зависит от индикатора и того, как он рассчитывается. Большинство индикаторов усттроены так, что они пересчитываются на каждом тике. Это можно легко определить визуально. 4. В таких индикаторах имеем: пока текущий бар не завершён, значение, содержащееся в соотв. ему ячейке может меняться (если индикатор использует в расчётах тек. бар - например, его цену закрытия - пока бар не завершён, его цена закрытия = тек. рыночной цене Bid). Как только бар завершился значение индикатора на этом баре замораживается (опять же, если это не какой-то специфический индикатор, использующий данные след. баров для расчёта данного). Поэтому, если Вы хотите узнать значение индикатора в момент открытия бара, надо его куда-то сохранять. Например, в ещё один буфер. Я бы сделал так: //+------------------------------------------------------------------+ //| 1111.mq4 | //| Kirill | //| [email="[email protected]"][email protected][/email] | //+------------------------------------------------------------------+ #property copyright "Kirill" #property link "[email="[email protected]"][email protected][/email]" #property indicator_chart_window //..... double FirstValueBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //..... SetIndexBuffer(7, FirstValueBuffer); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //..... return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //... расчёт индикатора SaveFirstValue(); //сразу после расчёта return(0); } //+------------------------------------------------------------------+ void SaveFirstValue() { static datetime lastbar = 0; datetime thisbar = Time[0]; if(lastbar < thisbar) { FirstValueBuffer[0] = [b]<Требуемый Буфер Индикатора>[/b][0]; lastbar = thisbar; } } Quote Link to post Share on other sites
MW 0 Share Posted August 25, 2008 Этот вариант может оказатся неточным, следуя по Вашей наладке сохраняемое значение меняется. Уважаемый Kirill можно ли изобразить тоже самое используя постоянное значение OPEN так как будто других HLC значений этот индикатор в расчёт не берёт? Спасибо. Quote Жми быка! Дави медведя! Link to post Share on other sites
MW 0 Share Posted August 25, 2008 Впринципе написаный Вами код работает, но как теперь узнать, как оно было в прошлом? Индикатор будет работать пока работает терминал, как произвести перерасчёт всей истории по барам для нахождения первоначальных значений такого типа? Quote Жми быка! Дави медведя! Link to post Share on other sites
Acer80 0 Share Posted August 25, 2008 Скажите, пожалуйста, а есть какая-нить функция, которая бы после точки в переменных double оставляла заданное количество знаков (например 2) ? Quote Link to post Share on other sites
kivi 0 Share Posted August 25, 2008 У меня вопрос. Вот почитал форум, нашёл сообщение что индекс доллара _DXY отображается в метатрейдере с задержкой на пол часа. Не знаю правда ли, и решил проверить... В поисковике нашёл определение индекса доллара, стал писать индикатор и столкнулся с проблемой. Как в MQL4 число возвести в степень... P.S. А может я зря изобретаю велосипед, может кто поделится готовым индикатором индексов доллара и евро. Quote Link to post Share on other sites
Programmer 33 Author Share Posted August 25, 2008 Ну прям закидали вопросами Quote Link to post Share on other sites
Programmer 33 Author Share Posted August 25, 2008 To MW: Этот вариант может оказатся неточным, следуя по Вашей наладке сохраняемое значение меняется. Значение не меняется. Оно рассчитывается в начале бара, затем буфер блокируется и обращения к этой ячейке никогда не происходит. Уважаемый Kirill можно ли изобразить тоже самое используя постоянное значение OPEN так как будто других HLC значений этот индикатор в расчёт не берёт? Спасибо. Можно, если индикатор может быть рассчитан только по ценам Open. Тогда его значение не будет меняться в течении времени формирования данного бара. Впринципе написаный Вами код работает, но как теперь узнать, как оно было в прошлом? Индикатор будет работать пока работает терминал, как произвести перерасчёт всей истории по барам для нахождения первоначальных значений такого типа? Никак. Бар содержит всего 5 значений - Open, High, Low, Close, Volume. Quote Link to post Share on other sites
Programmer 33 Author Share Posted August 25, 2008 To Acer80: Скажите, пожалуйста, а есть какая-нить функция, которая бы после точки в переменных double оставляла заданное количество знаков (например 2) ? NormalizeDouble() Quote Link to post Share on other sites
Programmer 33 Author Share Posted August 25, 2008 To kivi: Как в MQL4 число возвести в степень... MathPow() А код пишите - это никогда не врдено. Quote Link to post Share on other sites
MW 0 Share Posted August 26, 2008 Никак. Бар содержит всего 5 значений - Open, High, Low, Close, Volume. Автоматическое перещёлкивание периодов по текущему времени. Можно ли такое замутить для графика котировок? Quote Жми быка! Дави медведя! Link to post Share on other sites
Programmer 33 Author Share Posted August 26, 2008 To MW: Можете уточнить вопрос? Quote Link to post Share on other sites
MW 0 Share Posted August 26, 2008 3 окна один инструмент. 1.Наступает новый день перещёлкивается с недельного периода автоматом на дённый. 2. 4х часовой на часовой 3. час на полчаса. Как только появился Open на старшем в один момент переключило на младший без рук. Quote Жми быка! Дави медведя! Link to post Share on other sites
Programmer 33 Author Share Posted August 26, 2008 To MW: Да, можно. Это делается с помощью библитеки <WinUser32.mqh> //+------------------------------------------------------------------+ //| WinUser32.mqh | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #define copyright "Copyright © 2004, MetaQuotes Software Corp." #define link "http://www.metaquotes.net/" #import "user32.dll" //---- messages int SendMessageA(int hWnd,int Msg,int wParam,int lParam); int SendNotifyMessageA(int hWnd,int Msg,int wParam,int lParam); int PostMessageA(int hWnd,int Msg,int wParam,int lParam); void keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo); void mouse_event(int dwFlags,int dx,int dy,int dwData,int dwExtraInfo); //---- windows int FindWindowA(string lpClassName ,string lpWindowName); int SetWindowTextA(int hWnd,string lpString); int GetWindowTextA(int hWnd,string lpString,int nMaxCount); int GetWindowTextLengthA(int hWnd); int GetWindow(int hWnd,int uCmd); int UpdateWindow(int hWnd); int EnableWindow(int hWnd,int bEnable); int DestroyWindow(int hWnd); int ShowWindow(int hWnd,int nCmdShow); int SetActiveWindow(int hWnd); int AnimateWindow(int hWnd,int dwTime,int dwFlags); int FlashWindow(int hWnd,int dwFlags /*bInvert*/); int CloseWindow(int hWnd); int MoveWindow(int hWnd,int X,int Y,int nWidth,int nHeight,int bRepaint); int SetWindowPos(int hWnd,int hWndInsertAfter ,int X,int Y,int cx,int cy,int uFlags); int IsWindowVisible(int hWnd); int IsIconic(int hWnd); int IsZoomed(int hWnd); int SetFocus(int hWnd); int GetFocus(); int GetActiveWindow(); int IsWindowEnabled(int hWnd); //---- miscelaneouse int MessageBoxA(int hWnd ,string lpText,string lpCaption,int uType); int MessageBoxExA(int hWnd ,string lpText,string lpCaption,int uType,int wLanguageId); int MessageBeep(int uType); int GetSystemMetrics(int nIndex); int ExitWindowsEx(int uFlags,int dwReserved); int SwapMouseButton(int fSwap); #import .... Ещё почитайте здесь: http://forum.mql4.com/ru/11859 Quote Link to post Share on other sites
Ferum01 1 Share Posted August 26, 2008 Есть ли в МТ4 функция abs, а то без нее как то не оч удобно? Quote Жить-хорошо,а хорошо жить еще лучше! Link to post Share on other sites
Programmer 33 Author Share Posted August 26, 2008 To Ferum01: MathAbs() Все мат. ф-ии начинаются на Math. Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.