mt4 version of SUPDEM to ctrader
09 Jul 2014, 21:33
This is the code for mt4, requesting for ctrader version. Thanks
//+------------------------------------------------------------------+
//| SupDem.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
#property indicator_buffers 2
extern int forced.tf = 0;
extern bool use.narrow.bands = false;
extern bool kill.retouch = true;
extern color TopColor = Maroon;
extern color BotColor = DarkBlue;
extern int Price_Width = 1;
double BuferUp[];
double BuferDn[];
double iPeriod=13;
int Dev=8;
int Step=5;
datetime t1,t2;
double p1,p2;
string pair;
double point;
int digits;
int tf;
string TAG;
double up.cur,dn.cur;
int init()
{
SetIndexBuffer(1,BuferUp);
SetIndexEmptyValue(1,0.0);
SetIndexStyle(1,DRAW_NONE);
SetIndexBuffer(0,BuferDn);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(0,DRAW_NONE);
if(forced.tf != 0) tf = forced.tf;
else tf = Period();
point = Point;
digits = Digits;
if(digits == 3 || digits == 5) point*=10;
TAG = "II_SupDem"+tf;
return(0);
}
int deinit()
{
ObDeleteObjectsByPrefix(TAG);
Comment("");
return(0);
}
int start()
{
if(NewBar()==true)
{
CountZZ(BuferUp,BuferDn,iPeriod,Dev,Step);
GetValid();
Draw();
}
return(0);
}
void Draw()
{
int i;
string s;
ObDeleteObjectsByPrefix(TAG);
for(i=0;i<iBars(pair,tf);i++)
{
if(BuferDn[i] > 0.0)
{
t1 = iTime(pair,tf,i);
t2 = Time[0];
if(use.narrow.bands) p2 = MathMax(iClose(pair,tf,i),iOpen(pair,tf,i));
else p2 = MathMin(iClose(pair,tf,i),iOpen(pair,tf,i));
p2 = MathMax(p2,MathMax(iLow(pair,tf,i-1),iLow(pair,tf,i+1)));
s = TAG+"UPAR"+tf+i;
ObjectCreate(s,OBJ_ARROW,0,0,0);
ObjectSet(s,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE);
ObjectSet(s, OBJPROP_TIME1, t2);
ObjectSet(s, OBJPROP_PRICE1, p2);
ObjectSet(s,OBJPROP_COLOR,TopColor);
ObjectSet(s,OBJPROP_WIDTH,Price_Width);
s = TAG+"UPFILL"+tf+i;
ObjectCreate(s,OBJ_RECTANGLE,0,0,0,0,0);
ObjectSet(s,OBJPROP_TIME1,t1);
ObjectSet(s,OBJPROP_PRICE1,BuferDn[i]);
ObjectSet(s,OBJPROP_TIME2,t2);
ObjectSet(s,OBJPROP_PRICE2,p2);
ObjectSet(s,OBJPROP_COLOR,TopColor);
}
if(BuferUp[i] > 0.0)
{
t1 = iTime(pair,tf,i);
t2 = Time[0];
if(use.narrow.bands) p2 = MathMin(iClose(pair,tf,i),iOpen(pair,tf,i));
else p2 = MathMax(iClose(pair,tf,i),iOpen(pair,tf,i));
if(i>0) p2 = MathMin(p2,MathMin(iHigh(pair,tf,i+1),iHigh(pair,tf,i-1)));
s = TAG+"DNAR"+tf+i;
ObjectCreate(s,OBJ_ARROW,0,0,0);
ObjectSet(s,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE);
ObjectSet(s, OBJPROP_TIME1, t2);
ObjectSet(s, OBJPROP_PRICE1, p2);
ObjectSet(s,OBJPROP_COLOR,BotColor);
ObjectSet(s,OBJPROP_WIDTH,Price_Width);
s = TAG+"DNFILL"+tf+i;
ObjectCreate(s,OBJ_RECTANGLE,0,0,0,0,0);
ObjectSet(s,OBJPROP_TIME1,t1);
ObjectSet(s,OBJPROP_PRICE1,p2);
ObjectSet(s,OBJPROP_TIME2,t2);
ObjectSet(s,OBJPROP_PRICE2,BuferUp[i]);
ObjectSet(s,OBJPROP_COLOR,BotColor);
}
}
}
bool NewBar() {
static datetime LastTime = 0;
if (iTime(pair,tf,0) != LastTime) {
LastTime = iTime(pair,tf,0);
return (true);
} else
return (false);
}
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 CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer2[], int ExtDepth, int ExtDeviation, int ExtBackstep )
{
int shift, back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
int count = iBars(pair,tf)-ExtDepth;
for(shift=count; shift>=0; shift--)
{
val = iLow(pair,tf,iLowest(pair,tf,MODE_LOW,ExtDepth,shift));
if(val==lastlow) val=0.0;
else
{
lastlow=val;
if((iLow(pair,tf,shift)-val)>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer[shift+back];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
}
}
}
ExtMapBuffer[shift]=val;
//--- high
val=iHigh(pair,tf,iHighest(pair,tf,MODE_HIGH,ExtDepth,shift));
if(val==lasthigh) val=0.0;
else
{
lasthigh=val;
if((val-iHigh(pair,tf,shift))>(ExtDeviation*Point)) val=0.0;
else
{
for(back=1; back<=ExtBackstep; back++)
{
res=ExtMapBuffer2[shift+back];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
}
}
}
ExtMapBuffer2[shift]=val;
}
// final cutting
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=count; shift>=0; shift--)
{
curlow=ExtMapBuffer[shift];
curhigh=ExtMapBuffer2[shift];
if((curlow==0)&&(curhigh==0)) continue;
//---
if(curhigh!=0)
{
if(lasthigh>0)
{
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
else ExtMapBuffer2[shift]=0;
}
//---
if(lasthigh<curhigh || lasthigh<0)
{
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
//----
if(curlow!=0)
{
if(lastlow>0)
{
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
else ExtMapBuffer[shift]=0;
}
//---
if((curlow<lastlow)||(lastlow<0))
{
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}
for(shift=iBars(pair,tf)-1; shift>=0; shift--)
{
if(shift>=count) ExtMapBuffer[shift]=0.0;
else
{
res=ExtMapBuffer2[shift];
if(res!=0.0) ExtMapBuffer2[shift]=res;
}
}
}
void GetValid()
{
up.cur = 0;
int upbar = 0;
dn.cur = 0;
int dnbar = 0;
double cur.hi = 0;
double cur.lo = 0;
double last.up = 0;
double last.dn = 0;
double low.dn = 0;
double hi.up = 0;
int i;
for(i=0;i<iBars(pair,tf);i++)
{
if(BuferUp[i] > 0)
{
up.cur = BuferUp[i];
cur.lo = BuferUp[i];
last.up = cur.lo;
break;
}
}
for(i=0;i<iBars(pair,tf);i++)
{
if(BuferDn[i] > 0)
{
dn.cur = BuferDn[i];
cur.hi = BuferDn[i];
last.dn = cur.hi;
break;
}
}
for(i=0;i<iBars(pair,tf);i++) // remove higher lows and lower highs
{
if(BuferDn[i] >= last.dn)
{
last.dn = BuferDn[i];
dnbar = i;
}
else BuferDn[i] = 0.0;
if(BuferDn[i] <= dn.cur && BuferUp[i] > 0.0) BuferDn[i] = 0.0;
if(BuferUp[i] <= last.up && BuferUp[i] > 0)
{
last.up = BuferUp[i];
upbar = i;
}
else BuferUp[i] = 0.0;
if(BuferUp[i] > up.cur) BuferUp[i] = 0.0;
}
if(kill.retouch)
{
if(use.narrow.bands)
{
low.dn = MathMax(iOpen(pair,tf,dnbar),iClose(pair,tf,dnbar));
hi.up = MathMin(iOpen(pair,tf,upbar),iClose(pair,tf,upbar));
}
else
{
low.dn = MathMin(iOpen(pair,tf,dnbar),iClose(pair,tf,dnbar));
hi.up = MathMax(iOpen(pair,tf,upbar),iClose(pair,tf,upbar));
}
for(i=MathMax(upbar,dnbar);i>=0;i--) // work back to zero and remove reentries into s/d
{
if(BuferDn[i] > low.dn && BuferDn[i] != last.dn) BuferDn[i] = 0.0;
else if(use.narrow.bands && BuferDn[i] > 0)
{
low.dn = MathMax(iOpen(pair,tf,i),iClose(pair,tf,i));
last.dn = BuferDn[i];
}
else if(BuferDn[i] > 0)
{
low.dn = MathMin(iOpen(pair,tf,i),iClose(pair,tf,i));
last.dn = BuferDn[i];
}
if(BuferUp[i] <= hi.up && BuferUp[i] > 0 && BuferUp[i] != last.up) BuferUp[i] = 0.0;
else if(use.narrow.bands && BuferUp[i] > 0)
{
hi.up = MathMin(iOpen(pair,tf,i),iClose(pair,tf,i));
last.up = BuferUp[i];
}
else if(BuferUp[i] > 0)
{
hi.up = MathMax(iOpen(pair,tf,i),iClose(pair,tf,i));
last.up = BuferUp[i];
}
}
}
}
Replies
andreforex
07 Sep 2014, 02:41
Ok, this indie Up above Works great, but.... is old version, could someone convert from new V2?
#property indicator_chart_window
#property indicator_buffers 2
extern int forcedtf = 0;
extern bool drawzones = true;
extern bool solidzones = true;
extern bool solidretouch = false;
extern bool recolorretouch = true;
extern bool recolorweakretouch = false;
extern bool zonestrength = true;
extern bool noweakzones = False;
extern bool drawedgeprice = True;
extern int zonewidth = 2;
extern bool zonefibs = false;
extern int fibstyle = 0;
extern bool HUDon = False;
extern bool timeron = False;
extern int layerzone = 0;
extern int layerHUD = 20;
extern int cornerHUD = 3;
extern int posx = 100;
extern int posy = 10;
extern bool alerton = true;
extern bool alertpopup = true;
extern string alertsound = "alert.wav";
extern color colorsupstrong = MediumPurple;
extern color colorsupweak = White;
extern color colorsupretouch = MediumPurple;
extern color colordemstrong = DeepSkyBlue;
extern color colordemweak = White;
extern color colordemretouch = DeepSkyBlue;
extern color colorfib = DodgerBlue;
extern color colorHUDtf = Navy;
extern color colorarrowup = SeaGreen;
extern color colorarrowdn = Crimson;
extern color colortimerback = DarkGray;
extern color colortimerbar = Red;
extern color colorshadow = DarkSlateGray;
extern bool limitzonevis = false;
extern bool sametfvis = true;
extern bool showonm1 = false;
extern bool showonm5 = true;
extern bool showonm15 = false;
extern bool showonm30 = false;
extern bool showonh1 = false;
extern bool showonh4 = false;
extern bool showond1 = false;
extern bool showonw1 = false;
extern bool showonmn = false;
extern int Price_Width = 1;
extern int timeoffset = 0;
extern bool globals = false;
double BuferUp1[];
double BuferDn1[];
double supRR[4];
double demRR[4];
double supwidth,demwidth;
string lhud,lzone;
int HUDx;
string fontHUD = "Comic Sans MS";
int fontHUDsize = 20;
string fontHUDprice = "Arial Bold";
int fontHUDpricesize = 12;
int arrowUP = 0x70;
int arrowDN = 0x71;
string fontarrow = "WingDings 3";
int fontarrowsize = 40;
int fontpairsize = 8;
string arrowglance;
color colorarrow;
int visible;
int rotation=270;
int lenbase;
string s_base="|||||||||||||||||||||||";
string timerfont="Arial Bold";
int sizetimerfont=8;
double min,max;
double iPeriod[4] = {3,8,13,34};
int Dev[4] = {2,5,8,13};
int Step[4] = {2,3,5,8};
datetime t1,t2;
double p1,p2;
string pair;
double point;
int digits;
int tf;
string TAG;
double fibsup,fibdem;
int SupCount,DemCount;
int SupAlert,DemAlert;
double upcur,dncur;
double fiblevelarray[13]={0,0.236,0.386,0.5,0.618,0.786,1,1.276,1.618,2.058,2.618,3.33,4.236};
string fibleveldesc[13]={"0","23.6%","38.6%","50%","61.8%","78.6%","100%","127.6%","161.8%","205.8%","261.80%","333%","423.6%"};
int hudtimerx,hudtimery,hudarrowx,hudarrowy,hudtfx,hudtfy;
int hudsupx,hudsupy,huddemx,huddemy;
int hudtimersx,hudtimersy,hudarrowsx,hudarrowsy,hudtfsx,hudtfsy;
int hudsupsx,hudsupsy,huddemsx,huddemsy;
int init()
{
SetIndexBuffer(1,BuferUp1);
SetIndexEmptyValue(1,0.0);
SetIndexStyle(1,DRAW_NONE);
SetIndexBuffer(0,BuferDn1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(0,DRAW_NONE);
if(layerHUD > 25) layerHUD = 25;
lhud = CharToStr(0x61+layerHUD);
if(layerzone > 25) layerzone = 25;
lzone = CharToStr(0x61+layerzone);
pair=Symbol();
if(forcedtf != 0) tf = forcedtf;
else tf = Period();
point = Point;
digits = Digits;
if(digits == 3 || digits == 5) point*=10;
if(HUDon && !drawzones) TAG = "II_HUD"+tf;
else TAG = "II_SupDem"+tf;
lenbase=StringLen(s_base);
if(HUDon) setHUD();
if(limitzonevis) setVisibility();
ObDeleteObjectsByPrefix(lhud+TAG);
ObDeleteObjectsByPrefix(lzone+TAG);
DoLogo();
return(0);
}
int deinit()
{
ObDeleteObjectsByPrefix(lhud+TAG);
ObDeleteObjectsByPrefix(lzone+TAG);
Comment("");
return(0);
}
int start()
{
if(NewBar()==true)
{
SupAlert = 1;
DemAlert = 1;
ObDeleteObjectsByPrefix(lzone+TAG);
CountZZ(BuferUp1,BuferDn1,iPeriod[0],Dev[0],Step[0]);
GetValid(BuferUp1,BuferDn1);
Draw();
if(HUDon) HUD();
}
if(HUDon && timeron) BarTimer();
if(alerton) CheckAlert();
return(0);
}
void CheckAlert(){
// SupCount DemCount
// SupAlert DemAlert
double price = ObjectGet(lzone+TAG+"UPAR"+SupAlert,OBJPROP_PRICE1);
if(Close[0] > price && price > point){
if(alertpopup) Alert(pair+" "+TimeFrameToString(tf)+" Supply Zone Entered at "+DoubleToStr(price,Digits));
PlaySound(alertsound);
SupAlert++;
}
price = ObjectGet(lzone+TAG+"DNAR"+DemAlert,OBJPROP_PRICE1);
if(Close[0] < price){
Alert(pair+" "+TimeFrameToString(tf)+" Demand Zone Entered at "+DoubleToStr(price,Digits));
PlaySound(alertsound);
DemAlert++;
}
}
void Draw()
{
int fibsuphit=0;
int fibdemhit=0;
int sc=0,dc=0;
int i,j,countstrong,countweak;
color c;
string s;
bool exit,draw,fle,fhe,retouch;
bool valid;
double val;
fhe=false;
fle=false;
SupCount=0;
DemCount=0;
fibsup=0;
fibdem=0;
for(i=0;i<iBars(pair,tf);i++){
if(BuferDn1[i] > point){
retouch = false;
valid = false;
t1 = iTime(pair,tf,i);
t2 = Time[0];
p2 = MathMin(iClose(pair,tf,i),iOpen(pair,tf,i));
if(i>0) p2 = MathMax(p2,MathMax(iLow(pair,tf,i-1),iLow(pair,tf,i+1)));
if(i>0) p2 = MathMax(p2,MathMin(iOpen(pair,tf,i-1),iClose(pair,tf,i-1)));
p2 = MathMax(p2,MathMin(iOpen(pair,tf,i+1),iClose(pair,tf,i+1)));
draw=true;
if(recolorretouch || !solidretouch){
exit = false;
for(j=i;j>=0;j--){
if(j==0 && !exit) {draw=false;break;}
if(!exit && iHigh(pair,tf,j)<p2) {exit=true;continue;}
if(exit && iHigh(pair,tf,j)>p2) {
retouch = true;
if(zonefibs && fibsuphit==0){ fibsup = p2; fibsuphit = j;}
break;
}
}
}
if(SupCount != 0) val = ObjectGet(TAG+"UPZONE"+SupCount,OBJPROP_PRICE2); //final sema cull
else val=0;
if(drawzones && draw && BuferDn1[i]!=val) {
valid=true;
c = colorsupstrong;
if(zonestrength && (retouch || !recolorretouch)){
countstrong=0;
countweak=0;
for(j=i;j<1000000;j++){
if(iHigh(pair,tf,j+1)<p2) countstrong++;
if(iHigh(pair,tf,j+1)>BuferDn1[i]) countweak++;
if(countstrong > 1) break;
else if(countweak > 1){
c=colorsupweak;
if(noweakzones) draw = false;
break;
}
}
}
// if(c == color.sup.weak && !no.weak.zones) draw = false;
if(draw){
if(recolorretouch && retouch && countweak<2) c = colorsupretouch;
else if(recolorweakretouch && retouch && countweak>1) c = colorsupretouch;
SupCount++;
if(drawedgeprice){
s = lzone+TAG+"UPAR"+SupCount;
ObjectCreate(s,OBJ_ARROW,0,0,0);
ObjectSet(s,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE);
ObjectSet(s, OBJPROP_TIME1, t2);
ObjectSet(s, OBJPROP_PRICE1, p2);
ObjectSet(s,OBJPROP_COLOR,c);
ObjectSet(s,OBJPROP_WIDTH,Price_Width);
if(limitzonevis) ObjectSet(s,OBJPROP_TIMEFRAMES,visible);
}
s = lzone+TAG+"UPZONE"+SupCount;
ObjectCreate(s,OBJ_RECTANGLE,0,0,0,0,0);
ObjectSet(s,OBJPROP_TIME1,t1);
ObjectSet(s,OBJPROP_PRICE1,BuferDn1[i]);
ObjectSet(s,OBJPROP_TIME2,t2);
ObjectSet(s,OBJPROP_PRICE2,p2);
ObjectSet(s,OBJPROP_COLOR,c);
ObjectSet(s,OBJPROP_BACK,true);
if(limitzonevis) ObjectSet(s,OBJPROP_TIMEFRAMES,visible);
if(!solidzones) {ObjectSet(s,OBJPROP_BACK,false);ObjectSet(s,OBJPROP_WIDTH,zonewidth);}
if(!solidretouch && retouch) {ObjectSet(s,OBJPROP_BACK,false);ObjectSet(s,OBJPROP_WIDTH,zonewidth);}
if(globals){
GlobalVariableSet(TAG+"S.PH"+SupCount,BuferDn1[i]);
GlobalVariableSet(TAG+"S.PL"+SupCount,p2);
GlobalVariableSet(TAG+"S.T"+SupCount,iTime(pair,tf,i));
}
if(!fhe && c!=colordemretouch){fhe=true;GlobalVariableSet(TAG+"GOSHORT",p2);}
}
}
if(draw && sc<4 && HUDon && valid){
if(sc==0) supwidth = BuferDn1[i] - p2;
supRR[sc] = p2;
sc++;
}
}
if(BuferUp1[i] > point){
retouch = false;
valid=false;
t1 = iTime(pair,tf,i);
t2 = Time[0];
p2 = MathMax(iClose(pair,tf,i),iOpen(pair,tf,i));
if(i>0) p2 = MathMin(p2,MathMin(iHigh(pair,tf,i+1),iHigh(pair,tf,i-1)));
if(i>0) p2 = MathMin(p2,MathMax(iOpen(pair,tf,i-1),iClose(pair,tf,i-1)));
p2 = MathMin(p2,MathMax(iOpen(pair,tf,i+1),iClose(pair,tf,i+1)));
c = colordemstrong;
draw=true;
if(recolorretouch || !solidretouch){
exit = false;
for(j=i;j>=0;j--) {
if(j==0 && !exit) {draw=false;break;}
if(!exit && iLow(pair,tf,j)>p2) {exit=true;continue;}
if(exit && iLow(pair,tf,j)<p2) {
retouch = true;
if(zonefibs && fibdemhit==0){fibdem = p2; fibdemhit = j; }
break;
}
}
}
if(DemCount != 0) val = ObjectGet(TAG+"DNZONE"+DemCount,OBJPROP_PRICE2); //final sema cull
else val=0;
if(drawzones && draw && BuferUp1[i]!=val){
valid = true;
if(zonestrength && (retouch || !recolorretouch)){
countstrong=0;
countweak=0;
for(j=i;j<1000000;j++){
if(iLow(pair,tf,j+1)>p2) countstrong++;
if(iLow(pair,tf,j+1)<BuferUp1[i]) countweak++;
if(countstrong > 1) break;
else if(countweak > 1){
if(noweakzones) draw = false;
c=colordemweak;
break;
}
}
}
if(draw){
if(recolorretouch && retouch && countweak<2) c = colordemretouch;
else if(recolorweakretouch && retouch && countweak>1) c = colordemretouch;
DemCount++;
if(drawedgeprice){
s = lzone+TAG+"DNAR"+DemCount;
ObjectCreate(s,OBJ_ARROW,0,0,0);
ObjectSet(s,OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE);
ObjectSet(s, OBJPROP_TIME1, t2);
ObjectSet(s, OBJPROP_PRICE1, p2);
ObjectSet(s,OBJPROP_COLOR,c);
ObjectSet(s,OBJPROP_WIDTH,Price_Width);
if(limitzonevis) ObjectSet(s,OBJPROP_TIMEFRAMES,visible);
}
s = lzone+TAG+"DNZONE"+DemCount;
ObjectCreate(s,OBJ_RECTANGLE,0,0,0,0,0);
ObjectSet(s,OBJPROP_TIME1,t1);
ObjectSet(s,OBJPROP_PRICE1,p2);
ObjectSet(s,OBJPROP_TIME2,t2);
ObjectSet(s,OBJPROP_PRICE2,BuferUp1[i]);
ObjectSet(s,OBJPROP_COLOR,c);
ObjectSet(s,OBJPROP_BACK,true);
if(limitzonevis) ObjectSet(s,OBJPROP_TIMEFRAMES,visible);
if(!solidzones) {ObjectSet(s,OBJPROP_BACK,false);ObjectSet(s,OBJPROP_WIDTH,zonewidth);}
if(!solidretouch && retouch) {ObjectSet(s,OBJPROP_BACK,false);ObjectSet(s,OBJPROP_WIDTH,zonewidth);}
if(globals){
GlobalVariableSet(TAG+"D.PL"+DemCount,BuferUp1[i]);
GlobalVariableSet(TAG+"D.PH"+DemCount,p2);
GlobalVariableSet(TAG+"D.T"+DemCount,iTime(pair,tf,i));
}
if(!fle && c!=colordemretouch){fle=true;GlobalVariableSet(TAG+"GOLONG",p2);}
}
}
if(draw && dc<4 && HUDon && valid){
if(dc==0) demwidth = p2-BuferUp1[i];
demRR[dc] = p2;
dc++;
}
}
}
if(zonefibs || HUDon){
double a,b;
int dr=0;
int sr=0;
int d1=0;
int s1=0;
int tf=0;
for(i=0;i<100000;i++){
if(iHigh(pair,tf,i)>fibsup && sr==0) sr = i;
if(iHigh(pair,tf,i)>supRR[0] && s1==0) s1 = i;
if(iLow(pair,tf,i)<fibdem && dr==0) dr = i;
if(iLow(pair,tf,i)<demRR[0] && d1==0) d1 = i;
if(sr!=0&&s1!=0&&dr!=0&&d1!=0) break;
}
}
if(zonefibs){
if(dr<sr) {b = fibdem;a = supRR[0];}
else {b = fibsup;a = demRR[0];}
s = lzone+TAG+"FIBO";
ObjectCreate(s, OBJ_FIBO, 0,Time[0],a,Time[0],b);
ObjectSet(s, OBJPROP_COLOR, CLR_NONE);
ObjectSet(s, OBJPROP_STYLE, fibstyle);
ObjectSet(s, OBJPROP_RAY, true);
ObjectSet(s, OBJPROP_BACK, true);
if(limitzonevis) ObjectSet(s,OBJPROP_TIMEFRAMES,visible);
int level_count=ArraySize(fiblevelarray);
ObjectSet(s, OBJPROP_FIBOLEVELS, level_count);
ObjectSet(s, OBJPROP_LEVELCOLOR, colorfib);
for(j=0; j<level_count; j++){
ObjectSet(s, OBJPROP_FIRSTLEVEL+j, fiblevelarray[j]);
ObjectSetFiboDescription(s,j,fibleveldesc[j]);
}
}
if(HUDon) {
if(d1<s1) {b = demRR[0];a = supRR[0]; arrowglance = CharToStr(arrowUP); colorarrow = colorarrowup;}
else {b = supRR[0];a = demRR[0]; arrowglance = CharToStr(arrowDN); colorarrow = colorarrowdn;}
min = MathMin(a,b);
max = MathMax(a,b);
}
}
bool NewBar() {
static datetime LastTime = 0;
if (iTime(pair,tf,0)+timeoffset != LastTime) {
LastTime = iTime(pair,tf,0)+timeoffset;
return (true);
} else
return (false);
}
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 CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer2[], int ExtDepth, int ExtDeviation, int ExtBackstep ){ // based on code (C) metaquote{
int shift, back,lasthighpos,lastlowpos;
double val,res;
double curlow,curhigh,lasthigh,lastlow;
int count = iBars(pair,tf)-ExtDepth;
for(shift=count; shift>=0; shift--){
val = iLow(pair,tf,iLowest(pair,tf,MODE_LOW,ExtDepth,shift));
if(val==lastlow) val=0.0;
else {
lastlow=val;
if((iLow(pair,tf,shift)-val)>(ExtDeviation*Point)) val=0.0;
else{
for(back=1; back<=ExtBackstep; back++){
res=ExtMapBuffer[shift+back];
if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
}
}
}
ExtMapBuffer[shift]=val;
//--- high
val=iHigh(pair,tf,iHighest(pair,tf,MODE_HIGH,ExtDepth,shift));
if(val==lasthigh) val=0.0;
else {
lasthigh=val;
if((val-iHigh(pair,tf,shift))>(ExtDeviation*Point)) val=0.0;
else{
for(back=1; back<=ExtBackstep; back++){
res=ExtMapBuffer2[shift+back];
if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
}
}
}
ExtMapBuffer2[shift]=val;
}
// final cutting
lasthigh=-1; lasthighpos=-1;
lastlow=-1; lastlowpos=-1;
for(shift=count; shift>=0; shift--){
curlow=ExtMapBuffer[shift];
curhigh=ExtMapBuffer2[shift];
if((curlow==0)&&(curhigh==0)) continue;
//---
if(curhigh!=0){
if(lasthigh>0) {
if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
else ExtMapBuffer2[shift]=0;
}
//---
if(lasthigh<curhigh || lasthigh<0){
lasthigh=curhigh;
lasthighpos=shift;
}
lastlow=-1;
}
//----
if(curlow!=0){
if(lastlow>0){
if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
else ExtMapBuffer[shift]=0;
}
//---
if((curlow<lastlow)||(lastlow<0)){
lastlow=curlow;
lastlowpos=shift;
}
lasthigh=-1;
}
}
for(shift=iBars(pair,tf)-1; shift>=0; shift--){
if(shift>=count) ExtMapBuffer[shift]=0.0;
else {
res=ExtMapBuffer2[shift];
if(res!=0.0) ExtMapBuffer2[shift]=res;
}
}
}
void GetValid(double& ExtMapBuffer[], double& ExtMapBuffer2[]){
upcur = 0;
int upbar = 0;
dncur = 0;
int dnbar = 0;
double curhi = 0;
double curlo = 0;
double lastup = 0;
double lastdn = 0;
double lowdn = 0;
double hiup = 0;
int i;
for(i=0;i<iBars(pair,tf);i++) if(ExtMapBuffer[i] > 0){
upcur = ExtMapBuffer[i];
curlo = ExtMapBuffer[i];
lastup = curlo;
break;
}
for(i=0;i<iBars(pair,tf);i++) if(ExtMapBuffer2[i] > 0){
dncur = ExtMapBuffer2[i];
curhi = ExtMapBuffer2[i];
lastdn = curhi;
break;
}
for(i=0;i<iBars(pair,tf);i++) // remove higher lows and lower highs
{
if(ExtMapBuffer2[i] >= lastdn) {
lastdn = ExtMapBuffer2[i];
dnbar = i;
}
else ExtMapBuffer2[i] = 0.0;
if(ExtMapBuffer2[i] <= dncur && ExtMapBuffer[i] > 0.0) ExtMapBuffer2[i] = 0.0;
if(ExtMapBuffer[i] <= lastup && ExtMapBuffer[i] > 0) {
lastup = ExtMapBuffer[i];
upbar = i;
}
else ExtMapBuffer[i] = 0.0;
if(ExtMapBuffer[i] > upcur) ExtMapBuffer[i] = 0.0;
}
lowdn = MathMin(iOpen(pair,tf,dnbar),iClose(pair,tf,dnbar));
hiup = MathMax(iOpen(pair,tf,upbar),iClose(pair,tf,upbar));
for(i=MathMax(upbar,dnbar);i>=0;i--) {// work back to zero and remove reentries into s/d
if(ExtMapBuffer2[i] > lowdn && ExtMapBuffer2[i] != lastdn) ExtMapBuffer2[i] = 0.0;
else if(ExtMapBuffer2[i] > 0) {
lastdn = ExtMapBuffer2[i];
lowdn = MathMin(iClose(pair,tf,i),iOpen(pair,tf,i));
if(i>0) lowdn = MathMax(lowdn,MathMax(iLow(pair,tf,i-1),iLow(pair,tf,i+1)));
if(i>0) lowdn = MathMax(lowdn,MathMin(iOpen(pair,tf,i-1),iClose(pair,tf,i-1)));
lowdn = MathMax(lowdn,MathMin(iOpen(pair,tf,i+1),iClose(pair,tf,i+1)));
}
if(ExtMapBuffer[i] <= hiup && ExtMapBuffer[i] > 0 && ExtMapBuffer[i] != lastup) ExtMapBuffer[i] = 0.0;
else if(ExtMapBuffer[i] > 0){
lastup = ExtMapBuffer[i];
hiup = MathMax(iClose(pair,tf,i),iOpen(pair,tf,i));
if(i>0) hiup = MathMin(hiup,MathMin(iHigh(pair,tf,i+1),iHigh(pair,tf,i-1)));
if(i>0) hiup = MathMin(hiup,MathMax(iOpen(pair,tf,i-1),iClose(pair,tf,i-1)));
hiup = MathMin(hiup,MathMax(iOpen(pair,tf,i+1),iClose(pair,tf,i+1)));
}
}
}
void HUD()
{
string s = TimeFrameToString(tf);
string u = DoubleToStr(ObjectGet(lzone+TAG+"UPAR"+1,OBJPROP_PRICE1),Digits);
string d = DoubleToStr(ObjectGet(lzone+TAG+"DNAR"+1,OBJPROP_PRICE1),Digits);
string l = "b";
DrawText(l,s,hudtfx,hudtfy,colorHUDtf,fontHUD,fontHUDsize,cornerHUD);
DrawText(l,arrowglance,hudarrowx,hudarrowy,colorarrow,fontarrow,fontarrowsize,cornerHUD,0,true);
DrawText(l,u,hudsupx,hudsupy,colorsupstrong,fontHUDprice,fontHUDpricesize,cornerHUD);
DrawText(l,d,huddemx,huddemy,colordemstrong,fontHUDprice,fontHUDpricesize,cornerHUD);
l = "a";
DrawText(l,s,hudtfsx,hudtfsy,colorshadow,fontHUD,fontHUDsize,cornerHUD);
DrawText(l,arrowglance,hudarrowsx,hudarrowsy,colorshadow,fontarrow,fontarrowsize,cornerHUD,0,true);
DrawText(l,u,hudsupsx,hudsupsy,colorshadow,fontHUDprice,fontHUDpricesize,cornerHUD);
DrawText(l,d,huddemsx,huddemsy,colorshadow,fontHUDprice,fontHUDpricesize,cornerHUD);
}
void BarTimer() // Original Code by Vasyl Gumenyak, I just fucked it up
{
int i=0,sec=0;
double pc=0.0;
string time="",s_end="",s;
s = lhud+TAG+"btimerback";
if (ObjectFind(s) == -1) {
ObjectCreate(s , OBJ_LABEL,0,0,0);
ObjectSet(s, OBJPROP_XDISTANCE, hudtimerx);
ObjectSet(s, OBJPROP_YDISTANCE, hudtimery);
ObjectSet(s, OBJPROP_CORNER, cornerHUD);
ObjectSet(s, OBJPROP_ANGLE, rotation);
ObjectSetText(s, s_base, sizetimerfont, timerfont, colortimerback);
}
sec=TimeCurrent()-iTime(pair,tf,0);
i=(lenbase-1)*sec/(tf*60);
pc=100-(100.0*sec/(tf*60));
if(i>lenbase-1) i=lenbase-1;
if(i<lenbase-1) s_end=StringSubstr(s_base,i+1,lenbase-i-1);
time=StringConcatenate("|",s_end);
s = lhud+TAG+"timerfront";
if (ObjectFind(s) == -1) {
ObjectCreate(s , OBJ_LABEL,0,0,0);
ObjectSet(s, OBJPROP_XDISTANCE, hudtimerx);
ObjectSet(s, OBJPROP_YDISTANCE, hudtimery);
ObjectSet(s, OBJPROP_CORNER, cornerHUD);
ObjectSet(s, OBJPROP_ANGLE, rotation);
}
ObjectSetText(s, time, sizetimerfont, timerfont, colortimerbar);
}
void DrawText(string l, string t, int x, int y, color c, string f, int s, int k=0, int a=0, bool b=false)
{
string tag = lhud+TAG+l+x+y;
ObjectDelete(tag);
ObjectCreate(tag,OBJ_LABEL,0,0,0);
ObjectSetText(tag,t,s,f,c);
ObjectSet(tag,OBJPROP_XDISTANCE,x);
ObjectSet(tag,OBJPROP_YDISTANCE,y);
ObjectSet(tag,OBJPROP_CORNER,k);
ObjectSet(tag,OBJPROP_ANGLE,a);
if(b) ObjectSet(tag,OBJPROP_BACK,true);
}
string TimeFrameToString(int tf) //code by TRO
{
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 setHUD()
{
switch(tf) {
case PERIOD_M1: HUDx=7 ; break;
case PERIOD_M5: HUDx=7 ; break;
case PERIOD_M15: HUDx=3 ; break;
case PERIOD_M30: HUDx=2 ; break;
case PERIOD_H1: HUDx=12 ; break;
case PERIOD_H4: HUDx=8 ; break;
case PERIOD_D1 : HUDx=12 ; break;
case PERIOD_W1: HUDx=8 ; break;
case PERIOD_MN1: HUDx=7 ; break;
}
if(cornerHUD > 3) cornerHUD=0;
if(cornerHUD == 0 || cornerHUD == 2) rotation = 90;
switch(cornerHUD){
case 0 : hudtfx = posx-HUDx+10;
hudtfy = posy+18;
hudarrowx = posx-2;
hudarrowy = posy+7;
hudsupx = posx;
hudsupy = posy;
huddemx = posx;
huddemy = posy+56;
hudtimerx = posx+50;
hudtimery = posy+72;
hudtfsx = hudtfx+1;
hudtfsy = hudtfy+1;
hudarrowsx = hudarrowx+1;
hudarrowsy = hudarrowy+1;
hudsupsx = hudsupx+1;
hudsupsy = hudsupy+1;
huddemsx = huddemx+1;
huddemsy = huddemy+1;
break;
case 1 : hudtfx = posx+HUDx;
hudtfy = posy+18;
hudarrowx = posx+2;
hudarrowy = posy+7;
hudsupx = posx;
hudsupy = posy;
huddemx = posx;
huddemy = posy+56;
hudtimerx = posx-15;
hudtimery = posy+71;
hudtfsx = hudtfx-1;
hudtfsy = hudtfy+1;
hudarrowsx = hudarrowx-1;
hudarrowsy = hudarrowy+1;
hudsupsx = hudsupx-1;
hudsupsy = hudsupy+1;
huddemsx = huddemx-1;
huddemsy = huddemy+1;
break;
case 2 : hudtfx = posx-HUDx;
hudtfy = posy+20;
hudarrowx = posx-2;
hudarrowy = posy+7;
hudsupx = posx;
hudsupy = posy+56;
huddemx = posx;
huddemy = posy;
hudtimerx = posx+62;
hudtimery = posy+3;
hudtfsx = hudtfx+1;
hudtfsy = hudtfy-1;
hudarrowsx = hudarrowx+1;
hudarrowsy = hudarrowy-1;
hudsupsx = hudsupx+1;
hudsupsy = hudsupy-1;
huddemsx = huddemx+1;
huddemsy = huddemy-1;
break;
case 3 : hudtfx = posx+HUDx;
hudtfy = posy+20;
hudarrowx = posx+2;
hudarrowy = posy+7;
hudsupx = posx;
hudsupy = posy+56;
huddemx = posx;
huddemy = posy;
hudtimerx = posx-2;
hudtimery = posy+3;
hudtfsx = hudtfx-1;
hudtfsy = hudtfy-1;
hudarrowsx = hudarrowx-1;
hudarrowsy = hudarrowy-1;
hudsupsx = hudsupx-1;
hudsupsy = hudsupy-1;
huddemsx = huddemx-1;
huddemsy = huddemy-1;
break;
}
}
void DoLogo(){
string TAG = CharToStr(0x61+27)+"II_Logo";
if( ObjectFind(TAG+"ZZ"+0) >= 0 && ObjectFind(TAG+"ZZ"+1) >= 0 && ObjectFind(TAG+"ZZ"+2) >= 0 &&
ObjectFind(TAG+"AZ"+0) >= 0 && ObjectFind(TAG+"AZ"+1) >= 0 && ObjectFind(TAG+"AZ"+2) >= 0 ) return;
string str[3] = {"$","Insanity","Industries"};
int size[3] = {25,10,10};
int posx[3] = {47,19,17};
int posy[3] = {10,25,15};
int posxs[3] = {46,18,16};
int posys[3] = {9,24,14};
for(int i=0;i<3;i++){
string n = TAG+"ZZ"+i;
ObjectDelete(n);
ObjectCreate(n,OBJ_LABEL,0,0,0);
ObjectSetText(n,str[i],size[i],"Pieces Of Eight",AliceBlue);
ObjectSet(n,OBJPROP_XDISTANCE,posx[i]);
ObjectSet(n,OBJPROP_YDISTANCE,posy[i]);
ObjectSet(n,OBJPROP_CORNER,3);
n = TAG+"AZ"+i;
ObjectDelete(n);
ObjectCreate(n,OBJ_LABEL,0,0,0);
ObjectSetText(n,str[i],size[i],"Pieces Of Eight",Black);
ObjectSet(n,OBJPROP_XDISTANCE,posxs[i]);
ObjectSet(n,OBJPROP_YDISTANCE,posys[i]);
ObjectSet(n,OBJPROP_CORNER,3);
}
}
void setVisibility()
{
int per = Period();
visible=0;
if(sametfvis){
if(forcedtf == per || forcedtf == 0){
switch(per){
case PERIOD_M1: visible= 0x0001 ; break;
case PERIOD_M5: visible= 0x0002 ; break;
case PERIOD_M15: visible= 0x0004 ; break;
case PERIOD_M30: visible= 0x0008 ; break;
case PERIOD_H1: visible= 0x0010 ; break;
case PERIOD_H4: visible= 0x0020 ; break;
case PERIOD_D1: visible= 0x0040 ; break;
case PERIOD_W1: visible= 0x0080 ; break;
case PERIOD_MN1: visible= 0x0100 ;
}
}
} else {
if(showonm1) visible += 0x0001;
if(showonm5) visible += 0x0002;
if(showonm15) visible += 0x0004;
if(showonm30) visible += 0x0008;
if(showonh1) visible += 0x0010;
if(showonh4) visible += 0x0020;
if(showond1) visible += 0x0040;
if(showonw1) visible += 0x0080;
if(showonmn) visible += 0x0100;
}
}
@andreforex

bryanmac
30 Jul 2014, 18:07
https://www.dropbox.com/s/me9fjkd2if6vaxr/SupDem.algo
@bryanmac