I have another little project I'm working on and have run into a wall, and rather than keep banging my head on the table, figured I'd post it here. This section of the forum seems to get more coding questions than the indicator section, so I figured I'd post it here. If it's in the wrong place, let me know and I'll post in the other next time.
OK,
I thought this would be a pretty painless mod to an existing indicator, but no. I am just trying to get some simple numbers along with some text posted on the main chart, in a certain place. This would be incorporated into the main indicator, but 1st I just need to get it to display correctly before attempting that. Trying baby steps as I go along learning.
So what I would like it to display are the Main and Signal numbers along with some simple text when conditions are met, and in x / y coridinates. It would look like this on the screen. along with the change in colors. Trying to get it to work with the ObjectCreate functions.
I'm trying to stay away from making labels as I don't see anyway to convert the numbers from a label.
12.0/17.4/OS or 67.5/86.1/OB or 35.3/45.7/MID
Right now I'm getting this error, but I know it's much more involved than that:
'\end_of_program' - unbalanced left parenthesis
Thanks for the help in advance.
Code: Select all
//+------------------------------------------------------------------+
//| DD_Color Stochastic.mq4 |
//| mod by s01 |
//+------------------------------------------------------------------+
//| Color Stochastic.mq4 |
//| mladen |
//| |
//+------------------------------------------------------------------+
#property copyright "mladen"
#property link ""
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 Magenta
#property indicator_style1 STYLE_DOT
#property indicator_color2 SeaGreen
#property indicator_style2 STYLE_DOT
#property indicator_color3 Lime
#property indicator_color4 Red
#property indicator_width3 3
#property indicator_width4 3
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level5 10 // Added this section // s01
#property indicator_level6 15
#property indicator_level7 85
#property indicator_level8 90
#property indicator_color5 Magenta // added this section // s01
#property indicator_color6 Magenta
#property indicator_color7 Magenta
#property indicator_color8 Magenta
//---- input parameters
//
// nice setings for trend = 35,10,1
// Try 8,3,3 for scalp
//
extern string note1 = "Show Screen Text"; // added the next 2 lines // s01
extern bool ShowText = true;
extern string note2 = "Stochastic settings";
extern string note3 = "for trend 35,10,1";
extern string note4 = "for scalp 8,3,3";
extern int KPeriod = 8;
extern int Slowing = 3;
extern int DPeriod = 3;
extern string note5 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int MAMethod = 0;
extern string note6 = "0=high/low, 1=close/close";
extern int PriceField = 0;
extern string note7 = "overbought level";
extern int overBought = 85;
extern string note8 = "oversold level";
extern int overSold = 15;
//---- buffers
//
//
//
//
//
double KFull[];
double DFull[];
double Upper[];
double Lower[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0,DFull);
SetIndexBuffer(1,KFull);
SetIndexBuffer(2,Upper);
SetIndexBuffer(3,Lower);
SetIndexLabel(1,"Fast");
SetIndexLabel(2,NULL);
SetIndexLabel(3,NULL);
//
//
//
//
//
DPeriod = MathMax(DPeriod,1);
if (DPeriod==1) {
SetIndexStyle(0,DRAW_NONE);
SetIndexLabel(0,NULL);
}
else {
SetIndexStyle(0,DRAW_LINE);
SetIndexLabel(0,"Slow");
}
//
//
//
//
//
string shortName = "DD_Color Stochastic ("+KPeriod+","+Slowing+","+DPeriod+","+maDescription(MAMethod)+","+priceDescription(PriceField);
if (overBought < overSold) overBought = overSold;
if (overBought < 100) shortName = shortName+","+overBought;
if (overSold > 0) shortName = shortName+","+overSold;
IndicatorShortName(shortName+")");
return(0);
}
//
//
//
//
//
int deinit()
{
ObjectDelete("52"); // s01 mod
ObjectDelete("/OB");
ObjectDelete("/OS");
ObjectDelete("/MID");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit;
int i;
if(counted_bars<0) return(-1);
limit=Bars-counted_bars;
//
//
//
//
//
for(i=limit; i>=0; i--)
{
KFull[i] = iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MAMethod,PriceField,MODE_MAIN,i);
DFull[i] = iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MAMethod,PriceField,MODE_SIGNAL,i);
//
//
//
//
//
if (KFull[i] > overBought) { Upper[i] = KFull[i]; Upper[i+1] = KFull[i+1]; }
else { Upper[i] = EMPTY_VALUE;
if (Upper[i+2] == EMPTY_VALUE)
Upper[i+1] = EMPTY_VALUE; }
if (KFull[i] < overSold) { Lower[i] = KFull[i]; Lower[i+1] = KFull[i+1]; }
else { Lower[i] = EMPTY_VALUE;
if (Lower[i+2] == EMPTY_VALUE)
Lower[i+1] = EMPTY_VALUE; }
}
// --------------------
//+---------------------------------------------------------------------------------------------+
//+ On Screen Display for use with Daily Data +
//+---------------------------------------------------------------------------------------------+
// -------------------- // this section new .. s01
if (ShowText)
{
// /* // for debugging
// --------------------
if (KFull[i] > overBought)
ObjectCreate("52",0,0,Time[0],0);
// ObjectCreate("52", OBJ_TEXT, 0, 0, 0)
ObjectSet("52",(DoubleToStr,(KFull[i],0)+"/"+DoubleToStr(DFull[i],0);
// ObjectSet("52",(NumberToStr,(KFull[i],0)+"/"+NumberToStr,(DFull[i],0);
ObjectCreate("52", OBJ_TEXT, 10, "Arial Bold", Red)
ObjectSetText("52",( +"/OB"); // ,10,"Arial Bold",Red);
ObjectSet("52", OBJPROP_XDISTANCE, 180);
ObjectSet("52", OBJPROP_YDISTANCE, 40);
if (KFull[i] < overSold)
ObjectCreate("52",0,0,Time[0],0);
// ObjectCreate("52", OBJ_TEXT, 0, 0, 0)
ObjectSet("52",(DoubleToStr,(KFull[i],0)+"/"+DoubleToStr(DFull[i],0);
// ObjectSet("52",(NumberToStr,(KFull[i],0)+"/"+NumberToStr,(DFull[i],0);
ObjectCreate("52", OBJ_TEXT, 10, "Arial Bold", Lime)
ObjectSetText("52",( +"/OS"); // ,10,"Arial Bold",Lime);
ObjectSet("52", OBJPROP_XDISTANCE, 180);
ObjectSet("52", OBJPROP_YDISTANCE, 40);
if (KFull[i] < overBought) + (KFull > overSold)
ObjectCreate("52",0,0,Time[0],0);
// ObjectCreate("52", OBJ_TEXT, 0, 0, 0)
ObjectSet("52",(DoubleToStr,(KFull[i],0)+"/"+DoubleToStr(DFull[i],0);
// ObjectSet("52",(NumberToStr,(KFull[i],0)+"/"+NumberToStr,(DFull[i],0);
ObjectCreate("52", OBJ_TEXT, 10, "Arial Bold", Gray)
ObjectSetText("52",( +"/MID"); // ,10,"Arial Bold",Gray);
ObjectSet("52", OBJPROP_XDISTANCE, 180);
ObjectSet("52", OBJPROP_YDISTANCE, 40);
// */ // for debugging
}
return(0);
}
// -------------------- // this is returning this error // '\end_of_program' - unbalanced left parenthesis
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
string priceDescription(int mode)
{
string answer;
switch(mode)
{
case 0: answer = "Low/High" ; break;
case 1: answer = "Close/Close" ; break;
default: answer = "Invalid price field requested";
Alert(answer);
}
return(answer);
}
string maDescription(int mode)
{
string answer;
switch(mode)
{
case MODE_SMA: answer = "SMA" ; break;
case MODE_EMA: answer = "EMA" ; break;
case MODE_SMMA: answer = "SMMA" ; break;
case MODE_LWMA: answer = "LWMA" ; break;
default: answer = "Invalid MA mode requested";
Alert(answer);
}
return(answer);
}
// ------------------------------------- end ------------------------------------ // I left some of my attemps in there with // so you could get an idea of what I've tried so far.
Thanks, s01 / Steve
