harmonman
Download scriptThis script is a specialized trading tool designed for MetaTrader 4 that automates the identification and visual mapping of Harmonic Trading Patterns. These patterns are complex geometric price structures (like XABCDE) used by traders to predict potential reversal points in the market.
Instead of requiring the user to manually calculate complicated Fibonacci ratios, this script automates the heavy lifting through a multi-step logic process:
1. Pattern Identification and Mapping
The core logic begins by identifying key structural "vertices" on the chart (labeled as X, A, B, C, and D). It automatically looks for these points based on price swings. Once identified, it draws trend lines connecting them to form the visual skeleton of a harmonic pattern.
2. Database-Driven Validation
One of the script's unique features is its ability to communicate with an external data source (a CSV file). The script reads this database to verify if the current price movement on your chart matches known "valid" harmonic ratios.
- It extracts specific minimum and maximum allowed values for different segments of the pattern.
- It compares the live market's performance against these pre-defined rules to see if a valid trade setup is forming.
3. Real-Time Geometry Calculation
As price moves, the script constantly performs several mathematical checks:
- Ratio Analysis: It calculates the relative sizes of different legs (e.g., comparing the length of AB to XA).
- Geometric Integrity: It ensures that the pattern is "connected" correctly (e.g., checking that point B follows A, and C follows B in chronological order).
- Fibonacci Retracement: It automatically calculates and displays Fibonacci retracement levels based on the overall height of the identified structure.
4. Visual Feedback & Zone Highlighting
The script provides immediate visual cues to help you make trading decisions:
- Pattern Labeling: If a valid pattern is detected, it labels the specific type of harmonic move and highlights it with triangles.
- Support/Resistance Zones (SLD/SL): One of its most advanced features is the "Auto-Search" logic. When a valid pattern is found, it identifies potential Support and Resistance zones based on the database records. It then draws shaded rectangles (Aqua for bearish/downward moves, Red for bullish/upward moves) to show where price might react or stall.
- Interactive Dashboard: The script includes an on-screen user interface with buttons that allow you to toggle features on/off, reset the chart, change colors, and manually trigger a search for new patterns.
Summary of User Experience
For a non-programmer, this tool acts like an automated analyst. You can watch the chart as it identifies geometric shapes in real-time. When the price hits a specific "harmonic" shape that matches your data's criteria, the script draws the geometry, calculates the math, and paints potential "danger zones" or "entry zones" on your screen, significantly reducing the need for manual calculation.
//+------------------------------------------------------------------+
//| HarmonMan.mq4 |
//| Copyright 2015, Kabul |
//| panji_xx@yahoo.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Kabul"
#property link "panji_xx@yahoo.com"
#property version "1.00"
#property strict
#property indicator_chart_window
input string InpFileName="harmontrad.csv"; // file name
input int InpEncodingType=FILE_ANSI;
input int DatabaseRecord=84;
input color TriangleColor=clrLime;
input color Hor_Up_Clr=clrRed;
input color Hor_Dn_Clr=clrYellow;
input color Rect_Up_Clr=clrMagenta;
input color Rect_Dn_Clr=clrAqua;
#define OBJNAME_LABEL "Harmonic Ratios :)"
string hasil;
datetime D_tm,C_tm,B_tm,A_tm,X_tm;
double D_pr,C_pr,B_pr,A_pr,X_pr;
double LlXA,LlAB,LlBC,LlCD,LlXB,LlAC,LlXD,LlBD;
double awal,akhir,res1,res2,resak;
double cari1[],cari2[],cari3[],cari4[],jump[],jump1[];
bool found=false;
int kstrok,kdown,grsbts,grsbts1,grsbts2,grsbts3,wrgval;
bool Active = True;
int Harmonic_Pattern_No= 0;
color triangle,triangle1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
EventSetTimer(1);
ObjectDelete(0,"SEARCH");
ObjectDelete(0,"Tulis");
SetPanel("SEARCH",0,875,20,74,30,clrRed,clrBlack,1);
SetText("Tulis","SEARCH",879,25,clrWhite,12,"Georgia");
triangle=TriangleColor;
triangle1=TriangleColor;
kstrok=0;kdown=0;grsbts=0;grsbts1=0;grsbts2=0;grsbts3=0;wrgval=0;
ArrayResize(cari1,DatabaseRecord);
ArrayResize(cari2,DatabaseRecord);
ArrayResize(cari3,DatabaseRecord);
ArrayResize(cari4,DatabaseRecord);
ObjectDelete(0,"JUMP");
ObjectDelete(0,"Tulis1");
SetPanel("JUMP",0,875,50,74,30,clrAqua,clrBlack,1);
SetText("Tulis1","NEXT",890,55,clrBlack,12,"Georgia");
ObjectSet("Tulis",OBJPROP_SELECTABLE,false);
ObjectSet("SEARCH",OBJPROP_SELECTABLE,false);
ObjectSet("Tulis1",OBJPROP_SELECTABLE,false);
ObjectSet("JUMP",OBJPROP_SELECTABLE,false);
ObjectDelete(0,"ON");
ObjectDelete(0,"STATUS");
SetPanel("ON",0,875,80,74,30,clrLime,clrBlack,1);
SetText("STATUS","ON",898,85,clrRed,12,"Georgia");
ObjectSet("ON",OBJPROP_SELECTABLE,false);
ObjectSet("STATUS",OBJPROP_SELECTABLE,false);
ObjectDelete(0,"COLOR");
ObjectDelete(0,"txtCOLOR");
SetPanel("COLOR",0,875,110,74,30,clrLime,clrBlack,1);
SetText("txtCOLOR","COLOUR",878,115,clrRed,12,"Georgia");
ObjectSet("COLOR",OBJPROP_SELECTABLE,false);
ObjectSet("txtCOLOR",OBJPROP_SELECTABLE,false);
ObjectDelete(0,"XABC");
ObjectDelete(0,"txtXABC");
SetPanel("XABC",0,875,140,74,30,clrLime,clrBlack,1);
SetText("txtXABC","XABC",890,145,clrRed,12,"Georgia");
ObjectSet("XABC",OBJPROP_SELECTABLE,false);
ObjectSet("txtXABC",OBJPROP_SELECTABLE,false);
ObjectDelete(0,"RESET");
ObjectDelete(0,"txtRESET");
SetPanel("RESET",0,875,170,74,30,clrLime,clrBlack,1);
SetText("txtRESET","RESET",885,175,clrRed,12,"Georgia");
ObjectSet("RESET",OBJPROP_SELECTABLE,false);
ObjectSet("txtRESET",OBJPROP_SELECTABLE,false);
ObjectDelete(0,"AUTO");
ObjectDelete(0,"txtAUTO");
SetPanel("AUTO",0,875,200,74,30,clrLime,clrBlack,1);
SetText("txtAUTO","AUTO",890,205,clrRed,12,"Georgia");
ObjectSet("AUTO",OBJPROP_SELECTABLE,false);
ObjectSet("txtAUTO",OBJPROP_SELECTABLE,false);
awal=0.0;
createIndicatorLabel(OBJNAME_LABEL);
if (UninitializeReason()==3)
{
XABC();
}
//---
return(INIT_SUCCEEDED);
}
int deinit()
{
if (UninitializeReason()==1)
{
reset();
}
return(0);
}
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 value of prev_calculated for next call
return(rates_total);
}
void OnChartEvent(const int id, // Event identifier
const long& lparam, // Event parameter of long type
const double& dparam, // Event parameter of double type
const string& sparam) // Event parameter of string type
{
if (id==CHARTEVENT_OBJECT_CLICK)
{
if (sparam=="SEARCH")
{
ObjectDelete(0,"FOUND");
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrLime);
ObjectSet("D",0,Time[0]+(4*Period()*60));
ObjectSet("D",0,Time[0]+(4*Period()*60));
ObjectSetInteger(0,"Tulis",OBJPROP_COLOR,clrRed);
}
if (sparam=="JUMP")
{
if((ObjectGet("C",1)>ObjectGet("B",1))&&(ObjectFind(0,"SLD100")>=0))
{
if(grsbts==0)
{
grsbts++;
for (int mii=0;mii<100;mii++)
{
grsbts++;
if (ObjectFind(0,"SPLI"+IntegerToString(mii))<0)
{
ArrayResize(jump,grsbts+1);
ArrayInitialize(jump,0);
jump[0]=ObjectGet("SLD100",OBJPROP_PRICE1);
jump[1]=ObjectGet("SLD100",3);
for (int miii=0;miii<grsbts-1;miii++)
{
jump[miii+2]=ObjectGet("SPLI"+IntegerToString(miii),3);
}
break;
}
}
ArraySort(jump,WHOLE_ARRAY,0,MODE_DESCEND);
ObjectSet("D",1,jump[0]);
}
else
{
grsbts1++;
if (grsbts1==grsbts) {grsbts1=0;}
ObjectSet("D",1,jump[grsbts1]);
}
}
if((ObjectGet("C",1)<ObjectGet("B",1))&&(ObjectFind(0,"SL100")>=0))
{
if(grsbts2==0)
{
grsbts2++;
for (int mii=0;mii<100;mii++)
{
grsbts2++;
if (ObjectFind(0,"SPLIUP"+IntegerToString(mii))<0)
{
ArrayResize(jump1,grsbts2+1);
ArrayInitialize(jump1,0);
jump1[0]=ObjectGet("SL100",OBJPROP_PRICE1);
jump1[1]=ObjectGet("SL100",3);
for (int miii=0;miii<grsbts2-1;miii++)
{
jump1[miii+2]=ObjectGet("SPLIUP"+IntegerToString(miii),1);
}
break;
}
}
ArraySort(jump1,WHOLE_ARRAY,0,MODE_DESCEND);
ObjectSet("D",1,jump1[1]);grsbts3++;
}
else
{
grsbts3++;
if (grsbts3==grsbts2) {grsbts3=0;}
ObjectSet("D",1,jump1[grsbts3]);
}
}
}
if (sparam=="ON")
{
int xcolor,ycolor;
xcolor=ObjectGetInteger(0,"ON",OBJPROP_XDISTANCE,0);
ycolor=ObjectGetInteger(0,"ON",OBJPROP_YDISTANCE,0);
if (ObjectGet("ON",OBJPROP_BGCOLOR)==clrLime)
{
ObjectSet("ON",OBJPROP_BGCOLOR,clrRed);
ObjectDelete(0,"STATUS");
SetText("STATUS","OFF",xcolor+20,ycolor+5,clrWhite,12,"Georgia");
}
else
{
if (ObjectGet("ON",OBJPROP_BGCOLOR)==clrRed)
{
ObjectSet("ON",OBJPROP_BGCOLOR,clrLime);
ObjectDelete(0,"STATUS");
SetText("STATUS","ON",xcolor+23,ycolor+5,clrRed,12,"Georgia");
}
}
ObjectSet("ON",OBJPROP_SELECTABLE,false);
ObjectSet("STATUS",OBJPROP_SELECTABLE,false);
}
if (sparam=="XABC")
{
XABC();
}
if (sparam=="RESET")
{
reset();
OnInit();
}
if (sparam=="COLOR")
{
int xcolor,ycolor;
xcolor=ObjectGetInteger(0,"COLOR",OBJPROP_XDISTANCE,0);
ycolor=ObjectGetInteger(0,"COLOR",OBJPROP_YDISTANCE,0);
if (ObjectGet("REC1",OBJPROP_COLOR)==clrNONE)
{
triangle1=triangle;
ObjectDelete(0,"txtCOLOR");
SetText("txtCOLOR","COLOUR",xcolor+3,ycolor+5,clrRed,12,"Georgia");
}
else
{
triangle1=clrNONE;
ObjectDelete(0,"txtCOLOR");
SetText("txtCOLOR","NONE",xcolor+13,ycolor+5,clrBlack,12,"Georgia");
}
ObjectSet("txtCOLOR",OBJPROP_SELECTABLE,false);
}
}
if (id==CHARTEVENT_KEYDOWN)
{
kstrok=lparam;kdown=StringToInteger(sparam);
}
if ((id==CHARTEVENT_CLICK)&&(kstrok==77)&&(kdown==16434))
{
{
ObjectSetInteger(0,"SEARCH",OBJPROP_XDISTANCE,lparam);
ObjectSetInteger(0,"SEARCH",OBJPROP_YDISTANCE,dparam);
ObjectSetInteger(0,"Tulis",OBJPROP_XDISTANCE,lparam+4);
ObjectSetInteger(0,"Tulis",OBJPROP_YDISTANCE,dparam+5);
ObjectSetInteger(0,"JUMP",OBJPROP_XDISTANCE,lparam);
ObjectSetInteger(0,"JUMP",OBJPROP_YDISTANCE,dparam+30);
ObjectSetInteger(0,"Tulis1",OBJPROP_XDISTANCE,lparam+15);
ObjectSetInteger(0,"Tulis1",OBJPROP_YDISTANCE,dparam+35);
ObjectSetInteger(0,"ON",OBJPROP_XDISTANCE,lparam);
ObjectSetInteger(0,"ON",OBJPROP_YDISTANCE,dparam+60);
ObjectSetInteger(0,"STATUS",OBJPROP_XDISTANCE,lparam+23);
ObjectSetInteger(0,"STATUS",OBJPROP_YDISTANCE,dparam+65);
ObjectSetInteger(0,"COLOR",OBJPROP_XDISTANCE,lparam);
ObjectSetInteger(0,"COLOR",OBJPROP_YDISTANCE,dparam+90);
if (ObjectGet("txtCOLOR",OBJPROP_COLOR)==clrBlack)
{
ObjectSetInteger(0,"txtCOLOR",OBJPROP_XDISTANCE,lparam+13);
ObjectSetInteger(0,"txtCOLOR",OBJPROP_YDISTANCE,dparam+95);
}
else
{
ObjectSetInteger(0,"txtCOLOR",OBJPROP_XDISTANCE,lparam+3);
ObjectSetInteger(0,"txtCOLOR",OBJPROP_YDISTANCE,dparam+95);
}
ObjectSetInteger(0,"XABC",OBJPROP_XDISTANCE,lparam);
ObjectSetInteger(0,"XABC",OBJPROP_YDISTANCE,dparam+120);
ObjectSetInteger(0,"txtXABC",OBJPROP_XDISTANCE,lparam+15);
ObjectSetInteger(0,"txtXABC",OBJPROP_YDISTANCE,dparam+125);
ObjectSetInteger(0,"RESET",OBJPROP_XDISTANCE,lparam);
ObjectSetInteger(0,"RESET",OBJPROP_YDISTANCE,dparam+150);
ObjectSetInteger(0,"txtRESET",OBJPROP_XDISTANCE,lparam+10);
ObjectSetInteger(0,"txtRESET",OBJPROP_YDISTANCE,dparam+155);
ObjectSetInteger(0,"AUTO",OBJPROP_XDISTANCE,lparam);
ObjectSetInteger(0,"AUTO",OBJPROP_YDISTANCE,dparam+180);
ObjectSetInteger(0,"txtAUTO",OBJPROP_XDISTANCE,lparam+15);
ObjectSetInteger(0,"txtAUTO",OBJPROP_YDISTANCE,dparam+185);
kstrok=0;kdown=0;
}
}
}
void OnTimer()
{
if (ObjectGet("ON",OBJPROP_BGCOLOR)==clrRed) {ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios: Off :(",9,"Arial",White);return;}
// Bikin XABCDE, dan trend linenya
double top=WindowPriceMax();
if(ObjectFind("X")<0)
{
ObjectCreate("X",OBJ_TEXT,0,Time[23],top-0.001);
ObjectSetText("X","X",18,"TimesNewRoman",White);
}
if(ObjectFind("A")<0)
{
ObjectCreate("A",OBJ_TEXT,0,Time[18],top-0.001);
ObjectSetText("A","A",18,"TimesNewRoman",White);
}
if(ObjectFind("B")<0)
{
ObjectCreate("B",OBJ_TEXT,0,Time[13],top-0.001);
ObjectSetText("B","B",18,"TimesNewRoman",White);
}
if(ObjectFind("C")<0)
{
ObjectCreate("C",OBJ_TEXT,0,Time[8],top-0.001);
ObjectSetText("C","C",18,"TimesNewRoman",White);
}
if(ObjectFind("D")<0)
{
ObjectCreate("D",OBJ_TEXT,0,Time[3],top-0.001);
ObjectSetText("D","D",18,"TimesNewRoman",White);
}
if(ObjectFind("E")>=0) {X_tm=Time[0];return;}
else
{
X_tm=Time[0];
for (int jjj=0;jjj<1200;jjj++)
{
if ((iTime(NULL,0,jjj+1)<ObjectGet("D",0)) &&(iTime(NULL,0,jjj)>=ObjectGet("D",0)) && (ObjectGet("D",1)>=iLow(NULL,0,jjj)))
{
D_tm=iTime(NULL,0,jjj);
D_pr=iHigh(NULL,0,jjj);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("D",0))&&(iTime(NULL,0,jjj)>=ObjectGet("D",0)) && (ObjectGet("D",1)<=iHigh(NULL,0,jjj)))
{
D_tm=iTime(NULL,0,jjj);
D_pr=iLow(NULL,0,jjj);
}
if (ObjectGet("D",0)>Time[0])
{
D_tm=ObjectGet("D",0);
D_pr=ObjectGet("D",1);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("C",0))&&(iTime(NULL,0,jjj)>=ObjectGet("C",0)) && (ObjectGet("C",1)<=iHigh(NULL,0,jjj)))
{
C_tm=iTime(NULL,0,jjj);
C_pr=iLow(NULL,0,jjj);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("C",0))&&(iTime(NULL,0,jjj)>=ObjectGet("C",0)) && (ObjectGet("C",1)>=iLow(NULL,0,jjj)))
{
C_tm=iTime(NULL,0,jjj);
C_pr=iHigh(NULL,0,jjj);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("B",0)) && (iTime(NULL,0,jjj)>=ObjectGet("B",0)) &&(ObjectGet("B",1)<=iHigh(NULL,0,jjj)))
{
B_tm=iTime(NULL,0,jjj);
B_pr=iLow(NULL,0,jjj);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("B",0)) && (iTime(NULL,0,jjj)>=ObjectGet("B",0)) &&(ObjectGet("B",1)>=iLow(NULL,0,jjj)))
{
B_tm=iTime(NULL,0,jjj);
B_pr=iHigh(NULL,0,jjj);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("A",0)) && (iTime(NULL,0,jjj)>=ObjectGet("A",0)) &&(ObjectGet("A",1)<=iHigh(NULL,0,jjj)))
{
A_tm=iTime(NULL,0,jjj);
A_pr=iLow(NULL,0,jjj);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("A",0)) && (iTime(NULL,0,jjj)>=ObjectGet("A",0)) &&(ObjectGet("A",1)>=iLow(NULL,0,jjj)))
{
A_tm=iTime(NULL,0,jjj);
A_pr=iHigh(NULL,0,jjj);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("X",0)) && (iTime(NULL,0,jjj)>=ObjectGet("X",0)) && (ObjectGet("X",1)<=iHigh(NULL,0,jjj)))
{
X_tm=iTime(NULL,0,jjj);
X_pr=iLow(NULL,0,jjj);
}
if ((iTime(NULL,0,jjj+1)<ObjectGet("X",0)) && (iTime(NULL,0,jjj)>=ObjectGet("X",0)) && (ObjectGet("X",1)>=iLow(NULL,0,jjj)))
{
X_tm=iTime(NULL,0,jjj);
X_pr=iHigh(NULL,0,jjj);
}
if (X_tm!=Time[0])
{
break;
}
}
if(ObjectFind("XA_0")<0)
{
ObjectCreate("XA_0",OBJ_TREND,0,X_tm,X_pr,A_tm,A_pr);
ObjectSet("XA_0",OBJPROP_RAY,0);
}
else
{
ObjectSet("XA_0",0,X_tm);
ObjectSet("XA_0",1,X_pr);
ObjectSet("XA_0",2,A_tm);
ObjectSet("XA_0",3,A_pr);
}
if(ObjectFind("AB_0")<0)
{
ObjectCreate("AB_0",OBJ_TREND,0,A_tm,A_pr,B_tm,B_pr);
ObjectSet("AB_0",OBJPROP_RAY,0);
}
else
{
ObjectSet("AB_0",0,A_tm);
ObjectSet("AB_0",1,A_pr);
ObjectSet("AB_0",2,B_tm);
ObjectSet("AB_0",3,B_pr);
}
if(ObjectFind("BC_0")<0)
{
ObjectCreate("BC_0",OBJ_TREND,0,B_tm,B_pr,C_tm,C_pr);
ObjectSet("BC_0",OBJPROP_RAY,0);
}
else
{
ObjectSet("BC_0",0,B_tm);
ObjectSet("BC_0",1,B_pr);
ObjectSet("BC_0",2,C_tm);
ObjectSet("BC_0",3,C_pr);
}
if(ObjectFind("CD_0")<0)
{
ObjectCreate("CD_0",OBJ_TREND,0,C_tm,C_pr,D_tm,D_pr);
ObjectSet("CD_0",OBJPROP_RAY,0);
}
else
{
ObjectSet("CD_0",0,C_tm);
ObjectSet("CD_0",1,C_pr);
ObjectSet("CD_0",2,D_tm);
ObjectSet("CD_0",3,D_pr);
}
} // end else
LlXA = MathAbs(X_pr-A_pr);
LlAB = MathAbs(A_pr-B_pr);
LlBC = MathAbs(B_pr-C_pr);
LlCD = MathAbs(C_pr-D_pr);
LlXB = MathAbs(X_pr-B_pr);
LlAC = MathAbs(A_pr-C_pr);
LlXD = MathAbs(X_pr-D_pr);
LlBD = MathAbs(B_pr-D_pr);
// End bikin XABCDE
//Harmonik_Ratios
//+------------------------------------------------------------------+
//| Harmonic Ratios.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
//#property copyright "all traders"
//#property link "www.forexfactory.com"
//#define OBJNAME_LABEL "Harmonic Ratios :)"
//#property indicator_chart_window
//extern bool Active = True;
//extern int Harmonic_Pattern_No= 0;
//int init() {
// createIndicatorLabel(OBJNAME_LABEL);
// return(0);
//}
//int deinit() {
// ObjectDelete(OBJNAME_LABEL);
// return(0);
//}
//+------------------------------------------------------------------+
//|start function |
//+------------------------------------------------------------------+
//bool Active = True; Active=true;
//int Harmonic_Pattern_No= 0;
//int start()
// {
//Check if indicator is active
if (Active==false)
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios: Off :(",9,"Arial",White);
return;
}
else
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios: On :)",9,"Arial",White);
//Check if input is valid
if (Harmonic_Pattern_No<0)
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: Invalid Harmonic Pattern No.!",9,"Arial",White);
return;
}
//----
//Check if segments exist with Harmonic Pattern No.
bool bXA=False,bAB=False,bBC=False,bCD=False;
string sXA,sAB,sBC,sCD,sDX,sAC,sBD,sXB;
// Iterate over objects on this chart
for (int i=ObjectsTotal()-1;i>=0;i--)
{
string sObjName = ObjectName(i);
if (sObjName==StringConcatenate("XA_",Harmonic_Pattern_No) && ObjectType(sObjName)==OBJ_TREND)
{
bXA=True;
sXA=sObjName;
}
else if (sObjName==StringConcatenate("AB_",Harmonic_Pattern_No) && ObjectType(sObjName)==OBJ_TREND)
{
bAB=True;
sAB=sObjName;
}
else if (sObjName==StringConcatenate("BC_",Harmonic_Pattern_No) && ObjectType(sObjName)==OBJ_TREND)
{
bBC=True;
sBC=sObjName;
}
else if (sObjName==StringConcatenate("CD_",Harmonic_Pattern_No) && ObjectType(sObjName)==OBJ_TREND)
{
bCD=True;
sCD=sObjName;
}
else if (bXA==True && bAB==True && bBC==True && bCD==True)
break;
}
if(bXA==False || bAB==False || bBC==False || bCD==False)
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: Pattern with specified No. not found!",9,"Arial",White);
return;
}
//Check if segments are properly connected
double lXA,lAB,lBC,lCD,lXB,lAC,lXD,lBD;
lXA = MathAbs(ObjectGet(sXA,OBJPROP_PRICE2)-ObjectGet(sXA,OBJPROP_PRICE1));
lAB = MathAbs(ObjectGet(sAB,OBJPROP_PRICE2)-ObjectGet(sAB,OBJPROP_PRICE1));
lBC = MathAbs(ObjectGet(sBC,OBJPROP_PRICE2)-ObjectGet(sBC,OBJPROP_PRICE1));
lCD = MathAbs(ObjectGet(sCD,OBJPROP_PRICE2)-ObjectGet(sCD,OBJPROP_PRICE1));
lXB = MathAbs(ObjectGet(sXA,OBJPROP_PRICE1)-ObjectGet(sAB,OBJPROP_PRICE2));
lAC = MathAbs(ObjectGet(sXA,OBJPROP_PRICE2)-ObjectGet(sCD,OBJPROP_PRICE1));
lXD = MathAbs(ObjectGet(sXA,OBJPROP_PRICE1)-ObjectGet(sCD,OBJPROP_PRICE2));
lBD = MathAbs(ObjectGet(sBC,OBJPROP_PRICE1)-ObjectGet(sCD,OBJPROP_PRICE2));
if(ObjectGet(sXA,OBJPROP_PRICE2)!=ObjectGet(sAB,OBJPROP_PRICE1) || ObjectGet(sXA,OBJPROP_TIME2)!=ObjectGet(sAB,OBJPROP_TIME1))
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: XA is not properly connected to AB!",9,"Arial",White);
return;
}
else if(ObjectGet(sAB,OBJPROP_PRICE2)!=ObjectGet(sBC,OBJPROP_PRICE1) || ObjectGet(sAB,OBJPROP_TIME2)!=ObjectGet(sBC,OBJPROP_TIME1))
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: AB is not properly connected to BC!",9,"Arial",White);
return;
}
else if(ObjectGet(sBC,OBJPROP_PRICE2)!=ObjectGet(sCD,OBJPROP_PRICE1) || ObjectGet(sBC,OBJPROP_TIME2)!=ObjectGet(sCD,OBJPROP_TIME1))
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: BC is not properly connected to CD!",9,"Arial",White);
return;
}
else if(ObjectGet(sXA,OBJPROP_TIME2)<ObjectGet(sXA,OBJPROP_TIME1))
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: Vertex A must be to the right of X",9,"Arial",White);
return;
}
else if(ObjectGet(sAB,OBJPROP_TIME2)<ObjectGet(sAB,OBJPROP_TIME1))
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: Vertex B must be to the right of A",9,"Arial",White);
return;
}
else if(ObjectGet(sBC,OBJPROP_TIME2)<ObjectGet(sBC,OBJPROP_TIME1))
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: Vertex C must be to the right of B",9,"Arial",White);
return;
}
else if(ObjectGet(sCD,OBJPROP_TIME2)<ObjectGet(sCD,OBJPROP_TIME1))
{
ObjectSetText(OBJNAME_LABEL,"Harmonic Ratios- Error: Vertex D must be to the right of C",9,"Arial",White);
return;
}
//Label the pattern with letter XABCD
bool bVX=false,bVA=false,bVB=false,bVC=false,bVD=false;
//Only update label positions if already exist
for (int j=ObjectsTotal()-1;j>=0;j--)
{
if (ObjectName(j)==StringConcatenate("X_",Harmonic_Pattern_No) && ObjectType(ObjectName(j))==OBJ_TEXT)
{
ObjectSet(ObjectName(j), OBJPROP_TIME1, ObjectGet(sXA,OBJPROP_TIME1));
ObjectSet(ObjectName(j), OBJPROP_PRICE1, ObjectGet(sXA,OBJPROP_PRICE1));
bVX=true;
}
else if (ObjectName(j)==StringConcatenate("A_",Harmonic_Pattern_No) && ObjectType(ObjectName(j))==OBJ_TEXT)
{
ObjectSet(ObjectName(j), OBJPROP_TIME1, ObjectGet(sAB,OBJPROP_TIME1));
ObjectSet(ObjectName(j), OBJPROP_PRICE1, ObjectGet(sAB,OBJPROP_PRICE1));
bVA=true;
}
else if (ObjectName(j)==StringConcatenate("B_",Harmonic_Pattern_No) && ObjectType(ObjectName(j))==OBJ_TEXT)
{
ObjectSet(ObjectName(j), OBJPROP_TIME1, ObjectGet(sBC,OBJPROP_TIME1));
ObjectSet(ObjectName(j), OBJPROP_PRICE1, ObjectGet(sBC,OBJPROP_PRICE1));
bVB=true;
}
else if (ObjectName(j)==StringConcatenate("C_",Harmonic_Pattern_No) && ObjectType(ObjectName(j))==OBJ_TEXT)
{
ObjectSet(ObjectName(j), OBJPROP_TIME1, ObjectGet(sCD,OBJPROP_TIME1));
ObjectSet(ObjectName(j), OBJPROP_PRICE1, ObjectGet(sCD,OBJPROP_PRICE1));
bVC=true;
}
else if (ObjectName(j)==StringConcatenate("D_",Harmonic_Pattern_No) && ObjectType(ObjectName(j))==OBJ_TEXT)
{
ObjectSet(ObjectName(j), OBJPROP_TIME1, ObjectGet(sCD,OBJPROP_TIME2));
ObjectSet(ObjectName(j), OBJPROP_PRICE1, ObjectGet(sCD,OBJPROP_PRICE2));
bVD=true;
}
else if(bVX==true && bVA==true && bVB==true && bVC==true && bVD==true)
break;
}
//Create vertex labels if not already exist
if (bVX==false)
{
ObjectCreate(StringConcatenate("X_",Harmonic_Pattern_No), OBJ_TEXT, 0, ObjectGet(sXA,OBJPROP_TIME1), ObjectGet(sXA,OBJPROP_PRICE1));
ObjectSetText(StringConcatenate("X_",Harmonic_Pattern_No), StringConcatenate("X_",Harmonic_Pattern_No), 10, "Times New Roman", White);
}
if (bVA==false)
{
ObjectCreate(StringConcatenate("A_",Harmonic_Pattern_No), OBJ_TEXT, 0, ObjectGet(sAB,OBJPROP_TIME1), ObjectGet(sAB,OBJPROP_PRICE1));
ObjectSetText(StringConcatenate("A_",Harmonic_Pattern_No), StringConcatenate("A_",Harmonic_Pattern_No), 10, "Times New Roman", White);
}
if (bVB==false)
{
ObjectCreate(StringConcatenate("B_",Harmonic_Pattern_No), OBJ_TEXT, 0, ObjectGet(sBC,OBJPROP_TIME1), ObjectGet(sBC,OBJPROP_PRICE1));
ObjectSetText(StringConcatenate("B_",Harmonic_Pattern_No), StringConcatenate("B_",Harmonic_Pattern_No), 10, "Times New Roman", White);
}
if (bVC==false)
{
ObjectCreate(StringConcatenate("C_",Harmonic_Pattern_No), OBJ_TEXT, 0, ObjectGet(sCD,OBJPROP_TIME1), ObjectGet(sCD,OBJPROP_PRICE1));
ObjectSetText(StringConcatenate("C_",Harmonic_Pattern_No), StringConcatenate("C_",Harmonic_Pattern_No), 10, "Times New Roman", White);
}
if (bVD==false)
{
ObjectCreate(StringConcatenate("D_",Harmonic_Pattern_No), OBJ_TEXT, 0, ObjectGet(sCD,OBJPROP_TIME2), ObjectGet(sCD,OBJPROP_PRICE2));
ObjectSetText(StringConcatenate("D_",Harmonic_Pattern_No), StringConcatenate("D_",Harmonic_Pattern_No), 10, "Times New Roman", White);
}
//draw dotted lines DX and AC and BD and XB
bool bDX=false,bAC=false,bBD=false,bXB=false;
//Only update dotted lines if already exist
for (int k=ObjectsTotal()-1;k>=0;k--)
{
if (ObjectName(k)==StringConcatenate("DX_",Harmonic_Pattern_No) && ObjectType(ObjectName(k))==OBJ_TREND)
{
ObjectSet(ObjectName(k), OBJPROP_TIME1, ObjectGet(sCD,OBJPROP_TIME2));
ObjectSet(ObjectName(k), OBJPROP_PRICE1, ObjectGet(sCD,OBJPROP_PRICE2));
ObjectSet(ObjectName(k), OBJPROP_TIME2, ObjectGet(sXA,OBJPROP_TIME1));
ObjectSet(ObjectName(k), OBJPROP_PRICE2, ObjectGet(sXA,OBJPROP_PRICE1));
sDX = StringConcatenate("DX_",Harmonic_Pattern_No);
bDX=true;
}
else if (ObjectName(k)==StringConcatenate("AC_",Harmonic_Pattern_No) && ObjectType(ObjectName(k))==OBJ_TREND)
{
ObjectSet(ObjectName(k), OBJPROP_TIME1, ObjectGet(sAB,OBJPROP_TIME1));
ObjectSet(ObjectName(k), OBJPROP_PRICE1, ObjectGet(sAB,OBJPROP_PRICE1));
ObjectSet(ObjectName(k), OBJPROP_TIME2, ObjectGet(sBC,OBJPROP_TIME2));
ObjectSet(ObjectName(k), OBJPROP_PRICE2, ObjectGet(sBC,OBJPROP_PRICE2));
sAC = StringConcatenate("AC_",Harmonic_Pattern_No);
bAC=true;
}
else if (ObjectName(k)==StringConcatenate("BD_",Harmonic_Pattern_No) && ObjectType(ObjectName(k))==OBJ_TREND)
{
ObjectSet(ObjectName(k), OBJPROP_TIME1, ObjectGet(sBC,OBJPROP_TIME1));
ObjectSet(ObjectName(k), OBJPROP_PRICE1, ObjectGet(sBC,OBJPROP_PRICE1));
ObjectSet(ObjectName(k), OBJPROP_TIME2, ObjectGet(sCD,OBJPROP_TIME2));
ObjectSet(ObjectName(k), OBJPROP_PRICE2, ObjectGet(sCD,OBJPROP_PRICE2));
sBD = StringConcatenate("BD_",Harmonic_Pattern_No);
bBD=true;
}
if (ObjectName(k)==StringConcatenate("XB_",Harmonic_Pattern_No) && ObjectType(ObjectName(k))==OBJ_TREND)
{
ObjectSet(ObjectName(k), OBJPROP_TIME1, ObjectGet(sXA,OBJPROP_TIME1));
ObjectSet(ObjectName(k), OBJPROP_PRICE1, ObjectGet(sXA,OBJPROP_PRICE1));
ObjectSet(ObjectName(k), OBJPROP_TIME2, ObjectGet(sAB,OBJPROP_TIME2));
ObjectSet(ObjectName(k), OBJPROP_PRICE2, ObjectGet(sAB,OBJPROP_PRICE2));
sXB = StringConcatenate("XB_",Harmonic_Pattern_No);
bXB=true;
}
else if(bDX==true && bAC==true && bBD==true && bXB==true)
break;
}
//Create dotted lines if not already exist
if (bDX==false)
{
ObjectCreate(StringConcatenate("DX_",Harmonic_Pattern_No), OBJ_TREND, 0, ObjectGet(sCD,OBJPROP_TIME2), ObjectGet(sCD,OBJPROP_PRICE2), ObjectGet(sXA,OBJPROP_TIME1), ObjectGet(sXA,OBJPROP_PRICE1));
ObjectSet(StringConcatenate("DX_",Harmonic_Pattern_No), OBJPROP_STYLE, STYLE_DASH);
ObjectSet(StringConcatenate("DX_",Harmonic_Pattern_No), OBJPROP_RAY, FALSE);
ObjectSet(StringConcatenate("DX_",Harmonic_Pattern_No), OBJPROP_COLOR, C'128,128,128');
sDX = StringConcatenate("DX_",Harmonic_Pattern_No);
}
if (bAC==false)
{
ObjectCreate(StringConcatenate("AC_",Harmonic_Pattern_No), OBJ_TREND, 0, ObjectGet(sAB,OBJPROP_TIME1), ObjectGet(sAB,OBJPROP_PRICE1), ObjectGet(sBC,OBJPROP_TIME2), ObjectGet(sBC,OBJPROP_PRICE2));
ObjectSet(StringConcatenate("AC_",Harmonic_Pattern_No), OBJPROP_STYLE, STYLE_DASH);
ObjectSet(StringConcatenate("AC_",Harmonic_Pattern_No), OBJPROP_RAY, FALSE);
ObjectSet(StringConcatenate("AC_",Harmonic_Pattern_No), OBJPROP_COLOR, C'128,128,128');
sAC = StringConcatenate("AC_",Harmonic_Pattern_No);
}
if (bBD==false)
{
ObjectCreate(StringConcatenate("BD_",Harmonic_Pattern_No), OBJ_TREND, 0, ObjectGet(sBC,OBJPROP_TIME1), ObjectGet(sBC,OBJPROP_PRICE1), ObjectGet(sCD,OBJPROP_TIME2), ObjectGet(sCD,OBJPROP_PRICE2));
ObjectSet(StringConcatenate("BD_",Harmonic_Pattern_No), OBJPROP_STYLE, STYLE_DASH);
ObjectSet(StringConcatenate("BD_",Harmonic_Pattern_No), OBJPROP_RAY, FALSE);
ObjectSet(StringConcatenate("BD_",Harmonic_Pattern_No), OBJPROP_COLOR, C'128,128,128');
sBD = StringConcatenate("BD_",Harmonic_Pattern_No);
}
if (bXB==false)
{
ObjectCreate(StringConcatenate("XB_",Harmonic_Pattern_No), OBJ_TREND, 0, ObjectGet(sXA,OBJPROP_TIME1), ObjectGet(sXA,OBJPROP_PRICE1), ObjectGet(sAB,OBJPROP_TIME2), ObjectGet(sAB,OBJPROP_PRICE2));
ObjectSet(StringConcatenate("XB_",Harmonic_Pattern_No), OBJPROP_STYLE, STYLE_DASH);
ObjectSet(StringConcatenate("XB_",Harmonic_Pattern_No), OBJPROP_RAY, FALSE);
ObjectSet(StringConcatenate("XB_",Harmonic_Pattern_No), OBJPROP_COLOR, C'128,128,128');
sXB = StringConcatenate("XB_",Harmonic_Pattern_No);
}
//Calculate and label fibo ratios
double rABXA,rBCAB,rCDBC,rCDXA;
//double lXA,lAB,lBC,lCD,lXB,lAC,lXD,lBD;
if ((lXA==0)||(lAB==0)||(lBC==0)) {return;}
rABXA = lAB/lXA;
rBCAB = lBC/lAB;
rCDBC = lCD/lBC;
if (((ObjectGet("D_0",1)>=ObjectGet("B_0",1)) && (ObjectGet("D_0",1)>=ObjectGet("A_0",1))) ||
((ObjectGet("D_0",1)<=ObjectGet("B_0",1)) && (ObjectGet("D_0",1)<=ObjectGet("A_0",1))))
{rCDXA = (lAB+lBD)/lXA;} else {rCDXA = (lAB-lBD)/lXA;}
bool bABXA=false,bBCAB=false,bCDBC=false,bCDXA=false;
//Only update label positions if already exist
for (int l=ObjectsTotal()-1;l>=0;l--)
{
if (ObjectName(l)==StringConcatenate("rABXA_",Harmonic_Pattern_No) && ObjectType(ObjectName(l))==OBJ_TEXT)
{
ObjectSet(ObjectName(l), OBJPROP_TIME1, ((ObjectGet(sXA,OBJPROP_TIME1)+ObjectGet(sAB,OBJPROP_TIME2))/2));
ObjectSet(ObjectName(l), OBJPROP_PRICE1, ((ObjectGet(sXA,OBJPROP_PRICE1)+ObjectGet(sAB,OBJPROP_PRICE2))/2));
ObjectSetText(ObjectName(l), DoubleToStr(rABXA,3), 10, "Times New Roman", White);
bABXA=true;
}
else if (ObjectName(l)==StringConcatenate("rBCAB_",Harmonic_Pattern_No) && ObjectType(ObjectName(l))==OBJ_TEXT)
{
ObjectSet(ObjectName(l), OBJPROP_TIME1, (ObjectGet(sAC,OBJPROP_TIME1)+ObjectGet(sAC,OBJPROP_TIME2))/2);
ObjectSet(ObjectName(l), OBJPROP_PRICE1, (ObjectGet(sAC,OBJPROP_PRICE1)+ObjectGet(sAC,OBJPROP_PRICE2))/2);
ObjectSetText(ObjectName(l), DoubleToStr(rBCAB,3), 10, "Times New Roman", White);
bBCAB=true;
}
else if (ObjectName(l)==StringConcatenate("rCDBC_",Harmonic_Pattern_No) && ObjectType(ObjectName(l))==OBJ_TEXT)
{
ObjectSet(ObjectName(l), OBJPROP_TIME1, (ObjectGet(sBD,OBJPROP_TIME1)+ObjectGet(sBD,OBJPROP_TIME2))/2);
ObjectSet(ObjectName(l), OBJPROP_PRICE1, (ObjectGet(sBD,OBJPROP_PRICE1)+ObjectGet(sBD,OBJPROP_PRICE2))/2);
ObjectSetText(ObjectName(l), DoubleToStr(rCDBC,3), 10, "Times New Roman", White);
bCDBC=true;
}
else if (ObjectName(l)==StringConcatenate("rCDXA_",Harmonic_Pattern_No) && ObjectType(ObjectName(l))==OBJ_TEXT)
{
ObjectSet(ObjectName(l), OBJPROP_TIME1, (ObjectGet(sXA,OBJPROP_TIME1)+ObjectGet(sCD,OBJPROP_TIME2))/2);
ObjectSet(ObjectName(l), OBJPROP_PRICE1, (ObjectGet(sXA,OBJPROP_PRICE1)+ObjectGet(sCD,OBJPROP_PRICE2))/2);
ObjectSetText(ObjectName(l), DoubleToStr(rCDXA,3), 10, "Times New Roman", White);
bCDXA=true;
}
else if(bABXA==true && bBCAB==true && bCDBC==true && bCDXA==true)
break;
}
//Create ratio labels if not already exist Perhitungan disini
if (bABXA==false)
{
ObjectCreate(StringConcatenate("rABXA_",Harmonic_Pattern_No), OBJ_TEXT, 0, (ObjectGet(sXA,OBJPROP_TIME1)+ObjectGet(sAB,OBJPROP_TIME2))/2, (ObjectGet(sXA,OBJPROP_PRICE1)+ObjectGet(sAB,OBJPROP_PRICE2))/2);
ObjectSetText(StringConcatenate("rABXA_",Harmonic_Pattern_No), DoubleToStr(rABXA,3), 10, "Times New Roman", White);
}
if (bBCAB==false)
{
ObjectCreate(StringConcatenate("rBCAB_",Harmonic_Pattern_No), OBJ_TEXT, 0, (ObjectGet(sAC,OBJPROP_TIME1)+ObjectGet(sAC,OBJPROP_TIME2))/2, (ObjectGet(sAC,OBJPROP_PRICE1)+ObjectGet(sAC,OBJPROP_PRICE2))/2);
ObjectSetText(StringConcatenate("rBCAB_",Harmonic_Pattern_No), DoubleToStr(rBCAB,3), 10, "Times New Roman", White);
}
if (bCDBC==false)
{
ObjectCreate(StringConcatenate("rCDBC_",Harmonic_Pattern_No), OBJ_TEXT, 0, (ObjectGet(sBD,OBJPROP_TIME1)+ObjectGet(sBD,OBJPROP_TIME2))/2, (ObjectGet(sBD,OBJPROP_PRICE1)+ObjectGet(sBD,OBJPROP_PRICE2))/2);
ObjectSetText(StringConcatenate("rCDBC_",Harmonic_Pattern_No), DoubleToStr(rCDBC,3), 10, "Times New Roman", White);
}
if (bCDXA==false)
{
ObjectCreate(StringConcatenate("rCDXA_",Harmonic_Pattern_No), OBJ_TEXT, 0, (ObjectGet(sXA,OBJPROP_TIME1)+ObjectGet(sCD,OBJPROP_TIME2))/2, (ObjectGet(sXA,OBJPROP_PRICE1)+ObjectGet(sCD,OBJPROP_PRICE2))/2);
ObjectSetText(StringConcatenate("rCDXA_",Harmonic_Pattern_No), DoubleToStr(rCDXA,3), 10, "Times New Roman", White);
}
//----
// return(0);
// }
//+------------------------------------------------------------------+
/*
void createIndicatorLabel(string sObjName) {
string sObjText;
// Set the text
if(Active==True)
sObjText = "Harmonic Ratios: On";
else
sObjText = "Harmonic Ratios: Off";
// Create and position the label
ObjectCreate(sObjName,OBJ_LABEL,0,0,0);
ObjectSetText(sObjName,sObjText,8,"Arial", White);
ObjectSet(sObjName,OBJPROP_XDISTANCE,5);
ObjectSet(sObjName,OBJPROP_YDISTANCE,5);
ObjectSet(sObjName,OBJPROP_CORNER,1);
}
*/
//End Harmonik_Ratios
ObjectSet("XA_0",OBJPROP_SELECTABLE,false);
ObjectSet("AB_0",OBJPROP_SELECTABLE,false);
ObjectSet("BC_0",OBJPROP_SELECTABLE,false);
ObjectSet("CD_0",OBJPROP_SELECTABLE,false);
ObjectSet("X_0",OBJPROP_SELECTABLE,false);
ObjectSet("A_0",OBJPROP_SELECTABLE,false);
ObjectSet("B_0",OBJPROP_SELECTABLE,false);
ObjectSet("C_0",OBJPROP_SELECTABLE,false);
ObjectSet("D_0",OBJPROP_SELECTABLE,false);
ObjectSet("DX_0",OBJPROP_SELECTABLE,false);
ObjectSet("AC_0",OBJPROP_SELECTABLE,false);
ObjectSet("BD_0",OBJPROP_SELECTABLE,false);
ObjectSet("XB_0",OBJPROP_SELECTABLE,false);
ObjectSet("rABXA_0",OBJPROP_SELECTABLE,false);
ObjectSet("rBCAB_0",OBJPROP_SELECTABLE,false);
ObjectSet("rCDBC_0",OBJPROP_SELECTABLE,false);
ObjectSet("rCDXA_0",OBJPROP_SELECTABLE,false);
ObjectSet("SEARCH",OBJPROP_SELECTABLE,false);
ObjectSet("REC1",OBJPROP_SELECTABLE,false);
ObjectSet("REC2",OBJPROP_SELECTABLE,false);
// double rABXA,rBCAB,rCDBC,rCDXA;
rABXA=0.0;rBCAB=0.0;rCDBC=0.0;rCDXA=0.0;
if (ObjectFind(0,"rABXA_0")>=0)
{
rABXA=StringToDouble(ObjectGetString(0,"rABXA_0",OBJPROP_TEXT,0));
}
if (ObjectFind(0,"rBCAB_0")>=0)
{
rBCAB=StringToDouble(ObjectGetString(0,"rBCAB_0",OBJPROP_TEXT,0));
}
if (ObjectFind(0,"rCDBC_0")>=0)
{
rCDBC=StringToDouble(ObjectGetString(0,"rCDBC_0",OBJPROP_TEXT,0));
}
if (ObjectFind(0,"rCDXA_0")>=0)
{
rCDXA=StringToDouble(ObjectGetString(0,"rCDXA_0",OBJPROP_TEXT,0));
}
// end ambil harga fibo
// Cek pola
//Hitung
if (ObjectGet("B",1)>ObjectGet("C",1))
{
ArrayInitialize(cari1,3.0);
ArrayInitialize(cari2,3.0);
ArrayInitialize(cari3,3.0);
ArrayInitialize(cari4,3.0);
}
if (ObjectGet("B",1)<ObjectGet("C",1))
{
ArrayInitialize(cari1,0.0);
ArrayInitialize(cari2,0.0);
ArrayInitialize(cari3,0.0);
ArrayInitialize(cari4,0.0);
}
bool ketemu; ketemu=false;
for (int jkk=1;jkk<DatabaseRecord;jkk++)
{
bacadata(jkk);
string sep=","; // A separator as a character
ushort u_sep; // The code of the separator character
string result[]; // An array to get strings
//--- Get the separator code
u_sep=StringGetCharacter(sep,0);
//--- Split the string to substrings
int kjk=StringSplit(hasil,u_sep,result);
string nama,minXB_,maxXB_,minAC_,maxAC_,minBD_,maxBD_,minXD_,maxXD_;
double makBD,makXD,hasmakD1,hasmakD,hasmakD2;
hasmakD=0.0;hasmakD1=0.0;hasmakD2=0.0;
double mikBD,mikXD,hasmikD1,hasmikD,hasmikD2;
hasmikD=0.0;hasmikD1=0.0;hasmikD2=0.0;
nama=result[0];
minXB_=result[1];
maxXB_=result[2];
minAC_=result[3];
maxAC_=result[4];
minBD_=result[5];
maxBD_=result[6];
minXD_=result[7];
maxXD_=result[8];
makBD=StringToDouble(maxBD_);
makXD=StringToDouble(maxXD_);
mikBD=StringToDouble(minBD_);
mikXD=StringToDouble(minXD_);
if (ObjectGet("SEARCH",OBJPROP_BGCOLOR)==clrLime)
{
if ((rABXA>=StringToDouble(minXB_)) && (rABXA<=StringToDouble(maxXB_)) &&
(rBCAB>=StringToDouble(minAC_)) && (rBCAB<=StringToDouble(maxAC_)))
{
//min D1,min D2,max d1, maxd2, bool cek
if (ObjectGet("B",1)>ObjectGet("C",1))
{
hasmikD1=(mikBD*LlBC)+ObjectGet("C_0",OBJPROP_PRICE1);
hasmikD2=(mikXD*LlXA)+ObjectGet("A_0",OBJPROP_PRICE1);
hasmakD1=(makBD*LlBC)+ObjectGet("C_0",OBJPROP_PRICE1);
hasmakD2=(makXD*LlXA)+ObjectGet("A_0",OBJPROP_PRICE1);
if (hasmakD2<hasmikD2) {hasmakD2=hasmikD2;hasmikD2=(makXD*LlXA)+ObjectGet("A_0",OBJPROP_PRICE1); }
if (hasmakD1<hasmikD1) {hasmakD1=hasmikD1;hasmikD1=(makBD*LlBC)+ObjectGet("C_0",OBJPROP_PRICE1);}
if ((hasmikD1>=hasmikD2)&&(hasmikD1<=hasmakD2)) {cari1[jkk]=hasmikD1;}
if ((hasmikD2>=hasmikD1)&&(hasmikD2<=hasmakD1)) {cari2[jkk]=hasmikD2;}
if ((hasmakD1<=hasmakD2)&&(hasmakD1>=hasmikD2)) {cari3[jkk]=hasmakD1;}
if ((hasmakD2<=hasmakD1)&&(hasmakD2>=hasmikD1)) {cari4[jkk]=hasmakD2;}
}
if (ObjectGet("B",1)<ObjectGet("C",1))
{
hasmikD1=ObjectGet("C_0",OBJPROP_PRICE1)-(mikBD*LlBC);
hasmikD2=ObjectGet("A_0",OBJPROP_PRICE1)-(mikXD*LlXA);
hasmakD1=ObjectGet("C_0",OBJPROP_PRICE1)-(makBD*LlBC);
hasmakD2=ObjectGet("A_0",OBJPROP_PRICE1)-(makXD*LlXA);
if (hasmakD2>hasmikD2) {hasmakD2=hasmikD2;hasmikD2=ObjectGet("A_0",OBJPROP_PRICE1)-(makXD*LlXA);}
if (hasmakD1>hasmikD1) {hasmakD1=hasmikD1;hasmikD1=ObjectGet("C_0",OBJPROP_PRICE1)-(makBD*LlBC);}
if ((hasmikD1>=hasmakD2)&&(hasmikD1<=hasmikD2)) {cari1[jkk]=hasmikD1;}
if ((hasmikD2>=hasmakD1)&&(hasmikD2<=hasmikD1)) {cari2[jkk]=hasmikD2;}
if ((hasmakD1>=hasmakD2)&&(hasmakD1<=hasmikD2)) {cari3[jkk]=hasmakD1;}
if ((hasmakD2>=hasmakD1)&&(hasmakD2<=hasmikD1)) {cari4[jkk]=hasmakD2;}
}
}
}
if ((rABXA>=StringToDouble(minXB_)) && (rABXA<=StringToDouble(maxXB_)) &&
(rBCAB>=StringToDouble(minAC_)) && (rBCAB<=StringToDouble(maxAC_)) &&
(rCDBC>=StringToDouble(minBD_)) && (rCDBC<=StringToDouble(maxBD_)) &&
(rCDXA>=StringToDouble(minXD_)) && (rCDXA<=StringToDouble(maxXD_)))
{
ObjectDelete("nama");
SetText("nama",nama,25,10,clrRed,24);
ketemu=true;
}
wrgval=jkk;
if (StringFind(hasil,"END",0)>0){break;}
}
if (ketemu==true)
{
ObjectDelete(0,"REC1");
ObjectDelete(0,"REC2");
ObjectCreate(0,"REC1",OBJ_TRIANGLE,0,ObjectGetInteger(0,"X_0",OBJPROP_TIME,0),ObjectGet("X_0",1),ObjectGetInteger(0,"A_0",OBJPROP_TIME,0),ObjectGet("A_0",1),ObjectGet("B_0",0),ObjectGet("B_0",1));
ObjectCreate(0,"REC2",OBJ_TRIANGLE,0,ObjectGetInteger(0,"B_0",OBJPROP_TIME,0),ObjectGet("B_0",1),ObjectGetInteger(0,"C_0",OBJPROP_TIME,0),ObjectGet("C_0",1),ObjectGet("D_0",0),ObjectGet("D_0",1));
ObjectSet("REC1",OBJPROP_COLOR,triangle1);
ObjectSet("REC2",OBJPROP_COLOR,triangle1);
}
else
{
ObjectDelete(0,"REC1");
ObjectDelete(0,"REC2");
double ab_cd;
ab_cd=lCD/lAB;
ObjectDelete("nama");
SetText("nama",DoubleToString(ab_cd,3)+" AB=CD",25,10,clrRed,24);
}
double XABCD[4],fibretr; ArrayFill(XABCD,0,4,0.0);fibretr=0;
int max,min;
XABCD[0]=X_pr;XABCD[1]=A_pr;XABCD[2]=B_pr;XABCD[3]=C_pr;
max=ArrayMaximum(XABCD);
min=ArrayMinimum(XABCD);
if ((XABCD[max]-XABCD[min])!=0) {fibretr=(D_pr-XABCD[min])/(XABCD[max]-XABCD[min]);}
ObjectDelete("Fib");
SetText("Fib","Fibo Retrace = "+DoubleToString(fibretr,3),25,50,clrRed,18);
ObjectDelete("Day");
SetText("Day","Daily Range = "+DoubleToString((iHigh(NULL,1440,0)-iLow(NULL,1440,0))*10000,2),25,75,clrRed,18);
ObjectSet("Fib",OBJPROP_SELECTABLE,false);
ObjectSet("Day",OBJPROP_SELECTABLE,false);
ObjectSet("nama",OBJPROP_SELECTABLE,false);
// end cek pola
//---- Cari Otomatis
//turun
if ((ObjectGet("SEARCH",OBJPROP_BGCOLOR)==clrLime)&&(ObjectGet("D",0)>Time[0])&&(ObjectGet("B",1)<=ObjectGet("C",1)))
{
grsbts=0;grsbts1=0;ArrayInitialize(jump,0);Ob_Del_Dn();
for (int jkk=1;jkk<wrgval;jkk++)
{
if ((cari1[jkk]==0)&&(cari2[jkk]==0)&&(cari3[jkk]==0)&&(cari4[jkk]==0)) continue;
if ((cari1[jkk]==0)&&(cari2[jkk]==0)) continue;
if ((cari3[jkk]==0)&&(cari4[jkk]==0)) continue;
if (cari1[jkk]>=cari2[jkk])
{
if (cari3[jkk]>=cari4[jkk])
{
//bikin rect
ObjectDelete("SLD"+IntegerToString(jkk));
ObjectCreate("SLD"+IntegerToString(jkk),OBJ_RECTANGLE,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),NormalizeDouble(cari1[jkk],5),ObjectGetInteger(0,"D",OBJPROP_TIME,0)+(4*Period()*60),NormalizeDouble(cari3[jkk],5));
ObjectSet("SLD"+IntegerToString(jkk),OBJPROP_COLOR,clrAqua);
found=true;
continue;
}
else
{
//bikin rect
ObjectDelete("SLD"+IntegerToString(jkk));
ObjectCreate("SLD"+IntegerToString(jkk),OBJ_RECTANGLE,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),NormalizeDouble(cari1[jkk],5),ObjectGetInteger(0,"D",OBJPROP_TIME,0)+(4*Period()*60),NormalizeDouble(cari4[jkk],5));
ObjectSet("SLD"+IntegerToString(jkk),OBJPROP_COLOR,clrAqua);
found=true;
continue;
}
}
if (cari2[jkk]>cari1[jkk])
{
if (cari3[jkk]>=cari4[jkk])
{
//bikin rect
ObjectDelete("SLD"+IntegerToString(jkk));
ObjectCreate("SLD"+IntegerToString(jkk),OBJ_RECTANGLE,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),NormalizeDouble(cari2[jkk],5),ObjectGetInteger(0,"D",OBJPROP_TIME,0)+(4*Period()*60),NormalizeDouble(cari3[jkk],5));
ObjectSet("SLD"+IntegerToString(jkk),OBJPROP_COLOR,clrAqua);
found=true;
continue;
}
else
{
//bikin rect
ObjectDelete("SLD"+IntegerToString(jkk));
ObjectCreate("SLD"+IntegerToString(jkk),OBJ_RECTANGLE,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),NormalizeDouble(cari2[jkk],5),ObjectGetInteger(0,"D",OBJPROP_TIME,0)+(4*Period()*60),NormalizeDouble(cari4[jkk],5));
ObjectSet("SLD"+IntegerToString(jkk),OBJPROP_COLOR,clrAqua);
found=true;
continue;
}
}
}
//turun
if (!found)
{
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrRed);
ObjectSet("Tulis",OBJPROP_COLOR,clrWhite);
ObjectDelete(0,"FOUND");
SetText("FOUND","Pattern not found !!!",579,25,clrRed,18,"Georgia");
return;
}
//reposition rect
int hot;hot=0;
double data[][4],sortirdt1[],sortirdt2[],sortirdt3[];
ArrayResize(data,wrgval);
ArrayResize(sortirdt1,wrgval);
ArrayResize(sortirdt2,wrgval);
ArrayResize(sortirdt3,wrgval);
for (int jkk=0;jkk<wrgval;jkk++)
{
data[jkk][0]=0.0;
data[jkk][1]=0.0;
data[jkk][2]=0.0;
data[jkk][3]=0.0;
sortirdt1[jkk]=0.0;
sortirdt2[jkk]=3.0;
sortirdt3[jkk]=0.0;
if (ObjectFind("SLD"+IntegerToString(jkk))>=0)
{
data[hot][0]=NormalizeDouble(ObjectGet("SLD"+IntegerToString(jkk),1),5);
data[hot][1]=NormalizeDouble(ObjectGet("SLD"+IntegerToString(jkk),3),5);
data[hot][2]=jkk;
data[hot][3]=data[hot][0]-data[hot][1];
sortirdt1[hot]=data[hot][0];
sortirdt2[hot]=data[hot][1];
sortirdt3[hot]=data[hot][3];
hot++;
}
}
ArraySort(sortirdt3,WHOLE_ARRAY,0,MODE_DESCEND);
string ss;ss="";
awal=sortirdt1[ArrayMaximum(sortirdt1,WHOLE_ARRAY,0)];
akhir=sortirdt2[ArrayMinimum(sortirdt2,WHOLE_ARRAY,0)];
if ((awal==0.0)||(akhir==0.0)||(awal==3.0)||(akhir==3.0))
{
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrRed);
ObjectSet("Tulis",OBJPROP_COLOR,clrWhite);
ObjectDelete(0,"FOUND");
SetText("FOUND","Pattern not found !!!",579,25,clrRed,18,"Georgia");
return;
}
ObjectDelete("SLD100");
ObjectCreate("SLD100",OBJ_RECTANGLE,0,Time[0]+(5*Period()*60),awal,Time[0]+(10*Period()*60),akhir);
ObjectSet("SLD100",OBJPROP_COLOR,Rect_Dn_Clr);
ObjectDelete("HorAw100");
ObjectCreate("HorAw100",OBJ_HLINE,0,0,awal);
ObjectSet("HorAw100",OBJPROP_COLOR,Hor_Dn_Clr);
ObjectDelete("HorAk100");
ObjectCreate("HorAk100",OBJ_HLINE,0,0,akhir);
ObjectSet("HorAk100",OBJPROP_COLOR,Hor_Dn_Clr);
double split[][2];
ArrayResize(split,wrgval);
int count;
count=0;
split[0][0]=awal;
split[0][1]=akhir;
for (int jkk=0;jkk<hot;jkk++)
{
ObjectDelete(0,"SLD"+DoubleToString(data[jkk][2],0));
for (int ii=0;ii<hot;ii++)
{
if(sortirdt3[jkk]==data[ii][3])
{
for (int iii=0;iii<=count;iii++)
{
if ((data[ii][0]==split[iii][0])||(data[ii][1]==split[iii][1]))
{
if ((data[ii][0]==split[iii][0]))
{split[iii][0]=data[ii][1];}
if ((data[ii][1]==split[iii][1]))
{split[iii][1]=data[ii][0];}
if ((((data[ii][1]==split[iii][1]))&&((data[ii][0]==split[iii][0])))||
(((data[ii][1]==split[iii][0]))&&((data[ii][0]==split[iii][1]))))
{
for (int jkklm=0;jkklm<hot;jkklm++)
{
ObjectDelete(0,"SLD"+DoubleToString(data[jkklm][2],0));
}
ObjectSet("D",1,akhir);
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrRed);
ObjectSet("Tulis",OBJPROP_COLOR,clrWhite);
return;
}
}
else
{
if ((data[ii][0]<split[iii][0])&&(data[ii][1]>split[iii][1]))
{
count++;
split[count][0]=data[ii][1];
split[count][1]=split[iii][1];
split[iii][1]=data[ii][0];break;
}
}
}
}
}
}
for (int ii=0;ii<=count;ii++)
{
ObjectDelete("SPLI"+IntegerToString(ii));
ObjectCreate("SPLI"+IntegerToString(ii),OBJ_RECTANGLE,0,Time[0]+(5*Period()*60),split[ii][0],Time[0]+(10*Period()*60),split[ii][1]);
ObjectSet("SPLI"+IntegerToString(ii),OBJPROP_COLOR,Rect_Dn_Clr);
ObjectDelete(0,"HorSpliAw"+IntegerToString(ii));
ObjectCreate("HorSpliAw"+IntegerToString(ii),OBJ_HLINE,0,0,split[ii][0]);
ObjectSet("HorSpliAw"+IntegerToString(ii),OBJPROP_COLOR,Hor_Dn_Clr);
ObjectDelete(0,"HorSpliAk"+IntegerToString(ii));
ObjectCreate("HorSpliAk"+IntegerToString(ii),OBJ_HLINE,0,0,split[ii][1]);
ObjectSet("HorSpliAk"+IntegerToString(ii),OBJPROP_COLOR,Hor_Dn_Clr);
}
ObjectSet("D",1,akhir);
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrRed);
ObjectSet("Tulis",OBJPROP_COLOR,clrWhite);
}
// naik
if ((ObjectGet("SEARCH",OBJPROP_BGCOLOR)==clrLime)&&(ObjectGet("D",0)>Time[0])&&(ObjectGet("B",1)>ObjectGet("C",1)))
{
grsbts2=0;grsbts3=0;ArrayInitialize(jump1,0); Ob_Del_Up();
for (int jkk=1;jkk<wrgval;jkk++)
{
if ((cari1[jkk]==3)&&(cari2[jkk]==3)&&(cari3[jkk]==3)&&(cari4[jkk]==3)) continue;
if ((cari1[jkk]==3)&&(cari2[jkk]==3)) continue;
if ((cari3[jkk]==3)&&(cari4[jkk]==3)) continue;
if (cari1[jkk]<=cari2[jkk])
{
if (cari3[jkk]<=cari4[jkk])
{
//bikin rect
ObjectDelete("SL"+IntegerToString(jkk));
ObjectCreate("SL"+IntegerToString(jkk),OBJ_RECTANGLE,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),NormalizeDouble(cari1[jkk],5),ObjectGetInteger(0,"D",OBJPROP_TIME,0)+(4*Period()*60),NormalizeDouble(cari3[jkk],5));
ObjectSet("SL"+IntegerToString(jkk),OBJPROP_COLOR,clrRed);
found=true;
continue;
}
else
{
//bikin rect
ObjectDelete("SL"+IntegerToString(jkk));
ObjectCreate("SL"+IntegerToString(jkk),OBJ_RECTANGLE,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),NormalizeDouble(cari1[jkk],5),ObjectGetInteger(0,"D",OBJPROP_TIME,0)+(4*Period()*60),NormalizeDouble(cari4[jkk],5));
ObjectSet("SL"+IntegerToString(jkk),OBJPROP_COLOR,clrRed);
found=true;
continue;
}
}
if (cari2[jkk]<cari1[jkk])
{
if (cari3[jkk]<=cari4[jkk])
{
//bikin rect
ObjectDelete("SL"+IntegerToString(jkk));
ObjectCreate("SL"+IntegerToString(jkk),OBJ_RECTANGLE,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),NormalizeDouble(cari2[jkk],5),ObjectGetInteger(0,"D",OBJPROP_TIME,0)+(4*Period()*60),NormalizeDouble(cari3[jkk],5));
ObjectSet("SL"+IntegerToString(jkk),OBJPROP_COLOR,clrRed);
found=true;
continue;
}
else
{
//bikin rect
ObjectDelete("SL"+IntegerToString(jkk));
ObjectCreate("SL"+IntegerToString(jkk),OBJ_RECTANGLE,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),NormalizeDouble(cari2[jkk],5),ObjectGetInteger(0,"D",OBJPROP_TIME,0)+(4*Period()*60),NormalizeDouble(cari4[jkk],5));
ObjectSet("SL"+IntegerToString(jkk),OBJPROP_COLOR,clrRed);
found=true;
continue;
}
}
}
if (!found)
{
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrRed);
ObjectSet("Tulis",OBJPROP_COLOR,clrWhite);
ObjectDelete(0,"FOUND");
SetText("FOUND","Pattern not found !!!",579,25,clrRed,18,"Georgia");
return;
}
//reposition rect
int hot;hot=0;
double data[][4],sortirdt1[],sortirdt2[],sortirdt3[];
ArrayResize(data,wrgval);
ArrayResize(sortirdt1,wrgval);
ArrayResize(sortirdt2,wrgval);
ArrayResize(sortirdt3,wrgval);
for (int jkk=0;jkk<wrgval;jkk++)
{
data[jkk][0]=0.0;
data[jkk][1]=0.0;
data[jkk][2]=0.0;
data[jkk][3]=0.0;
sortirdt1[jkk]=3.0;
sortirdt2[jkk]=0.0;
sortirdt3[jkk]=0.0;
if (ObjectFind("SL"+IntegerToString(jkk))>=0)
{
data[hot][0]=NormalizeDouble(ObjectGet("SL"+IntegerToString(jkk),1),5);
data[hot][1]=NormalizeDouble(ObjectGet("SL"+IntegerToString(jkk),3),5);
data[hot][2]=jkk;
data[hot][3]=data[hot][1]-data[hot][0];
sortirdt1[hot]=data[hot][0];
sortirdt2[hot]=data[hot][1];
sortirdt3[hot]=data[hot][3];
hot++;
}
}
ArraySort(sortirdt3,WHOLE_ARRAY,0,MODE_DESCEND);
string ss;ss="";
awal=sortirdt1[ArrayMinimum(sortirdt1,WHOLE_ARRAY,0)];
akhir=sortirdt2[ArrayMaximum(sortirdt2,WHOLE_ARRAY,0)];
if ((awal==0.0)||(akhir==0.0)||(awal==3.0)||(akhir==3.0))
{
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrRed);
ObjectSet("Tulis",OBJPROP_COLOR,clrWhite);
ObjectDelete(0,"FOUND");
SetText("FOUND","Pattern not found !!!",579,25,clrRed,18,"Georgia");
return;
}
ObjectDelete("SL100");
ObjectCreate("SL100",OBJ_RECTANGLE,0,Time[0]+(5*Period()*60),awal,Time[0]+(10*Period()*60),akhir);
ObjectSet("SL100",OBJPROP_COLOR,Rect_Up_Clr);
ObjectDelete("HorUpAw100");
ObjectCreate("HorUpAw100",OBJ_HLINE,0,0,awal);
ObjectSet("HorUpAw100",OBJPROP_COLOR,Hor_Up_Clr);
ObjectDelete("HorUpAk100");
ObjectCreate("HorUpAk100",OBJ_HLINE,0,0,akhir);
ObjectSet("HorUpAk100",OBJPROP_COLOR,Hor_Up_Clr);
double split[][2];
ArrayResize(split,wrgval);
int count;
count=0;
split[0][0]=awal;
split[0][1]=akhir;
for (int jkk=0;jkk<hot;jkk++)
{
ObjectDelete(0,"SL"+DoubleToString(data[jkk][2],0));
for (int ii=0;ii<hot;ii++)
{
if(sortirdt3[jkk]==data[ii][3])
{
for (int iii=0;iii<=count;iii++)
{
if ((data[ii][0]==split[iii][0])||(data[ii][1]==split[iii][1]))
{
if ((data[ii][0]==split[iii][0]))
{split[iii][0]=data[ii][1];}
if ((data[ii][1]==split[iii][1]))
{split[iii][1]=data[ii][0];}
if ((((data[ii][1]==split[iii][1]))&&((data[ii][0]==split[iii][0])))||
(((data[ii][1]==split[iii][0]))&&((data[ii][0]==split[iii][1]))))
{
for (int jkklm=0;jkklm<hot;jkklm++)
{
ObjectDelete(0,"SL"+DoubleToString(data[jkklm][2],0));
}
ObjectSet("D",1,akhir);
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrRed);
ObjectSet("Tulis",OBJPROP_COLOR,clrWhite);
return;
}
}
else
{
if ((data[ii][0]>split[iii][0])&&(data[ii][1]<split[iii][1]))
{
count++;
split[count][0]=data[ii][1];
split[count][1]=split[iii][1];
split[iii][1]=data[ii][0];break;
}
}
}
}
}
}
for (int ii=0;ii<=count;ii++)
{
ObjectDelete("SPLIUP"+IntegerToString(ii));
ObjectCreate("SPLIUP"+IntegerToString(ii),OBJ_RECTANGLE,0,Time[0]+(5*Period()*60),split[ii][0],Time[0]+(10*Period()*60),split[ii][1]);
ObjectSet("SPLIUP"+IntegerToString(ii),OBJPROP_COLOR,Rect_Up_Clr);
ObjectDelete(0,"HorSpliUpAw"+IntegerToString(ii));
ObjectCreate("HorSpliUpAw"+IntegerToString(ii),OBJ_HLINE,0,0,split[ii][0]);
ObjectSet("HorSpliUpAw"+IntegerToString(ii),OBJPROP_COLOR,Hor_Up_Clr);
ObjectDelete(0,"HorSpliUpAk"+IntegerToString(ii));
ObjectCreate("HorSpliUpAk"+IntegerToString(ii),OBJ_HLINE,0,0,split[ii][1]);
ObjectSet("HorSpliUpAk"+IntegerToString(ii),OBJPROP_COLOR,Hor_Up_Clr);
}
ObjectSet("D",1,akhir);
ObjectSet("SEARCH",OBJPROP_BGCOLOR,clrRed);
ObjectSet("Tulis",OBJPROP_COLOR,clrWhite);
}
//-----------------------------------------------
//End Cari Otomatis
return;
}
//+------------------------------------------------------------------+
string bacadata(int posisi)
{
//--- variables for positions of the strings' start points
ulong pos[];
int size;
//--- reset the error value
ResetLastError();
//--- open the file
int file_handle=FileOpen(InpFileName,FILE_READ|FILE_CSV|InpEncodingType);
if(file_handle!=INVALID_HANDLE)
{
// PrintFormat("%s file is available for reading",InpFileName);
//--- receive start position for each string in the file
GetStringPositions(file_handle,pos);
//--- define the number of strings in the file
size=ArraySize(pos);
if(!size)
{
//--- stop if the file does not have strings
// PrintFormat("%s file is empty!",InpFileName);
FileClose(file_handle);
return("");
}
//--- make a random selection of a string number
int ind=posisi;
//--- shift position to the starting point of the string
FileSeek(file_handle,pos[ind],SEEK_SET);
//--- read and print the string with ind number
hasil=FileReadString(file_handle);
FileReadString(file_handle);
if (FileIsEnding(file_handle)) {hasil=hasil+"END";}
FileClose(file_handle);
}
else
PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError());
return(hasil);
}
void SetText(string name,string text,int x,int y,color colour,int fontsize=12, string font="Arial")
{
if(ObjectCreate(0,name,OBJ_LABEL,0,0,0))
{
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
ObjectSetInteger(0,name,OBJPROP_COLOR,colour);
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize);
ObjectSetString(0,name,OBJPROP_FONT,font);
ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
}
ObjectSetString(0,name,OBJPROP_TEXT,text);
}
void SetPanel(string name,int sub_window,int x,int y,int width,int height,color bg_color,color border_clr,int border_width)
{
if(ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
{
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
ObjectSetInteger(0,name,OBJPROP_XSIZE,width);
ObjectSetInteger(0,name,OBJPROP_YSIZE,height);
ObjectSetInteger(0,name,OBJPROP_COLOR,border_clr);
ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
ObjectSetInteger(0,name,OBJPROP_WIDTH,border_width);
ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
ObjectSetInteger(0,name,OBJPROP_BACK,false);
ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0);
ObjectSetInteger(0,name,OBJPROP_SELECTED,0);
ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,bg_color);
}
void GetStringPositions(const int handle,ulong &arr[])
{
//--- default array size
int def_size=127;
//--- allocate memory for the array
ArrayResize(arr,def_size);
//--- string counter
int i=0;
//--- if this is not the file's end, then there is at least one string
if(!FileIsEnding(handle))
{
arr[i]=FileTell(handle);
i++;
}
else
return; // the file is empty, exit
//--- define the shift in bytes depending on encoding
int shift;
if(FileGetInteger(handle,FILE_IS_ANSI))
shift=1;
else
shift=2;
//--- go through the strings in the loop
while(1)
{
//--- read the string
FileReadString(handle);
//--- check for the file end
if(!FileIsEnding(handle))
{
//--- store the next string's position
arr[i]=FileTell(handle)+shift;
i++;
//--- increase the size of the array if it is overflown
if(i==def_size)
{
def_size+=def_size+1;
ArrayResize(arr,def_size);
}
}
else
break; // end of the file, exit
}
//--- define the actual size of the array
ArrayResize(arr,i);
}
void Ob_Del_Up()
{
for (int yy=0;yy<100;yy++)
{
if (ObjectFind(0,"SPLIUP"+IntegerToString(yy))>=0)
{
ObjectDelete(0,"SPLIUP"+IntegerToString(yy));
}
else {return;}
if (ObjectFind(0,"HorSpliUpAw"+IntegerToString(yy))>=0)
{
ObjectDelete(0,"HorSpliUpAw"+IntegerToString(yy));
}
if (ObjectFind(0,"HorSpliUpAk"+IntegerToString(yy))>=0)
{
ObjectDelete(0,"HorSpliUpAk"+IntegerToString(yy));
}
}
return;
}
void Ob_Del_Dn()
{
for (int yy=0;yy<100;yy++)
{
if (ObjectFind(0,"SPLI"+IntegerToString(yy))>=0)
{
ObjectDelete(0,"SPLI"+IntegerToString(yy));
}
else {return;}
if (ObjectFind(0,"HorSpliAw"+IntegerToString(yy))>=0)
{
ObjectDelete(0,"HorSpliAw"+IntegerToString(yy));
}
if (ObjectFind(0,"HorSpliAk"+IntegerToString(yy))>=0)
{
ObjectDelete(0,"HorSpliAk"+IntegerToString(yy));
}
}
return;
}
void createIndicatorLabel(string sObjName) {
string sObjText;
// Set the text
if(Active==True)
sObjText = "Harmonic Ratios: On";
else
sObjText = "Harmonic Ratios: Off";
// Create and position the label
ObjectCreate(sObjName,OBJ_LABEL,0,0,0);
ObjectSetText(sObjName,sObjText,8,"Arial", White);
ObjectSet(sObjName,OBJPROP_XDISTANCE,5);
ObjectSet(sObjName,OBJPROP_YDISTANCE,5);
ObjectSet(sObjName,OBJPROP_CORNER,1);
}void reset()
{
ObjectDelete(0,"FOUND");
ObjectDelete(OBJNAME_LABEL);
ObjectDelete(0,"JUMP");
ObjectDelete(0,"Tulis1");
ObjectDelete(0,"ON");
ObjectDelete(0,"STATUS");
Ob_Del_Dn();
Ob_Del_Up();
ObjectDelete(0,"nama");
ObjectDelete(0,"Fib");
ObjectDelete(0,"Day");
ObjectDelete(0,"Tulis");
ObjectDelete(0,"SEARCH");
ObjectDelete(0,"ketemu");
ObjectDelete(0,"REC1");
ObjectDelete(0,"REC2");
ObjectDelete(0,"HorAk100");
ObjectDelete(0,"HorAw100");
ObjectDelete(0,"SLD100");
ObjectDelete(0,"SL100");
ObjectDelete(0,"HorUpAk100");
ObjectDelete(0,"HorUpAw100");
ObjectDelete(0,"BD_0");
ObjectDelete(0,"CD_0");
ObjectDelete(0,"X");
ObjectDelete(0,"A");
ObjectDelete(0,"B");
ObjectDelete(0,"C");
ObjectDelete(0,"D");
ObjectDelete(0,"DX_0");
ObjectDelete(0,"AC_0");
ObjectDelete(0,"XB_0");
ObjectDelete(0,"A_0");
ObjectDelete(0,"B_0");
ObjectDelete(0,"C_0");
ObjectDelete(0,"D_0");
ObjectDelete(0,"rCDXA_0");
ObjectDelete(0,"rCDBC_0");
ObjectDelete(0,"rBCAB_0");
ObjectDelete(0,"rABXA_0");
ObjectDelete(0,"BC_0");
ObjectDelete(0,"X_0");
ObjectDelete(0,"AB_0");
ObjectDelete(0,"AB_0");
ObjectDelete(0,"XA_0");
ObjectDelete(0,"COLOR");
ObjectDelete(0,"txtCOLOR");
ObjectDelete(0,"XABC");
ObjectDelete(0,"txtXABC");
ObjectDelete(0,"RESET");
ObjectDelete(0,"txtRESET");
ObjectDelete(0,"AUTO");
ObjectDelete(0,"txtAUTO");
return;
}
void XABC()
{
if (ObjectGet("C",1)>ObjectGet("B",1))
{
int kk=0,jj=0,bb=0,aa=0;datetime ll=Time[0];double mm=0.0;
aa=iBarShift(NULL,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),false);
if (aa<0) {aa=0;}
kk=iBarShift(NULL,0,ObjectGetInteger(0,"B",OBJPROP_TIME,0),false);
jj=iHighest(NULL,0,MODE_HIGH,kk-aa,aa);
ObjectSet("C",0,iTime(NULL,0,jj));
ObjectSet("C",1,iHigh(NULL,0,jj)+0.0015);
kk=iBarShift(NULL,0,ObjectGetInteger(0,"A",OBJPROP_TIME,0),false);
bb=iLowest(NULL,0,MODE_LOW,kk-jj,jj);
ObjectSet("B",0,iTime(NULL,0,bb));
ObjectSet("B",1,iLow(NULL,0,bb)-0.0001);
kk=iBarShift(NULL,0,ObjectGetInteger(0,"X",OBJPROP_TIME,0),false);
jj=iHighest(NULL,0,MODE_HIGH,kk-bb,bb);
ObjectSet("A",0,iTime(NULL,0,jj));
ObjectSet("A",1,iHigh(NULL,0,jj)+0.0015);
bb=iLowest(NULL,0,MODE_LOW,kk+10-jj,jj);
ObjectSet("X",0,iTime(NULL,0,bb));
ObjectSet("X",1,iLow(NULL,0,bb)-0.0001);
}
if (ObjectGet("C",1)<ObjectGet("B",1))
{
int kk=0,jj=0,bb=0,aa=0;datetime ll=Time[0];double mm=0.0;
aa=iBarShift(NULL,0,ObjectGetInteger(0,"D",OBJPROP_TIME,0),false);
if (aa<0) {aa=0;}
kk=iBarShift(NULL,0,ObjectGetInteger(0,"B",OBJPROP_TIME,0),false);
jj=iLowest(NULL,0,MODE_LOW,kk-aa,aa);
ObjectSet("C",0,iTime(NULL,0,jj));
ObjectSet("C",1,iLow(NULL,0,jj)-0.0001);
kk=iBarShift(NULL,0,ObjectGetInteger(0,"A",OBJPROP_TIME,0),false);
bb=iHighest(NULL,0,MODE_HIGH,kk-jj,jj);
ObjectSet("B",0,iTime(NULL,0,bb));
ObjectSet("B",1,iHigh(NULL,0,bb)+0.0015);
kk=iBarShift(NULL,0,ObjectGetInteger(0,"X",OBJPROP_TIME,0),false);
jj=iLowest(NULL,0,MODE_LOW,kk-bb,bb);
ObjectSet("A",0,iTime(NULL,0,jj));
ObjectSet("A",1,iLow(NULL,0,jj)-0.0001);
bb=iHighest(NULL,0,MODE_HIGH,kk+10-jj,jj);
ObjectSet("X",0,iTime(NULL,0,bb));
ObjectSet("X",1,iHigh(NULL,0,bb)+0.0015);
}
return;
}
Comments