Price Data Components
0
Views
0
Downloads
0
Favorites
Auto TL 05 Line Chart
//+------------------------------------------------------------------+
//|Auto TL 04.mq4
//|Copyright © 2008, Todd Geiger aka fxid10t@yahoo.com (tageiger@comcast.net)
//|http://www.metaquotes.net
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Todd Geiger aka fxid10t@yahoo.com (tageiger@comcast.net)"
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern int period =1440;
extern int Sensitivity =3;//see note below *
extern color Color =Magenta;
extern bool Draw.Fibo? =false;
/*Sensitivity is the number of bars from the current bar to the 2nd point of the last trendline
that triggers a new trendline creation. If the trendlines are too close, increase the value.
Too far, then decrease the value.*/
int s;
double L1,L2,H1,H2;
double df1,df2,uf1,uf2;
datetime LT1,LT2,HT1,HT2;
datetime dft1,dft2,uft1,uft2;
string hn,ln,dfn,ufn;
int init() {
dfn="start";
ufn="start";
s=Sensitivity;
return(0); }
int deinit(){
//delete all indicator created TL's
for(int i=ObjectsTotal();i>=0;i--) {
if(StringSubstr(ObjectName(i),0,5)=="Lo TL" ||
StringSubstr(ObjectName(i),0,5)=="Hi TL" ||
StringSubstr(ObjectName(i),0,5)=="Bear " ||
StringSubstr(ObjectName(i),0,5)=="Bull ") {
ObjectDelete(ObjectName(i)); } }
return(0); }
int start() {
if(period<Period()) { period=0; }
//.....trendline breach handling.....
//.....get most recent TL names
if(ObjectsTotal()>0) {
string lt,ht;
ln="Lo TL 1970.01.01 00:00";
hn="Hi TL 1970.01.01 00:00";
for(int i=ObjectsTotal();i>=0;i--) {
if(StringSubstr(ObjectName(i),0,5)=="Lo TL") {
lt=ObjectName(i);
if(ObjectGet(lt,2)>StrToTime(StringSubstr(ln,6,16))) {
ln=lt;
LT1=ObjectGet(ln,0);
L1=ObjectGet(ln,1);
LT2=ObjectGet(ln,2);
L2=ObjectGet(ln,3);
for(int iii=1; iii<iBarShift(Symbol(),Period(),ObjectGet(ln,2)); iii++) {
if(Close[iii]<ObjectGetValueByShift(ln,iii)) {
ObjectDelete(ln); ln="Lo TL 1970.01.01 00:00"; } } } }
if(StringSubstr(ObjectName(i),0,5)=="Hi TL") {
ht=ObjectName(i);
if(ObjectGet(ht,2)>StrToTime(StringSubstr(hn,6,16))) {
hn=ht;
HT1=ObjectGet(hn,0);
H1=ObjectGet(hn,1);
HT2=ObjectGet(hn,2);
H2=ObjectGet(hn,3);
for(int ii=1; ii<iBarShift(Symbol(),Period(),ObjectGet(hn,2)); ii++) {
if(Close[ii]>ObjectGetValueByShift(hn,ii)) {
ObjectDelete(hn); hn="Hi TL 1970.01.01 00:00"; } } } } } }
if(L2<L1 || LT1==LT2 || L2==0 || L1==0) {
ObjectDelete(ln);
L1=0; L2=0; LT1=0; LT2=0; ln="Lo TL 1970.01.01 00:00"; }
if(H2>H1 || HT1==HT2 || H2==0 || H1==0) {
ObjectDelete(hn);
H1=0; H2=0; HT1=0; HT2=0; hn="Hi TL 1970.01.01 00:00"; }
//if no TL's, make some...
if(ObjectFind(hn)<0 || iBarShift(Symbol(),period,HT2)>s) { HTL(); }
if(ObjectFind(ln)<0 || iBarShift(Symbol(),period,LT2)>s) { LTL(); }
if(Draw.Fibo?) { FIB(); }
return(0);}
//+------------------------------------------------------------------+
void FIB() {
if(LT1<HT1) {
if(ObjectFind(dfn)>-1) { ObjectDelete(dfn); }
dft1=Time[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1),0)];
df1=Close[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1),0)];
dft2=Time[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,dft1),0)];
df2=Close[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,dft1),0)];
dfn="Bear Fib "+TimeToStr(dft1,TIME_DATE|TIME_MINUTES);
if(ObjectFind(ufn)>-1) { ObjectDelete(ufn); }
uft2=Time[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1),0)];
uf2=Close[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1),0)];
uft1=Time[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1)+5,0)];
uf1=Close[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,LT1)+5,0)];
ufn="Bull Fib "+TimeToStr(uft1,TIME_DATE|TIME_MINUTES); }
if(HT1<LT1) {
if(ObjectFind(ufn)>-1) { ObjectDelete(ufn); }
uft1=Time[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1),0)];
uf1=Close[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1),0)];
uft2=Time[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,uft1),0)];
uf2=Close[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,uft1),0)];
ufn="Bull Fib "+TimeToStr(uft1,TIME_DATE|TIME_MINUTES);
if(ObjectFind(dfn)>-1) { ObjectDelete(dfn); }
dft2=Time[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1),0)];
df2=Close[iLowest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1),0)];
dft1=Time[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1)+5,0)];
df1=Close[iHighest(Symbol(),0,MODE_CLOSE,iBarShift(Symbol(),0,HT1)+5,0)];
dfn="Bear Fib "+TimeToStr(dft1,TIME_DATE|TIME_MINUTES); }
ObjectCreate(dfn,10,0,dft1,df1,dft2,df2);
ObjectSet(dfn,9,1);//set as background drawing
ObjectSet(dfn,201,Crimson);
ObjectSet(dfn,200,6);
ObjectSet(dfn,210+0,0);
ObjectSetFiboDescription(dfn,0,"0 %$");
ObjectSet(dfn,210+1,0.382);
ObjectSetFiboDescription(dfn,1,"0.382 %$");
ObjectSet(dfn,210+2,0.5);
ObjectSetFiboDescription(dfn,2,"0.5 %$");
ObjectSet(dfn,210+3,0.618);
ObjectSetFiboDescription(dfn,3,"0.618 %$");
ObjectSet(dfn,210+4,0.764);
ObjectSetFiboDescription(dfn,4,"0.764 %$");
ObjectSet(dfn,210+5,1.00);
ObjectSetFiboDescription(dfn,5,"1.00 %$");
ObjectCreate(ufn,10,0,uft1,uf1,uft2,uf2);
ObjectSet(ufn,9,1);//set as background drawing
ObjectSet(ufn,6,Green);
ObjectSet(ufn,201,Green);
ObjectSet(ufn,200,6);
ObjectSet(ufn,210+0,0);
ObjectSetFiboDescription(ufn,0,"0 %$");
ObjectSet(ufn,210+1,0.382);
ObjectSetFiboDescription(ufn,1,"0.382 %$");
ObjectSet(ufn,210+2,0.5);
ObjectSetFiboDescription(ufn,2,"0.5 %$");
ObjectSet(ufn,210+3,0.618);
ObjectSetFiboDescription(ufn,3,"0.618 %$");
ObjectSet(ufn,210+4,0.764);
ObjectSetFiboDescription(ufn,4,"0.764 %$");
ObjectSet(ufn,210+5,1.00);
ObjectSetFiboDescription(ufn,5,"1.00 %$"); }//end FIB();
void HTL() {
if(HT1==0) {
HT1=iTime(Symbol(),period,iHighest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1));
H1=iClose(Symbol(),period,iHighest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1));
HT2=iTime(Symbol(),period,iHighest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1)-1);
H2=iClose(Symbol(),period,iHighest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1)-1);
if(H2==0) H2=H1-1*Point;
hn="Hi TL "+TimeToStr(HT1,TIME_DATE|TIME_MINUTES);
create.hi(); }
if(HT1>0) {
HT1=HT2;
H1=H2;
HT2=Time[iBarShift(Symbol(),Period(),HT1)-1];
H2=Close[iBarShift(Symbol(),Period(),HT1)-1];
hn="Hi TL "+TimeToStr(HT1,TIME_DATE|TIME_MINUTES);
create.hi();} }//end HTL();
void LTL() {
if(LT1==0) {
LT1=iTime(Symbol(),period,iLowest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1));
L1=iClose(Symbol(),period,iLowest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1));
LT2=iTime(Symbol(),period,iLowest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1)-1);
L2=iClose(Symbol(),period,iLowest(Symbol(),period,MODE_CLOSE,iBars(Symbol(),period),1)-1);
ln="Lo TL "+TimeToStr(LT1,TIME_DATE|TIME_MINUTES);
create.low(); }
if(LT1>0) {
LT1=LT2;
L1=L2;
LT2=Time[iBarShift(Symbol(),Period(),LT1)-1];
L2=Close[iBarShift(Symbol(),Period(),LT1)-1];
ln="Lo TL "+TimeToStr(LT1,TIME_DATE|TIME_MINUTES);
create.low();} }//end LTL();
void create.low() {
ObjectCreate(ln,2,0,LT1,L1,LT2,L2);
ObjectSet(ln,6,Color);//color
ObjectSet(ln,7,0);//STYLE_DASH
ObjectSet(ln,8,0);//width
ObjectSet(ln,9,1);//set as background drawing
ObjectSet(ln,10,1);//set as ray
for(int ii=iBarShift(Symbol(),Period(),LT1); ii>0; ii--) {
if(Close[ii]<ObjectGetValueByShift(ln,ii)) {
LT2=Time[ii];
L2=Close[ii];
ObjectMove(ln,1,LT2,L2); } } }//create.low();
void create.hi() {
ObjectCreate(hn,2,0,HT1,H1,HT2,H2);
ObjectSet(hn,6,Color);//color
ObjectSet(hn,7,0);//STYLE_DASH
ObjectSet(hn,8,0);//width
ObjectSet(hn,9,1);//set as background drawing
ObjectSet(hn,10,1);//set as ray
for(int ii=iBarShift(Symbol(),Period(),HT1); ii>0; ii--) {
if(Close[ii]>ObjectGetValueByShift(hn,ii)) {
HT2=Time[ii];
H2=Close[ii];
ObjectMove(hn,1,HT2,H2); } } }//end create.hi();
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---