symbol_switch

Author: Igor
0 Views
0 Downloads
0 Favorites
symbol_switch
ÿþ#property copyright "Igor"

#property link "https://www.mql5.com/en/users/igor.i"

#property version   "1.00"

#property strict

#property indicator_chart_window



//--- input parameters



extern string   fast_button="";     //Fixed symbol button

extern string   must_have_list="";  //'Must have' list

extern string   exept_list="";      //Exeptions list

extern string   obj_pref="Switch_"; //Prefix



//--- indicator buffers

string prev_symb,curr_symb,next_symb;

string MustHave[999],

       Exept[999];

int    MustHaveSize,

       ExeptSize;



//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int OnInit()

  {

   if(fast_button=="") fast_button=SymbolName(0,true);

   

   ObjectCreate(ChartID(),obj_pref+"BT0",OBJ_BUTTON,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_CORNER,CORNER_LEFT_LOWER);   //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8 

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_XDISTANCE,4); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_YDISTANCE,48);

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_XSIZE,100);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_YSIZE,20);

   ObjectSetString(ChartID(),obj_pref+"BT0",OBJPROP_FONT,"Arial");

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_FONTSIZE,10);

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_COLOR,Black);

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_BGCOLOR,clrGray);

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_BORDER_COLOR,Black);//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_BACK,false);      //--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_STATE,false);     //--- ?5@52545< :=>?:C 2 7040==>5 A>AB>O=85

   ObjectSetString(ChartID(),obj_pref+"BT0",OBJPROP_TEXT,fast_button);

   

   ObjectCreate(ChartID(),obj_pref+"BT1",OBJ_BUTTON,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_CORNER,CORNER_LEFT_LOWER);   //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8 

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_XDISTANCE,124); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_YDISTANCE,24);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_XSIZE,120);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_YSIZE,20);

   ObjectSetString(ChartID(),obj_pref+"BT1",OBJPROP_FONT,"Arial");

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_FONTSIZE,10);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_COLOR,Black);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_BGCOLOR,White);

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_BORDER_COLOR,Black);//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_BACK,false);      //--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_STATE,false);     //--- ?5@52545< :=>?:C 2 7040==>5 A>AB>O=85

   

   ObjectCreate(ChartID(),obj_pref+"BT2",OBJ_BUTTON,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_CORNER,CORNER_LEFT_LOWER);   //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8 

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_XDISTANCE,4); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_YDISTANCE,24);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_XSIZE,120);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_YSIZE,20);

   ObjectSetString(ChartID(),obj_pref+"BT2",OBJPROP_FONT,"Arial");

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_FONTSIZE,10);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_COLOR,Black);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_BGCOLOR,White);

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_BORDER_COLOR,Black);//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_BACK,false);      //--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_STATE,false);     //--- ?5@52545< :=>?:C 2 7040==>5 A>AB>O=85



   ObjectCreate(ChartID(),obj_pref+"BT3",OBJ_BUTTON,0,0,0);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_CORNER,CORNER_LEFT_LOWER);   //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8 

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_XDISTANCE,104); //--- CAB0=>28< :>>@48=0BK :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_YDISTANCE,48);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_XSIZE,140);     //--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_YSIZE,20);

   ObjectSetString(ChartID(),obj_pref+"BT3",OBJPROP_FONT,"Arial");

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_FONTSIZE,10);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_COLOR,Black);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_BGCOLOR,clrGray);

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_BORDER_COLOR,Black);//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_BACK,false);      //--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_STATE,false);     //--- ?5@52545< :=>?:C 2 7040==>5 A>AB>O=85

   ObjectSetString(ChartID(),obj_pref+"BT3",OBJPROP_TEXT,fast_button);





   

   ExeptSize=0;

   if(exept_list!="")

   {

    while(StringFind(exept_list,",")>-1 && !IsStopped())

    {

     int pos=StringFind(exept_list,",");

     if(pos==0) {exept_list=StringSubstr(exept_list,1);continue;}

     Exept[ExeptSize]=StringSubstr(exept_list,0,pos);

     exept_list=StringSubstr(exept_list,pos+1);

     ExeptSize++;

    }

   if(exept_list!="" && exept_list!=",")

    {

     Exept[ExeptSize]=exept_list;

     ExeptSize++;

    }

   }

 

   MustHaveSize=0;

   if(must_have_list!="")

   {

    while(StringFind(must_have_list,",")>-1 && !IsStopped())

    {

     int pos=StringFind(must_have_list,",");

     if(pos==0) {must_have_list=StringSubstr(must_have_list,1);continue;}

     MustHave[MustHaveSize]=StringSubstr(must_have_list,0,pos);

     must_have_list=StringSubstr(must_have_list,pos+1);

     MustHaveSize++;

    }

   if(must_have_list!="" && must_have_list!=",")

    {

     MustHave[MustHaveSize]=must_have_list;

     MustHaveSize++;

    }

   }

   

   Find_Symb();

   return(INIT_SUCCEEDED);

  }

  

