Доброе время суток !
в коде прохожусь по графикам, и в каждом создаются графические объекты Линии с разыми свойствами ширины и цвета . Объеты создаются, но в активном графике
заданные свойства нужные значения принирмают, а во всех следующих цвет и ширина стантадртные. В чем дело ?
ObiectSet не имеет возможности указывать ID графика. А потому работает только с текущим графиком. Для задания ID графика нужно использовать ObjectSetInteger, ObjectSetDouble и ObjectSetString.
P. S. Код вставляйте через кнопку SRC. Вот так будет выглядеть:
extern bool gamm96 = true,gamm08 = true,gamm04 = true; int Period_L = PERIOD_W1; double PriceL; long currChart,prevChart=ChartFirst(); string nameSym ="", nameLineH="Lag_LineH", nameLineV="Lag_LineV" ;
ObiectSet не имеет возможности указывать ID графика. А потому работает только с текущим графиком. Для задания ID графика нужно использовать ObjectSetInteger, ObjectSetDouble и ObjectSetString.
P. S. Код вставляйте через кнопку SRC. Вот так будет выглядеть:
Спасибо большое !
то что надо !
Уважаемый Ihor !
а еще вот такое не получается - при определеном событии надо нарисовать на текущем графике линию (а елси линия существует то передвинуть),
но открывается НОВЫЙ график и на нем рисуется линия.
void ChartBringToTop(int _color,double mWidth) // const long chart_ID=0) { long tempIdGrafik=ChartOpen(nameSym,PERIOD_W1); //Period_L //-------------- наличие горизонтальной линии string nameLineH = nameSym+IntegerToString(_color) + "Н_"; if (ObjectFind(tempIdGrafik,nameLineH)<0) { ObjectCreate(tempIdGrafik,nameLineH,OBJ_HLINE, 0,Time[0],PriceL); ObjectSet(nameLineH,OBJPROP_WIDTH,mWidth); ObjectSet(nameLineH, OBJPROP_COLOR, _color); } else { ObjectMove(tempIdGrafik,nameLineH,0,Time[0],PriceL); } }
а еще вот такое не получается - при определеном событии надо нарисовать на текущем графике линию (а елси линия существует то передвинуть),
но открывается НОВЫЙ график и на нем рисуется линия.
Так а зачем же Вы пишите:
long tempIdGrafik=ChartOpen(nameSym,PERIOD_W1); //Period_L
открыть график? Уберите эту строку и не будет открываться новый график. Ну а на место ID нужно поставить 0, если интересует именно текущий график.
Так а зачем же Вы пишите:
открыть график? Уберите эту строку и не будет открываться новый график. Ну а на место ID нужно поставить 0, если интересует именно текущий график.
еще раз спасибо !
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброе время суток !
в коде прохожусь по графикам, и в каждом создаются графические объекты Линии с разыми свойствами ширины и цвета . Объеты создаются, но в активном графике
заданные свойства нужные значения принирмают, а во всех следующих цвет и ширина стантадртные. В чем дело ?
extern bool gamm96 = true,gamm08 = true,gamm04 = true;
int Period_L = PERIOD_W1;
double PriceL;
long currChart,prevChart=ChartFirst();
string nameSym ="", nameLineH="Lag_LineH", nameLineV="Lag_LineV" ;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int i=0,limit=100;
while(i<limit)// наверняка не больше 100 открытых графиков
{
currChart=ChartNext(prevChart); // на основании предыдущего получим новый график
if(currChart<0) break; // достигли конца списка графиков
nameSym = ChartSymbol(prevChart);
Alert("sym = ",nameSym);
if (gamm96)
{
PriceL=NormalizeDouble(iCustom(nameSym,Period_L,"LaguerreMA",0.96,0,0,0), Digits);
ChartBringToTop(clrRed,2);
}
if (gamm08)
{
PriceL=NormalizeDouble(iCustom(nameSym,Period_L,"LaguerreMA",0.8,0,0,0), Digits);
ChartBringToTop(clrLightPink,2);
}
if (gamm04)
{
PriceL=NormalizeDouble(iCustom(nameSym,Period_L,"LaguerreMA",0.4,0,0,0), Digits);
ChartBringToTop(clrBlueViolet,1.9);
}
prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
i++;// не забудем увеличить счетчик
}
ChartBringToTop(clrBlueViolet,1.9);
}
//+------------------------------------------------------------------+
void ChartBringToTop(int _color,double mWidth) // const long chart_ID=0)
{
//-------------- наличие горизонтальной линии
nameLineH = nameSym + IntegerToString(_color) + "Н_" + TimeToStr(TimeCurrent());
ObjectCreate(prevChart,nameLineH,OBJ_HLINE, 0,Time[0],PriceL);
ObjectFind(nameLineH);
ObjectSet(nameLineH,OBJPROP_WIDTH,mWidth);
ObjectSet(nameLineH, OBJPROP_COLOR, _color);
}