/*///+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
 Присутствует 6 вариантов градации цветов, выбор вариантов регулируется через переменную Вариант, значения от 0 до 5.  |
 Вариант=6 означает отображение всех 6 палитр в одном окне.                                                            |
 Значения R G B могут отличаться но для симетрии желательно чтоб были равны.                                           |
 При значениях R G B = 8, уменьшите масштаб чарта до минимума и растяните окно индикатора                              |
 до квадратной симетрии,но не доводя до появления горизонтальных линий.                                                |
 При наведении мышью на понравившийся цвет всплывёт вкладка с именем обьёкта в формате : RGB_maps  C 255 , 255 , 255   |
 при необходимости перевода из формата C'255,255,255' в формат integer воспользуйтесь функцией Color_to_integer(r,g,b).|
 Функцие требуется передать 3 параметра так как они записаны во всплывающей вкладке.                                   |
 Функция возвращает integer значение заданного цвета.                                                                  |
 Comment выдаёт инт-значение цвета заданное через (red green blue), значения изменяються от 0 до 255.                  |
/*///+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
//+------------------------------------------------------------------+
//|                                              RGB_char_to_int.mq4 |
//|                                                            Urain |
//+------------------------------------------------------------------+
#property copyright "Urain"
#property link      ""

#property indicator_separate_window
#property indicator_maximum 800.0
#property indicator_minimum -900.0

//---- input parameters
extern int обратный_градиент=8;//градиент
int град;
      
extern int       Вариант=0;
extern string    i———————————————————————="——————————————————————————————————————————————";
extern int red    =0;
extern int green  =0;
extern int blue   =0;
string предуп1="При этих значениях ";
string предуп2=" колличество столбцов превышает колличество бар, увеличте значения ";
string предуп3=" или докачайте историю.";
bool Init=0;
int rr=0,gg=0,bb=0;
int init()
{//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
 град=обратный_градиент; 
 Comment(" int цвет = [",Color_to_integer(red,green,blue),"]\n колличество объектов = [",(256/град)*(256/град)*(256/град),"]");
 if(Вариант<6 && обратный_градиент<8) град=8;
 if(Вариант>5 && обратный_градиент<16) град=16;
 ObjectsDeleteAll(1,OBJ_ARROW);
 Init=1;
return(0);
}//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
 
int deinit(){Comment("");return(0);}

int start()
{//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ 
 int r=0,g=0,b=0;
 if(Init)
   {  for( rr=0;rr<256;rr+=град)
    { for( gg=0;gg<256;gg+=град)
     {for( bb=0;bb<256;bb+=град)
         {r=rr; g=gg; b=bb;
          if(Init&&(256/град)*(256/град)>=Bars){Comment(предуп1,"градиент",предуп2,"градиент",предуп3);break;} 
          if(Вариант>5)         
            {ОБЪЕКТ( r, g, b, град, 560, 1);
             ОБЪЕКТ( r, b, g, град, 280, 1);
             ОБЪЕКТ( g, r, b, град,   0, 1);
             ОБЪЕКТ( g, b, r, град,-280, 1);
             ОБЪЕКТ( b, r, g, град,-560, 1);
             ОБЪЕКТ( b, g, r, град,-840, 1);
            }
          else
            {switch(Вариант)
               {case 0:ОБЪЕКТ( r, g, b, град, -700, 6);break;
                case 1:ОБЪЕКТ( r, b, g, град, -700, 6);break;
                case 2:ОБЪЕКТ( g, r, b, град, -700, 6);break;
                case 3:ОБЪЕКТ( g, b, r, град, -700, 6);break;
                case 4:ОБЪЕКТ( b, r, g, град, -700, 6);break;
                case 5:ОБЪЕКТ( b, g, r, град, -700, 6);break;            
             
                default:Print("NOT FOUND");break;
               } 
            }            
         }  
     }  
    }
   }
 Init=0;   
return(0);
}//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+

void ОБЪЕКТ(int r,int g,int b,int S,int vert,int mnog)
{//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
 string name="RGB_maps  C [ "+rr+" , "+gg+" , "+bb+" ]   , "+vert; 
     if(ObjectFind(name)==-1)
       {ObjectCreate(name,OBJ_ARROW,1,Time[256/S*(r/град)+(g/град)],b*mnog+vert);
        ObjectSet( name, OBJPROP_ARROWCODE, 110);
        ObjectSet( name, OBJPROP_COLOR    ,Color_to_integer(rr,gg,bb));
       }
return;
}//+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+

int Color_to_integer(int r,int g,int b){return(r+256*g+256*256*b);}