void OnChartEvent(const int id,         // 845=B8D8:0B>@ A>1KB8O   

                  const long& lparam,   // ?0@0<5B@ A>1KB8O B8?0 long 

                  const double& dparam, // ?0@0<5B@ A>1KB8O B8?0 double 

                  const string& sparam  // ?0@0<5B@ A>1KB8O B8?0 string 

                 )

{

 if(id==CHARTEVENT_OBJECT_CLICK)

  {

   

   if(ObjectGetInteger(ChartID(),obj_pref+"BT2",OBJPROP_STATE))

    {

     if(ChartSetSymbolPeriod(0,prev_symb,_Period)) Find_Symb();

     ObjectSetInteger(ChartID(),obj_pref+"BT2",OBJPROP_STATE,false);

    }

    

   if(ObjectGetInteger(ChartID(),obj_pref+"BT1",OBJPROP_STATE))

    {

     if(ChartSetSymbolPeriod(0,next_symb,_Period)) Find_Symb();

     ObjectSetInteger(ChartID(),obj_pref+"BT1",OBJPROP_STATE,false);

    }

   

   if(ObjectGetInteger(ChartID(),obj_pref+"BT0",OBJPROP_STATE))

    {

     if(ChartSetSymbolPeriod(0,fast_button,_Period)) Find_Symb();

     ObjectSetInteger(ChartID(),obj_pref+"BT0",OBJPROP_STATE,false);

    }

    

   if(ObjectGetInteger(ChartID(),obj_pref+"BT3",OBJPROP_STATE))

    {

     long CurID=ChartID();

     long NewID=ChartOpen(Symbol(),_Period);

      

     if(NewID>0)

      {

       ChartSetInteger   (CurID,CHART_BRING_TO_TOP,true);

       ChartSaveTemplate (CurID,obj_pref+"_Temp_Template");

       ChartApplyTemplate(NewID,obj_pref+"_Temp_Template");

       ChartNavigate     (NewID,CHART_END,0);

      }

     

     ObjectSetInteger(ChartID(),obj_pref+"BT3",OBJPROP_STATE,false);

    }

  

  }

}





//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

void start() {}



void OnDeinit(const int reason)

{

 ObjectsDeleteAll(0,obj_pref);

}



void Find_Symb()

{

 curr_symb=Symbol();

 int pos=0;

 

 bool found=false;

 string fb=fast_button;

 for(int i=0;i<SymbolsTotal(true);i++)

  if(StringFind(SymbolName(i,true),fb)>-1)

   {

    fast_button=SymbolName(i,true);

    ObjectSetString(ChartID(),obj_pref+"BT0",OBJPROP_TEXT,fast_button);

    found=true;

    break;

   }

 if(!found)

  {

   fast_button=SymbolName(0,true);

   ObjectSetString(ChartID(),obj_pref+"BT0",OBJPROP_TEXT,fast_button);

  }

 

 

 for(int i=0;i<SymbolsTotal(true);i++)

  if(SymbolName(i,true)==curr_symb)

   {

    pos=i+1;

    while(SymbolName(pos,true)!=curr_symb && !IsStopped())

     {

      if(pos>=SymbolsTotal(true)) pos=0;

      if(CanSwitch(SymbolName(pos,true)))

       {

        next_symb=SymbolName(pos,true);

        break;

       }

      else pos++;

     }

    

    pos=i-1;

    while(SymbolName(pos,true)!=curr_symb && !IsStopped())

     {

      if(pos<0) pos=SymbolsTotal(true)-1;

      if(CanSwitch(SymbolName(pos,true)))

       {

        prev_symb=SymbolName(pos,true);

        break;

       }

      else pos--;

     }

    //prev_symb=i>0?SymbolName(i-1,true):SymbolName(SymbolsTotal(true)-1,true);

    //next_symb=i==SymbolsTotal(true)-1?SymbolName(0,true):SymbolName(i+1,true);

    ObjectSetString(ChartID(),obj_pref+"BT2",OBJPROP_TEXT,"<< "+prev_symb);

    ObjectSetString(ChartID(),obj_pref+"BT1",OBJPROP_TEXT,next_symb+" >>");

    ObjectSetString(ChartID(),obj_pref+"BT3",OBJPROP_TEXT,"New "+Symbol());

    return;

   }

 

 //if symbol not found

 prev_symb=next_symb=SymbolName(0,true);

 ObjectSetString(ChartID(),obj_pref+"BT2",OBJPROP_TEXT,"<< "+prev_symb);

 ObjectSetString(ChartID(),obj_pref+"BT1",OBJPROP_TEXT,next_symb+" >>");

 ObjectSetString(ChartID(),obj_pref+"BT3",OBJPROP_TEXT,"New "+Symbol());

}



bool CanSwitch(string Curr_Symb)

{

 for(int i=0;i<ExeptSize;i++)

  if(StringFind(Curr_Symb,Exept[i])>-1) return(false);

 

 bool have=MustHaveSize==0?true:false;

 for(int i=0;i<MustHaveSize;i++)

  if(StringFind(Curr_Symb,MustHave[i])>-1) have=true;



 return(have);

}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---