Скачать MetaTrader 5

Плавное изменения цвета по ADX ..КАК ето реализовать ??

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Трейдеры написали уже больше 300 статей. Напиши и ты свою!
OGRE
78
OGRE 2013.05.03 15:00 
Благодарью всем кто ответит !! Как написать ПЛАВНОЕ  изменение цвета по значению ADX  ? что-то на подобие  ..COLOR=цвет(12432) +ADX[i]
gyfto
251
gyfto 2013.05.03 16:13  
Саму линию индикатора не знаю. OBJ_ARROW можно. И нечего плодить темы, есть вроде ветка для всех случаев. А с OBJ_ARROW описываешь color как функцию RGB от функции ADX.
Dmitry Fedoseev
42918
Dmitry Fedoseev 2013.05.03 16:36  
Цвет надо разлагать на HLS, увеличивать номер оттенка (или яркость), преобразовывать назад. См. на пятом форуме в кодобазе есть мои коды по преобразованию цвета.
Dmitry Fedoseev
42918
Dmitry Fedoseev 2013.05.03 16:44  
gyfto
251
gyfto 2013.05.03 17:26  
Да, не RGB, а HSL, и изменяем значение H от 0 до 360 градусов в зависимости от значения ADX при постоянном S и L, а пoтом конвертируем в RGB. Но я так понял, что ему не актуально, хоть HSV, хоть HSL, и то и то катит. Вот ещё посмотрите в кодоперепалке между MetaDriver и Urain.
gyfto
251
gyfto 2013.05.03 17:35  
И всё-таки, Integer, HSLtoRGB или HSVtoRGB? Правильно ли я понимаю, что для данной задачи не будет никакой разницы, или я не понимаю их различия?
OGRE
78
OGRE 2013.05.03 17:59  

Спосибо ВСЕМ ..Побробую разобраться ..

OGRE
78
OGRE 2013.05.03 21:37  
НЕ выходит ....!!!!! можно примерчик .. .что и куда вставлять  ,прописывать,обьявлять итд .итп ...
Рустам
3597
Рустам 2013.05.03 21:53  
Значение цвета ЧЕГО ????
OGRE
78
OGRE 2013.05.03 23:22  
например . ма ....по значению ADX    ....... COLOR=цвет(12432) +ADX[i]
gyfto
251
gyfto 2013.05.04 00:21  
#property indicator_chart_window

extern int limit=360;//ширина окна свечей
extern int periodADX=14;
extern double Staturation=1.0;//максимальное значение насыщенности
extern double Lightness=1.0;//максимальное значение светлоты
int iDash=1;//текущий номер черты; объявляется на глобальном уровне, меняется тоже на глобальном уровне изнутри функции ColorDash()
int CountedBars;

int init(){
        for(int i=limit; i<=0; i--) ColorDash(i, iDash);//в инициализации прорисовываем на всё наше окно свечей
        CountedBars=Bars-1;
}

int deinit(){
        for(int i=limit; i<=0; i--) ObjectDelete(StringConcatenate("dashADX", i));//в деинициализации также в цикле удаляем все OBJ_TREND
}

int start(){//в старте
   if(CountedBars!=Bars-1){//как появилась новая свеча на графике
                ObjectDelete(StringConcatenate("dashADX", iDash));//сначала удаляем OBJ_TREND в конце окна свечей с номером iDash (которая меняется на глобальном уровне, повторяюсь)
                ColorDash(0, iDash);//а затем только рисуем OBJ_TREND с тем же номером iDash, только в начале окна свечей
                CountedBars=Bars-1;//и запоминаем новое значение общего количества баров на чарте
        }
}

void ColorDash(int index, int& iDash){//два параметра - номер бара, который всегда равен 0 в старте и пробегается в цикле в init(), и iDash, который передаётся ПО ССЫЛКЕ
        double Hue = iADX(NULL, 0, periodADX, PRICE_CLOSE, MODE_PLUSDI, 0) - iADX(NULL, 0, periodADX, PRICE_CLOSE, MODE_MINUSDI, 0);//получаем разницу +DI и -DI
        //NB! каждый отдельно меняется от 0 до 100, т.е. их разница меняется от -100 (0 минус 100) до +100 (100 минус 0)
        Hue = (Hue+100)/2;//область допустимых значений +100...-100 (т.е. от 100-0 до 0-100) переводим в О.Д.З. +100...0
        Hue = Hue/100;//и дальше переводим в О.Д.З. 0.0...1.0
        color RGB = HSLtoRGB(Hue, Staturation, Lightness);
        if(iDash!=limit) iDash++; else iDash=0;//инкрементируем на каждом обращении iDash до тех пор, пока не выходим за ширину окна
        ObjectCreate(StringConcatenate("dashADX", iDash), OBJ_TREND, 0, Close[index], Time[index], Close[index+1], Time[index+1]);//создаём OBJ_TREND длинной в толщину одной свечи
        ObjectSet(StringConcatenate("dashADX", iDash), OBJPROP_COLOR, RGB);//и меняем цвет OBJ_TREND в зависимости от разности +DI и -DI
}

double Hue_To_RGB(double v1,double v2,double vH){
        if(vH<0) vH+=1.0;
        if(vH>1.0) vH-=1;
        if((6.0*vH)<1.0) return(v1+(v2-v1)*6.0*vH);
        if((2.0*vH)<1.0) return(v2);
        if((3.0*vH)<2.0) return(v1+(v2-v1)*((2.0/3.0)-vH)*6.0);
        return(v1);
}

color HSLtoRGB(double aH,double aS,double aL){
        if(aS==0){
                double oR=aL*255;
                double oG=aL*255;
                double oB=aL*255;
        }else{
                double var_2;
                if(aL<0.5) var_2=aL*(1.0+aS); else var_2=(aL+aS)-(aS*aL);
                double var_1=2.0*aL-var_2;
                oR=255.0*Hue_To_RGB(var_1,var_2,aH+(1.0/3.0));
                oG=255.0*Hue_To_RGB(var_1,var_2,aH);
                oB=255.0*Hue_To_RGB(var_1,var_2,aH-(1.0/3.0));
        }
        return(0x10000*oB+0x100*oG+oR);
}
Как-то так чтоли? Не, сейчас ничё не рисует, надо разбираться ещё почему.
123456
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий