//+------------------------------------------------------------------+
//| TRO_Squiggly |
//| |
//| Copyright � 2009, Avery T. Horton, Jr. aka TheRumpledOne |
//| |
//| PO BOX 43575, TUCSON, AZ 85733 |
//| |
//| GIFTS AND DONATIONS ACCEPTED |
//| All my indicators should be considered donationware. That is |
//| you are free to use them for your personal use, and are |
//| under no obligation to pay for them. However, if you do find |
//| this or any of my other indicators help you with your trading |
//| then any Gift or Donation as a show of appreciation is |
//| gratefully accepted. |
//| |
//| Gifts or Donations also keep me motivated in producing more |
//| great free indicators. :-) |
//| |
//| PayPal - THERUMPLEDONE@GMAIL.COM |
//+------------------------------------------------------------------+
//| Use http://therumpledone.mbtrading.com/fx/ as your forex broker |
//| ...tell them therumpledone sent you! |
//+------------------------------------------------------------------+
#property copyright "Copyright � 2009, Avery T. Horton, Jr. aka TRO"
#property link "http://www.therumpledone.com/"
#property indicator_chart_window
extern int myChartX = 10 ;
extern int myChartY = 400 ;
extern int myCorner = 1 ;
extern string myFont = "Courier New" ;
extern int myFontSize = 12 ;
extern int myPeriod = 0 ;
extern string notetype = "0=SMA,1=EMA,2=SMMA,3=LWMA" ;
extern string noteprice = "0=CLOSE,1=OPEN,2=HIGH,3=LOW,4=MEDIAN,5=PP,6=WEIGHT" ;
extern color colorHead = Orange ;
extern color colorUP = Lime ;
extern color colorEQ = Yellow ;
extern color colorDN = Red ;
extern int myRows = 11 ;
extern int MAType = 1;
extern int MAPrice = PRICE_CLOSE ;
extern int iMovAvg0= 5;
extern int iMovAvg1= 10;
extern int iMovAvg2= 20;
extern int iMovAvg3= 30;
extern int iMovAvg4= 40;
extern int iMovAvg5= 50;
extern int iMovAvg6= 60;
extern int iMovAvg7= 80;
extern int iMovAvg8= 100;
extern int iMovAvg9= 200;
extern int iMovAvg10 = 400;
double Hi, Li, C;
double prev_high, prev_low, prev_close, D, p, value ;
int h ;
string lbl[15], lbl2[15];
int n, j, i, shift, stop, nHH, nLL ;
color pColor = Blue , maColor = Blue ;
string symbol, tChartPeriod, shortName, ShortName ;
int digits2, digits, period, win ;
double H1L0, L1H0 ;
double point, open, high, low, close, mid, range, pClose, pOpen, pHigh, pLow, pMid, pRange, cRange, xValue, diff ;
double xMax = - 1, xMin = 9999999999999, xDiff, xClose, xHigh, xLow, xRunUp, xRunDn, xPain ;
double High0, Low0, Open0, Close0, Open1,High1, Low1, Close1 ;
int FillAmt = 11 , x001, x002, x003, x004, x005, x006, x007 ;
//+------------------------------------------------------------------+
int aMovAvg[];
double aValue[], pValue[];
//+------------------------------------------------------------------+
int init()
{
if(myPeriod == 0) { period = Period() ; } else { period = myPeriod ; }
tChartPeriod = TimeFrameToString(period) ;
symbol = Symbol() ;
digits = Digits ;
point = Point ;
ShortName = "Squiggly"+symbol+period ;
win = 0 ;
if(digits == 5 || digits == 3) { digits = digits - 1 ; point = point * 10 ; }
ArrayResize(aMovAvg,myRows) ;
ArrayResize(aValue,myRows) ;
ArrayResize(pValue,myRows) ;
shortName = "Squiggly" ;
ObDeleteObjectsByPrefix(shortName);
aMovAvg[0] = iMovAvg0 ;
aMovAvg[1] = iMovAvg1 ;
aMovAvg[2] = iMovAvg2 ;
aMovAvg[3] = iMovAvg3 ;
aMovAvg[4] = iMovAvg4 ;
aMovAvg[5] = iMovAvg5 ;
aMovAvg[6] = iMovAvg6 ;
aMovAvg[7] = iMovAvg7 ;
aMovAvg[8] = iMovAvg8 ;
aMovAvg[9] = iMovAvg9 ;
aMovAvg[10] = iMovAvg10 ;
if( myCorner == 0 || myCorner == 2 )
{
x001 = 0 ;
x002 = 0 ;
x003 = 90 ;
x004 = 150;
x005 = 100 ;
x006 = 90 ;
x007 = 90 ;
FillAmt = 20 ;
}
else
{
x001 = 0 ;
x002 = 110 ; //
x003 = 40 ; // price
x004 = 0 ; // diff
x005 = 10 ;
x006 = 10 ;
x007 = 10 ;
FillAmt = 20 ;
}
return(0);
}
//+------------------------------------------------------------------+
void ObDeleteObjectsByPrefix(string Prefix)
{
int L = StringLen(Prefix);
int i = 0;
while(i < ObjectsTotal())
{
string ObjName = ObjectName(i);
if(StringSubstr(ObjName, 0, L) != Prefix)
{
i++;
continue;
}
ObjectDelete(ObjName);
}
}
//+------------------------------------------------------------------+
int deinit()
{
ObDeleteObjectsByPrefix(shortName);
return(0);
}
//+------------------------------------------------------------------+
int start()
{
n = 10;
j = 0 ;
lbl[j] = ShortName+j;
lbl2[j] = fFill(tChartPeriod + " Squiggly" , 19) ;
DoShowHead(j, colorHead);
close = iClose( symbol,period,0);
for( j = 0 ; j < myRows ; j++ )
{
lbl[j] = ShortName+j;
DoCount( j , aMovAvg[j]) ;
DoColor( aValue[j] , pValue[j] ) ;
maColor = pColor ;
DoColor( close , aValue[j] ) ;
lbl2[j] = fFill("MA(" + aMovAvg[j] + ") " , 8) ;
DoShow(j, pColor);
}
return(0);
}
//+------------------------------------------------------------------+
void DoShowHead( int u, color dsColor )
{
string rlabelH = lbl[u] + "rcHead" ;
ObjectCreate(rlabelH,23,0,Time[0],PRICE_CLOSE);
ObjectSet(rlabelH, OBJPROP_CORNER, myCorner );
ObjectSet(rlabelH,OBJPROP_XDISTANCE, myChartX);
ObjectSet(rlabelH,OBJPROP_YDISTANCE,n+myChartY);
ObjectSetText(rlabelH,lbl2[u],myFontSize,myFont,dsColor);
n = n+20;
return(0);
}
//+------------------------------------------------------------------+
void DoShow( int u, color dsColor )
{
ObjectCreate(lbl[u],23,0,Time[0],PRICE_CLOSE);
ObjectSet(lbl[u], OBJPROP_CORNER, myCorner );
ObjectSet(lbl[u],OBJPROP_XDISTANCE, x002+myChartX);
ObjectSet(lbl[u],OBJPROP_YDISTANCE,n+myChartY);
ObjectSetText(lbl[u],lbl2[u],myFontSize,myFont,maColor);
string Obj001 = lbl[u] + "val" ;
string sVal = fFill(DoubleToStr(aValue[u],digits), 7) ;
ObjectCreate(Obj001,23,0,Time[0],PRICE_CLOSE);
ObjectSet(Obj001, OBJPROP_CORNER, myCorner );
ObjectSet(Obj001,OBJPROP_XDISTANCE, x003+myChartX);
ObjectSet(Obj001,OBJPROP_YDISTANCE,n+myChartY);
ObjectSetText(Obj001,sVal,myFontSize,myFont,dsColor);
string Obj002 = lbl[u] + "dif" ;
string sDif = rtadjust( DoubleToStr(diff,0) ) ;
ObjectCreate(Obj002,23,0,Time[0],PRICE_CLOSE);
ObjectSet(Obj002, OBJPROP_CORNER, myCorner );
ObjectSet(Obj002,OBJPROP_XDISTANCE, x004+myChartX);
ObjectSet(Obj002,OBJPROP_YDISTANCE,n+myChartY);
ObjectSetText(Obj002,sDif,myFontSize,myFont,dsColor);
n = n+20;
return(0);
}
//+------------------------------------------------------------------+
void DoColor( double c1, double c2 )
{
if(c1 > c2 ) { pColor = colorUP ; } else {
if(c1 < c2 ) { pColor = colorDN ; } else { pColor = colorEQ ; } }
}
//+------------------------------------------------------------------+
string TimeFrameToString(int tf)
{
string tfs;
switch(tf) {
case PERIOD_M1: tfs="M1" ; break;
case PERIOD_M5: tfs="M5" ; break;
case PERIOD_M15: tfs="M15" ; break;
case PERIOD_M30: tfs="M30" ; break;
case PERIOD_H1: tfs="H1" ; break;
case PERIOD_H4: tfs="H4" ; break;
case PERIOD_D1: tfs="D1" ; break;
case PERIOD_W1: tfs="W1" ; break;
case PERIOD_MN1: tfs="MN";
}
return(tfs);
}
//+------------------------------------------------------------------+
void DoCount( int c, int maPer)
{
aValue[c] = iMA(symbol,period,maPer,0,MAType,MAPrice,0);
pValue[c] = iMA(symbol,period,maPer,0,MAType,MAPrice,1);
diff = (close - aValue[c]) / point ;
}
//+------------------------------------------------------------------+
string fFill(string filled, int f )
{
string FILLED ;
FILLED = StringSubstr(filled + " ",0,f) ;
return(FILLED);
}
//+------------------------------------------------------------------+
string rtadjust( string rString )
{
int sl = StringLen(rString) ;
while(true)
{
if( sl == 5) { break ; }
if( sl == 4) { rString = " " + rString ; break ; }
if( sl == 3) { rString = " " + rString ; break ; }
if( sl == 2) { rString = " " + rString ; break ; }
if( sl == 1) { rString = " " + rString ; break ; }
break ;
}
return(rString) ;
}
//+------------------------------------------------------------------+
/*
Comment(
"total = " , total , "\n" ,
"xValue " , DoubleToStr(xValue,Digits) , "\n" ,
"") ;
*/