Change Chart Type _ HOTKEY ... help please!
Hi all pro coders,
Im trying to code an simple indicator to quickly change chart type between bar charts & candlestick chart when press C key... but something weird happened, my indi seems only work when there is a tick comming, i think i should works right away after I press C key! Dont know what is the problem here? ... one more thing, I notice that when I press C key then the bars/ candlestick icon is changed immediately but the display on main chart is not =))
Could anyone please find BUGs in my simple indi? attached is the codes
thanks & have a good weekend :)
little Bug fixed! ... version : ChartType_HotKey C
// ChartType.HotKey //............................ #property indicator_chart_window #define C 67 extern bool indicator_ON = true; int OnInit() { return(INIT_SUCCEEDED); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { return(rates_total); } /// void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam) { if(id == CHARTEVENT_KEYDOWN && lparam == C) {press_C();} } /////// void press_C() { // if (indicator_ON) { updateCHARTTYPE(); ChartRedraw(0); } } /////// void updateCHARTTYPE () { long Chart_ID = ChartID(); // double CHARTTYPE = ChartGetInteger(Chart_ID,CHART_MODE); if (CHARTTYPE !=1) ChartSetInteger(Chart_ID,CHART_MODE,1); else if (CHARTTYPE !=0) ChartSetInteger(Chart_ID,CHART_MODE,0); }
another cool Toy for those who like! version : ChartType_Button
// ChartType.Button //................... #property indicator_chart_window #property indicator_buffers 0 #property indicator_plots 0 input string Button_Text = ":)"; // Button Text input int XShift = 20; // Horizontal shift input int YShift = 20; // Vertical shift input int XSize = 30; // Width of buttons input int YSize = 20; // Height of buttons input int FSize = 10; // Fort size input color Bcolor = clrGainsboro; // Button color input color Dcolor = clrDarkGray; // Button border color input color Tncolor = clrBlack; // Text color - normal input color Sncolor = clrRed; // Text color - selected input bool Transparent = false; // Transparent buttons? input ENUM_BASE_CORNER corner = CORNER_LEFT_UPPER;// Chart corner // // // // // int OnInit() { createButton("CHARTTYPE",Button_Text,XShift+10,YShift+10,corner); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { switch(reason) { case REASON_CHARTCHANGE : case REASON_RECOMPILE : case REASON_CLOSE : break; default : ObjectDelete(0,"CHARTTYPE"); } } void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { if (id==CHARTEVENT_OBJECT_CLICK && ObjectGetInteger(0,sparam,OBJPROP_TYPE)==OBJ_BUTTON) { if (StringFind(sparam,"CHARTTYPE",0)==0) { int set = !ChartGetInteger(0,CHART_MODE,CHART_BARS); ChartSetInteger(0,CHART_MODE,CHART_BARS,set); ChartSetInteger(0,CHART_MODE,CHART_CANDLES,set); ChartRedraw(0); } } } void createButton(string name, string caption, int xpos, int ypos, int corn) { ObjectCreate(0,name,OBJ_BUTTON,0,0,0); ObjectSetInteger(0,name,OBJPROP_CORNER,corn); ObjectSetInteger(0,name,OBJPROP_XDISTANCE,xpos); ObjectSetInteger(0,name,OBJPROP_YDISTANCE,ypos); ObjectSetInteger(0,name,OBJPROP_XSIZE,XSize); ObjectSetInteger(0,name,OBJPROP_YSIZE,YSize); ObjectSetString(0,name,OBJPROP_TEXT,caption); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FSize); ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(0,name,OBJPROP_COLOR,Tncolor); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Bcolor); ObjectSetInteger(0,name,OBJPROP_BACK,Transparent); ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Dcolor); ObjectSetInteger(0,name,OBJPROP_STATE,false); ObjectSetInteger(0,name,OBJPROP_HIDDEN,true); } // // // // // int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { return(rates_total); }
#define C 67 if(id == CHARTEVENT_KEYDOWN && lparam == C) {press_C();}
const char C='C'; if(id == CHARTEVENT_KEYDOWN && lparam == C) {press_C();}
or:
input string C="C"; if(id == CHARTEVENT_KEYDOWN && lparam == StringGetChar(C,0)) {press_C();}
Hard coding values is never good practice. Unnecessary use of macros is never good practice. Try:
or:
Great! ... thank you so much for your code ... never known that before!
have a good weekend Sir! :)
Hi all pro coders,
Im trying to code an simple indicator to quickly change chart type between bar charts & candlestick chart when press C key... but something weird happened, my indi seems only work when there is a tick comming, i think it should works right away after I press C key! Dont know what is the problem here? ... one more thing, I notice that when I press C key then the bars/ candlestick icon is changed immediately but the display on main chart is not =))
Could anyone please find BUGs in my simple indi? attached is the codes
thanks & have a good weekend :)