Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Разбираетесь в своей области? Поделитесь этим с миллионами трейдеров!
Al_key
206
Al_key 2013.06.22 15:31 
#property indicator_separate_window
#property indicator_buffers 1

#property indicator_color1 Lime

// Функция для взаимодействия с SQLIte
#property show_inputs
#import        "sqlite3_wrapper.dll"
int            sqlite_exec (string db_fname, string sql);
int            sqlite_table_exists (string db_fname, string table);
int            sqlite_query (string db_fname, string sql, int& cols[]);
int            sqlite_next_row (int handle);
string         sqlite_get_col (int handle, int col);
int            sqlite_free_query (int handle);
string         sqlite_get_fname (string db_fname);
void           sqlite_set_busy_timeout (int ms);
void           sqlite_set_journal_mode (string mode);
//Inputs
extern string db_Path = "G:/FxData/sqlitedata/FXDATA.db";
extern string sTableName = "alpari_broker_USDCAD_1440";
extern string sColName = "date, close ";
string query;
datetime dTime;

datetime Date[];
double Value[];
int iShift = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{   
     SetIndexBuffer(0,Value);     
     IndicatorShortName(sTableName);
     SetIndexStyle(0,DRAW_LINE);
   query = "SELECT "+
              sColName +
              "FROM "  +
              sTableName;  
   


   int cols[2];
   int handle = sqlite_query (db_Path, query, cols);
   while (sqlite_next_row (handle) == 1) 
   {
      //Alert (sqlite_get_col (handle, 0));//Дата/время
      //Alert (sqlite_get_col (handle, 1));//close;
      iShift = iBarShift(NULL,0, StrToTime(sqlite_get_col (handle, 0)));
      Print (iShift);
      Value[iShift] =StrToDouble( sqlite_get_col (handle, 1));  
      Print(Value[iShift])   ;
   }
    int result = sqlite_free_query (handle);
   
    
        return(0);
}
//+----------------------------------------------------------------------------+
//|  Custom indicator deinitialization function                                |
//+----------------------------------------------------------------------------+
int deinit()
{ 

 return(0);
}
//+------------------------------------------------------------------+
//| Indexes foreign exchange                                         |
//+------------------------------------------------------------------+
int start()
{

   return(0);
}
Проблема такая. Данные из базы загружаются, все печатается, но график индикатора отрисовывается только на дневном таймфрэйме. На других пустое окно. Да, на 4-хчасовке и на дневке баршифт разный, но почему не отрисовывается?
ktest0
631
ktest0 2013.06.22 18:02  
Навскидку - впишите проверку ошибок в саму DLL.
Al_key
206
Al_key 2013.06.22 18:11  
Да DLL все правильно делает. Отладочные ПРИНТЫ выдают то, что нужно на всех тф-ах. Ошибка не в ней а в том, что почему то только на дневке отрисовывается индикатор.
Victor Nikolaev
Модератор
14030
Victor Nikolaev 2013.06.22 18:29  
Al_Key:
Да DLL все правильно делает. Отладочные ПРИНТЫ выдают то, что нужно на всех тф-ах. Ошибка не в ней а в том, что почему то только на дневке отрисовывается индикатор.

Странный Вы человек. В базе храните дневки, а пытаетесь минутки рисовать
Alexander
2441
Alexander 2013.06.22 18:30  
А Вас не смущает, что Вы берете данные из дневной базы? Может попробовать из часовой?
Al_key
206
Al_key 2013.06.23 11:02  
Roger:
А Вас не смущает, что Вы берете данные из дневной базы? Может попробовать из часовой?
Дневка в базе это всего лишь для примера. Вообще изначально мне нужно любые данные в окно индюка выводить, допустим - фундаментальные или астрономические - не суть.

Просто: в базе датавремя + координата - нужно отрисовать в окне индюка вне зависимости от ТФ-а.

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

1 строка колонки date = "23.06.2013 00:00"

1 строка колонки close = 1.001 (К примеру)

Понятно что на дневном тФ-е в мт4 - баршифт будет равен x, а на 4-х часовом баршифт для этой же датывремени будет равен y. Мне нужно, чтобы индюк рисовал close по одной определенной дате, но на на разных баршифтах(в соответствии с выбранным ТФ). 

Ведь запись "23.06.2013 00:00" может быть отнесена и к минутному бару и 4-хчасовому и к дневному и т.п? Или тут я ошибаюсь?

Разве формат ДАТЫ/ВРЕМЕНИ для бара зависит от таймфрэйма? По моему нет. Я видел кучу индюков, которые грузят набор данных с сервера на график, потом меняй тф и график сам будет перестраиваться. ПРимер - СОТ. Если загрузить на дневном ТФ-е получаетс график, перейти на минутки - будет продолжение прямой на каждом следующем баре, пока не дойдем, до бара, со временем которого связано следующее значение СОТ.

Сори, если очень запутанно объяснил.

Alexander
2441
Alexander 2013.06.23 23:31  

Попробуй, замени

iShift = iBarShift(NULL,0, StrToTime(sqlite_get_col (handle, 0)));

на

iShift = iBarShift(NULL,1440, StrToTime(sqlite_get_col (handle, 0)));
Mislaid
553
Mislaid 2013.06.24 01:06  
Al_Key:
Проблема такая. Данные из базы загружаются, все печатается, но график индикатора отрисовывается только на дневном таймфрэйме. На других пустое окно. Да, на 4-хчасовке и на дневке баршифт разный, но почему не отрисовывается?

 Сначала нужно поменять стиль с DRAW_LINE на DRAW_SECTION. Может, оно рисует, только вы не видите.

 Если это не поможет, тогда оформить вычисления процедурой и одноразово выполнить ее внутри start(). В init() не все всегда работает. Я обычно делаю так:

bool FirstStart; // определяем на глобальном уровне
FirstStart = true; // пишем в init()
if ( FirstStart  ) // пишем в start()
{
// здесь выполняем процедуру
   FirstStart = false;
}
Al_key
206
Al_key 2013.06.28 17:20  
Mislaid:

 Сначала нужно поменять стиль с DRAW_LINE на DRAW_SECTION. Может, оно рисует, только вы не видите.

 Если это не поможет, тогда оформить вычисления процедурой и одноразово выполнить ее внутри start(). В init() не все всегда работает. Я обычно делаю так:


Спасибо. DRAW_SECTION помогло.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий