Структура даты содержит в себе восемь полей типаint.
struct MqlDateTime { intyear; // год intmon; // месяц intday; // день inthour; // час intmin; // минуты intsec; // секунды intday_of_week; // день недели (0-воскресенье, 1-понедельник, ... ,6-суббота) intday_of_year; // порядковый номер в году (1 января имеет номер 0) };
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
intOnInit()
{
//---ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
}
//+------------------------------------------------------------------+/***********************OnChartEvent function************************/voidOnChartEvent(constint id, // идентификатор событияconstlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
if(id == CHARTEVENT_OBJECT_CREATE)
{
//----------------------------------------------------------------------------------------double Level_0= ObjectGetDouble(
0, // идентификатор графика
sparam, // имя объектаOBJPROP_PRICE, // идентификатор свойства0// модификатор свойства
);
double Level_1= ObjectGetDouble(
0, // идентификатор графика
sparam, // имя объектаOBJPROP_PRICE, // идентификатор свойства1// модификатор свойства
);
//------------------------------------------------------------------------------------------------------if(Level_0 > Level_1)
ObjectSetInteger(0,sparam,OBJPROP_COLOR,clrDeepSkyBlue);
elseObjectSetInteger(0,sparam,OBJPROP_COLOR,clrYellow);
//+------------------------------------------------------------------+ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); // получим время создания объектаstring newName = "fibka"+string(timeCreate); // сформируем новое имя объектаObjectSetString(0, sparam, OBJPROP_NAME, newName); // переименуем объект
}
}/******************************************************************///+------------------------------------------------------------------+
Alexey Viktorov:
Может быть научился-бы логически мыслить.)))
Всё что можно перепробовал, из того что вы подсказали, крутил вертел, но всё равно в один цвет красит линии в МТ5. А в МТ4 норм перекрашивает, причём без задержек.
Всё что можно перепробовал, из того что вы подсказали, крутил вертел, но всё равно в один цвет красит линии в МТ5. А в МТ4 норм перекрашивает, причём без задержек.
Видимо не всё перепробовал.
Alexey Viktorov:
Очень большая вероятность того, что после переименования объекта он ещё недоступен для обращения к нему. Можно попробовать после переименования поставить ChartRedraw. Если не поможет, то надо как-то иначе строить последовательность.
ps; Ещё вариант: сначала перекрасить с именем sparam и потом переименовать.
Почему-то событие CHARTEVENT_OBJECT_CREATE считается сразу после касания крыской графика, а не после окончания создания объекта. И цены разных концов фибки оказываются одинаковыми. Следовательно надо перекрашивать уже после создания объекта.
И ещё замечание: Вы красите уровни или основную линию фибки?
Вот три варианта:
Первый.
bool endCreate;
string newName;
/*******************Expert initialization function*******************/intOnInit()
{
ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
return(INIT_SUCCEEDED);
}/******************************************************************//************************Expert tick function************************/voidOnTick()
{
if(endCreate)
{
double Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
double Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
if(Level_0 > Level_1)
ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
elseObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
endCreate = false;
}
}/******************************************************************//***********************OnChartEvent function************************/voidOnChartEvent(constint id, // идентификатор событияconstlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
if(id == CHARTEVENT_OBJECT_CREATE)
{
ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); // получим время создания объекта
newName = "Fibo "+string(timeCreate); // сформируем новое имя объектаObjectSetString(0, sparam, OBJPROP_NAME, newName); // переименуем объект
endCreate = true;
}
}/******************************************************************/
Второй.
/*******************Expert initialization function*******************/intOnInit()
{
ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
return(INIT_SUCCEEDED);
}/******************************************************************//************************Expert tick function************************/voidOnTick()
{
}/******************************************************************//***********************OnChartEvent function************************/voidOnChartEvent(constint id, // идентификатор событияconstlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
string newName;
if(id == CHARTEVENT_OBJECT_CREATE)
{
ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); // получим время создания объекта
newName = "Fibo "+string(timeCreate); // сформируем новое имя объектаObjectSetString(0, sparam, OBJPROP_NAME, newName); // переименуем объект
}
if(id == CHARTEVENT_OBJECT_DRAG)
{
double Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
double Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
if(Level_0 > Level_1)
ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
elseObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
}
}/******************************************************************/
Третий.
/*******************Expert initialization function*******************/intOnInit()
{
ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
return(INIT_SUCCEEDED);
}/******************************************************************//************************Expert tick function************************/voidOnTick()
{
}/******************************************************************//***********************OnChartEvent function************************/voidOnChartEvent(constint id, // идентификатор событияconstlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam // параметр события типа string
)
{
if(id == CHARTEVENT_OBJECT_DRAG)
{
ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); // получим время создания объектаstring newName = "Fibo "+string(timeCreate); // сформируем новое имя объектаObjectSetString(0, sparam, OBJPROP_NAME, newName); // переименуем объектdouble Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
double Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
if(Level_0 > Level_1)
ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
elseObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
ChartRedraw();
}
}/******************************************************************/
//--- найдем максимальное и минимальное значение графикаdouble max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массивdouble step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- определим точки для рисования линииint d1=InpDate1*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
//--- количество видимых баров в окне графикаint bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива priceint accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы//--- для установки и изменения координат точек привязки линииdatetime date[];
double price[];
//--- выделение памятиArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- заполним массив датResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
return;
}
//--- заполним массив цен//--- найдем максимальное и минимальное значение графикаdouble max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массивdouble step=(max_price-min_price)/accuracy;
for(int i=0;i<accuracy;i++)
price[i]=min_price+i*step;
//--- определим точки для рисования линииint d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- создадим линию трендаif(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
{
return;
}
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
Почему-то событие CHARTEVENT_OBJECT_CREATE считается сразу после касания крыской графика, а не после окончания создания объекта. И цены разных концов фибки оказываются одинаковыми. Следовательно надо перекрашивать уже после создания объекта.
Вы как это определили? Логически?
И ещё замечание: Вы красите уровни или основную линию фибки?
Да в разных некоторых вариантах пробовал именно трендовые линии перекрашивать)))
Вот три варианта:
Первый.
Второй.
Третий.
За варианты преогромнейшее спасибо!!! Глядишь на ваших примерах и научусь логически мыслить)))
Вы именно кодингом занимаетесь, или ещё и трейдингом? В смысле как давно в теме трейдинга? Я 12лет уже)))
Как в Mql5 будет выглядеть код
Точно также это выглядит в mql4
Немного справки
MqlDateTime
Структура даты содержит в себе восемь полей типа int.
struct MqlDateTime
{
int year; // год
int mon; // месяц
int day; // день
int hour; // час
int min; // минуты
int sec; // секунды
int day_of_week; // день недели (0-воскресенье, 1-понедельник, ... ,6-суббота)
int day_of_year; // порядковый номер в году (1 января имеет номер 0)
};
пример выше я дал - там как раз есть задание уровней. Если спрашиваете, то потрудитесь открыть код и проверить.
Классная авто чертилка получилась) с разными объектами, уровнями, таймфреймами, спасибо большое
Может быть научился-бы логически мыслить.)))
Всё что можно перепробовал, из того что вы подсказали, крутил вертел, но всё равно в один цвет красит линии в МТ5. А в МТ4 норм перекрашивает, причём без задержек.
как в одном индикаторе организовать алгоритм, чтобы взять точки и передать на другой буфер.
- что бы отрисовать трендовые линии. (как на картинке)
-----------------------------------------
уже всё перепробовал методом тыка , рисуются но где то в непонятных точках .
-----------------------------------------------------------------------------------------------------
Индикатор прикрепляю - он рабочий - только эти линии, не как не приспособлю.
Всё что можно перепробовал, из того что вы подсказали, крутил вертел, но всё равно в один цвет красит линии в МТ5. А в МТ4 норм перекрашивает, причём без задержек.
Видимо не всё перепробовал.
Очень большая вероятность того, что после переименования объекта он ещё недоступен для обращения к нему. Можно попробовать после переименования поставить ChartRedraw. Если не поможет, то надо как-то иначе строить последовательность.
ps; Ещё вариант: сначала перекрасить с именем sparam и потом переименовать.Почему-то событие CHARTEVENT_OBJECT_CREATE считается сразу после касания крыской графика, а не после окончания создания объекта. И цены разных концов фибки оказываются одинаковыми. Следовательно надо перекрашивать уже после создания объекта.
И ещё замечание: Вы красите уровни или основную линию фибки?
Вот три варианта:
Первый.
Второй.
Третий.
как в одном индикаторе организовать алгоритм, чтобы взять точки и передать на другой буфер.
- что бы отрисовать трендовые линии. (как на картинке)
-----------------------------------------
уже всё перепробовал методом тыка , рисуются но где то в непонятных точках .
-----------------------------------------------------------------------------------------------------
Индикатор прикрепляю - он рабочий - только эти линии, не как не приспособлю.
Может кто направит меня на статьи, про привязки точек трендовой линии.
-- всё что могу сейчас, отрисовать их, не понятно в каких точках.
---------------------------------------------------------
что то наверное такое надо прописать - наверное?
-------------------
скажите я на правильном пути ???
Может кто направит меня на статьи, про привязки точек трендовой линии.
-- всё что могу сейчас, отрисовать их, не понятно в каких точках.
---------------------------------------------------------
что то наверное такое надо прописать - наверное?
-------------------
скажите я на правильном пути ???
Трендовые линии строятся на 2 точках, это либо ценовые данные либо данные другого индикатора, пример построения по фракталам, кстати Вам уже знакомый)
https://www.mql5.com/ru/code/29210
Трендовые линии строятся на 2 точках, это либо ценовые данные либо данные другого индикатора, пример построения по фракталам, кстати Вам уже знакомый)
https://www.mql5.com/ru/code/29210
Я хотел в одном Индикаторе - но не получилось. а вот через этот, который Вы предложили, я и раньше делал.
- и пришлось так и сделать, через два Индикатора
Вот что получилось
---------------------------
Забыл сказать Вам Спасибо! - Спасибо!!!
Я хотел в одном Индикаторе - но не получилось. а вот через этот, который Вы предложили, я и раньше делал.
- и пришлось так и сделать, через два Индикатора
Вот что получилось
---------------------------
Забыл сказать Вам Спасибо! - Спасибо!!!
Ну так объедините их, в одном индикаторе можно создавать много разных объектов)
Видимо не всё перепробовал.
Почему-то событие CHARTEVENT_OBJECT_CREATE считается сразу после касания крыской графика, а не после окончания создания объекта. И цены разных концов фибки оказываются одинаковыми. Следовательно надо перекрашивать уже после создания объекта.
Вы как это определили? Логически?
И ещё замечание: Вы красите уровни или основную линию фибки?
Да в разных некоторых вариантах пробовал именно трендовые линии перекрашивать)))
Вот три варианта:
Первый.
Второй.
Третий.
За варианты преогромнейшее спасибо!!! Глядишь на ваших примерах и научусь логически мыслить)))
Вы именно кодингом занимаетесь, или ещё и трейдингом? В смысле как давно в теме трейдинга? Я 12лет уже)))