OpenRandomCharts

Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
OpenRandomCharts
#property script_show_inputs  true

input ENUM_TIMEFRAMES timeFrame = PERIOD_MN1; //Timeframe
input string tplName = "B01.tpl"; //Template
input int ptsSpread = 50; //Spread Filter
input int numCharts = 10; //Chart Count

void OnStart()
{
   int i, j, k, symSpread, Charts[];
   long chartID;
   string symName = "", symPath[];
   
   if(numCharts > SymbolsTotal(false) || numCharts <= 0)
   {
      Alert("ERROR: invalid chart count.");
      return;
   }
   
   ArrayResize(Charts, numCharts);
   ZeroMemory(Charts);
   
   i = 0;
   k = 0;
   while(i < numCharts)
   {
      //random index from symbol pool
      MathSrand(GetTickCount());
      Charts[i] = MathRand() % SymbolsTotal(false);
      symName = SymbolName(Charts[i], false);
      
      //only tradeable instruments
      if(SymbolInfoInteger(symName, SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_DISABLED) continue;      
      
      //only forex instruments
      StringSplit(SymbolInfoString(symName, SYMBOL_PATH), '\\', symPath);
      if(symPath[0] != "Forex") continue;
      
      //must show on marketwatch for processing
      if(SymbolInfoInteger(symName, SYMBOL_SELECT) == false) SymbolSelect(symName, true);
      Sleep(100);
      
      //wait for refresh after selection
      j = 0; //time-out limitor     
      while(SymbolInfoDouble(symName, SYMBOL_ASK) == 0)
      {
         Sleep(100);
         j++;
         if(j == 50) break;
      }
      if(j == 50) continue;
      
      //unselect and try again if spread is above specified
      symSpread = SymbolInfoInteger(symName, SYMBOL_SPREAD);      
      if(symSpread > ptsSpread)
      {
         SymbolSelect(symName, false);
         Sleep(100);
         continue;
      }      
      i++;
   }   
   
   ArraySort(Charts);
   for(i = 0; i < ArraySize(Charts); i++)
   {
      //randomization may select same symbol again
      //so don't open same chart.
      if(i > 0 && Charts[i] == Charts[i-1]) continue;
      
      symName = SymbolName(Charts[i], false);
      chartID = ChartOpen(symName, timeFrame);
      ChartApplyTemplate(chartID, "//Profiles//Templates//" + tplName);
      ChartSetInteger(chartID, CHART_SHIFT, 0, true);
   }
}

Comments