//+------------------------------------------------------------------+
//|                            PriceSoundTS_DinapoliTarget_Malay.mq4 |
//|                                                             Roll |
//|             DinapoliTarget_Malay � �������� PriceSound_trendline |
//+------------------------------------------------------------------+
#property copyright "Roll"
#property link      "http://www.mql4.com/ru/users/Roll"
#property indicator_chart_window
#property indicator_buffers 1
/*1)DinapoliTarget_Malay http://codebase.mql4.com/ru/3034,fxfariz a.k.a warrior trader.
 2)PriceSound_FiboEXPANSION http://codebase.mql4.com/ru/7637.*/
extern int    barn=300;                //������� � �����
extern int    Length=6;                //���������� ����� �����
extern bool   Al=true;                 //���. alert
extern bool   targets_Malay=false;     //�������� ���� "DinapoliTarget_Malay" 
extern bool   PriceSound_on=true;      //���. ����� "PriceSound_on"
extern bool   Sound_Play=true;         //���������� �� ����
extern string UniqueName1="FiboExpans_62Price 1";//�������� 1 ��������� �����
extern color  LineColor1=Yellow;       //���� 1 �����
extern int    LineWidth1=2;            //������ 1 �����
extern string Sound1="ready.wav";      //�������� ��������� ����� ��� 1 ��������� �����
extern string UniqueName2="FiboExpans_100Price 1";//�������� 2 ��������� �����
extern color  LineColor2=PaleTurquoise;//���� 2 �����
extern int    LineWidth2=2;            //������ 2 �����
extern string Sound2="ready.wav";      //�������� ��������� ����� ��� 2 ��������� �����
extern string UniqueName3="FiboExpans_162Price 1";//�������� 3 ��������� �����
extern color  LineColor3=LightSkyBlue; //���� 3 �����
extern int    LineWidth3=2;            //������ 3 �����
extern string Sound3="ready.wav";      //�������� ��������� ����� ��� 3 ��������� �����
extern string UniqueName4="FiboExpans_262Price 1";//�������� 4 ��������� �����
extern color  LineColor4=Magenta;      //���� 4 �����
extern int    LineWidth4=2;            //������ 4 �����
extern string Sound4="ready.wav";      //�������� ��������� ����� ��� 4 ��������� �����
extern string UniqueName5="FiboExpans_StartPrice 1";//�������� 5 ��������� �����
extern color  LineColor5=Bisque;       //���� 5 �����
extern int    LineWidth5=2;            //������ 5 �����
extern string Sound5="ready.wav";      //�������� ��������� ����� ��� 5 ��������� �����
extern string UniqueName6="FiboExpans_StopPrice 1";//�������� 6 ��������� �����
extern color  LineColor6=OrangeRed;    //���� 6 �����
extern int    LineWidth6=2;            //������ 6 �����
extern string Sound6="ready.wav";      //�������� ��������� ����� ��� 6 ��������� �����
extern bool   Ind_levels=true;         //����������/������ ��������� ������� ����-����������
extern int    Ind_Bar=0;               //����� ���� (��������) ��� ��������� �������
extern int    DistPips=0; //���� ������ 10-���.���������.����������� ���������� �� ����������� ����� ������� �� �����.������
extern color  FExpansColor_levels=Gold;//���� ������� ����-����������
extern string Name_FExpans="FExpans_1";//�������� ����-����������
color  FExpansColor=DarkTurquoise;     //���� ����-���������� 
int ArrShift,t;bool Active;string PipsTextName;double LastLevel,LastPrice,TradePoint;
static double lastLevel_Start,lastLevel_Stop,lastLevel_62,lastLevel_100,lastLevel_162,
 lastLevel_262,lastPrice_Start,lastPrice_Stop,lastPrice_62,lastPrice_100,lastPrice_162,lastPrice_262;
double prev,last,alertBar,ExtMapBuffer1[];
//+------------------------------------------------------------------+
int init()
{SetIndexEmptyValue(0,0.0);SetIndexDrawBegin(0,barn);
 SetIndexStyle(0,DRAW_SECTION);SetIndexBuffer(0,ExtMapBuffer1);
 if(Digits==3||Digits==5)TradePoint=Point*10;else TradePoint=Point;LastPrice=0;
 lastLevel_Start=0;lastLevel_Stop=0;lastLevel_62=0;lastLevel_100=0;lastLevel_162=0;lastLevel_262=0;
 lastPrice_Start=0;lastPrice_Stop=0;lastPrice_62=0;lastPrice_100=0;lastPrice_162=0;lastPrice_262=0;Active=true;return(0);}
int deinit()
{if(UninitializeReason()==REASON_REMOVE){ObjectDelete(Name_FExpans);
  ObjectDelete(UniqueName1);PipsTextName=UniqueName1+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName2);PipsTextName=UniqueName2+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName3);PipsTextName=UniqueName3+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName4);PipsTextName=UniqueName4+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName5);PipsTextName=UniqueName5+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName6);PipsTextName=UniqueName6+" Pips";ObjectDelete(PipsTextName);
  lastLevel_Start=0;lastLevel_Stop=0;lastLevel_62=0;lastLevel_100=0;lastLevel_162=0;lastLevel_262=0;
  lastPrice_Start=0;lastPrice_Stop=0;lastPrice_62=0;lastPrice_100=0;lastPrice_162=0;lastPrice_262=0;
  ObjectDelete("Start line");ObjectDelete("Stop line");ObjectDelete("Target1 line");ObjectDelete("Target2 line");
  ObjectDelete("Target3 line");ObjectDelete("Fantnsy line");ObjectDelete("CrazyDream line");}return(0);}
//+------------------------------------------------------------------+
int start()
{int shift,Swing,Swing_n,uzl,i,zu,zd,mv,Line_Width=2;
 double PointA,PointB,PointC,Target1,Target2,Target3,Fantnsy,CrazyDream,Start,Stop,c1,c3,c5,a,b,cp,cp2;
 double LL,HH,BH,BL,NH,NL,Uzel[10000][3],spr=MarketInfo(Symbol(),MODE_SPREAD)*Point;
 color FiboExpan_Color=LightGreen;datetime time_0,time_1,time_2,c0,cc0,c2,cc2,c4; 
 Swing_n=0;Swing=0;uzl=0;BH=High[barn];BL=Low[barn];zu=barn;zd=barn;
 switch(Period())
 {case PERIOD_M1: if(Period()==PERIOD_M1) {ArrShift=10; break;}
  case PERIOD_M5: if(Period()==PERIOD_M5) {ArrShift=12; break;}
  case PERIOD_M15:if(Period()==PERIOD_M15){ArrShift=15; break;}
  case PERIOD_M30:if(Period()==PERIOD_M30){ArrShift=30; break;}
  case PERIOD_H1: if(Period()==PERIOD_H1) {ArrShift=50; break;}
  case PERIOD_H4: if(Period()==PERIOD_H4)	{ArrShift=100;break;}
  case PERIOD_D1: if(Period()==PERIOD_D1) {ArrShift=200;break;}
  case PERIOD_W1: if(Period()==PERIOD_W1) {ArrShift=500;break;}
  case PERIOD_MN1:if(Period()==PERIOD_MN1){ArrShift=1000;break;}}
 for(shift=barn;shift>=0;shift--) 
 {LL=10000000;HH=-100000000;for(i=shift+Length;i>=shift+1;i--){if(Low[i]<LL)LL=Low[i];if(High[i]>HH)HH=High[i];}
  if(Low[shift]<LL&&High[shift]>HH){Swing=2;if(Swing_n==1)zu=shift+1;if(Swing_n==-1)zd=shift+1;}
  else{if(Low[shift]<LL)Swing=-1;if(High[shift]>HH)Swing=1;}
  if(Swing!=Swing_n&&Swing_n!=0)
  {if(Swing==2){Swing=-Swing_n;BH=High[shift];BL=Low[shift];}uzl=uzl+1;
   if(Swing==1){Uzel[uzl][1]=zd;Uzel[uzl][2]=BL;}
   if(Swing==-1){Uzel[uzl][1]=zu;Uzel[uzl][2]=BH;}BH=High[shift];BL=Low[shift];}
  if(Swing==1){if(High[shift]>=BH){BH=High[shift];zu=shift;}}
  if(Swing==-1){if(Low[shift]<=BL){BL=Low[shift];zd=shift;}}Swing_n=Swing;}
  for(i=1;i<=uzl;i++) 
  {mv=StrToInteger(DoubleToStr(Uzel[i][1],0));
   if(prev>Uzel[i][2]&&ExtMapBuffer1[mv]!=Uzel[i][2]&&Al>0&&Bars>alertBar)
   {Alert("Dinapoli Target: BUY SIGNAL ",Symbol()," �� ",Period()," �������� ������� ");alertBar=Bars;prev=Uzel[i][2];}
   if(prev < Uzel[i][2] && ExtMapBuffer1[mv]!=Uzel[i][2]&&Al>0&&Bars>alertBar)
   {Alert("Dinapoli Target: SELL SIGNAL ",Symbol()," �� ",Period()," �������� ������� ");alertBar=Bars;prev=Uzel[i][2];}
   ExtMapBuffer1[mv]=Uzel[i][2];}
   PointA=Uzel[uzl-2][2];PointB=Uzel[uzl-1][2];PointC=Uzel[uzl][2];
   Target1=ND((PointB-PointA)*0.618+PointC);Target2=PointB-PointA+PointC;
   Target3=ND((PointB-PointA)*1.618+PointC);Fantnsy=ND((PointB-PointA)*2.618+PointC);
   CrazyDream=ND((PointB-PointA)*4.618+PointC);
   time_0=iTime(0,0,Uzel[uzl-2][1]);time_1=iTime(0,0,Uzel[uzl-1][1]);time_2=iTime(0,0,Uzel[uzl][1]);
 if(PointB<PointC){Start= ND((PointB-PointA)*0.318+PointC)-spr;Stop=PointC+2*spr;}
 if(PointB>PointC){Start= ND((PointB-PointA)*0.318+PointC)+spr;Stop=PointC-2*spr;}
if(targets_Malay==true)
 {if(ObjectFind("Start Line")!=0)
 {ObjectCreate("Start line",OBJ_HLINE,0,Time[0],Start);ObjectSet("Start line",OBJPROP_COLOR,Bisque);
  ObjectSet("Start line",OBJPROP_WIDTH,3);ObjectSet("Start line",OBJPROP_STYLE,STYLE_DOT);}
 else ObjectMove("Start line",0,Time[0],Start);
 if(ObjectFind("Stop Line")!=0)
  {ObjectCreate("Stop line",OBJ_HLINE,0,Time[0],Stop);ObjectSet("Stop line",OBJPROP_COLOR,Red);
   ObjectSet("Stop line",OBJPROP_WIDTH,3);ObjectSet("Stop line",OBJPROP_STYLE,STYLE_DOT);}
 else ObjectMove("Stop line",0,Time[0],Stop);
 if(ObjectFind("Target1 Line")!=0)
  {ObjectCreate("Target1 line",OBJ_HLINE,0,Time[0],Target1);ObjectSet("Target1 line",OBJPROP_COLOR,Yellow);
   ObjectSet("Target1 line",OBJPROP_WIDTH,3);ObjectSet("Target1 line",OBJPROP_STYLE,STYLE_DOT);}
 else ObjectMove("Target1 line",0,Time[0],Target1);
 if(ObjectFind("Target2 Line")!=0)
  {ObjectCreate("Target2 line",OBJ_HLINE,0,Time[0],Target2);ObjectSet("Target2 line",OBJPROP_COLOR,PaleTurquoise);
   ObjectSet("Target2 line",OBJPROP_WIDTH,3);ObjectSet("Target2 line",OBJPROP_STYLE,STYLE_DOT);}
 else ObjectMove("Target2 line",0,Time[0],Target2);
 if(ObjectFind("Target3 Line")!=0)
 {ObjectCreate("Target3 line",OBJ_HLINE,0,Time[0],Target3);ObjectSet("Target3 line",OBJPROP_COLOR,LightSkyBlue);
  ObjectSet("Target3 line",OBJPROP_WIDTH,3);ObjectSet("Target3 line",OBJPROP_STYLE,STYLE_DOT);}
 else ObjectMove("Target3 line",0,Time[0],Target3);
 if(ObjectFind("Fantnsy Line")!=0)
 {ObjectCreate("Fantnsy line",OBJ_HLINE,0,Time[0],Fantnsy);ObjectSet("Fantnsy line",OBJPROP_COLOR,Magenta);
  ObjectSet("Fantnsy line",OBJPROP_WIDTH,3);ObjectSet("Fantnsy line",OBJPROP_STYLE,STYLE_DOT);}
 else ObjectMove("Fantnsy line",0,Time[0],Fantnsy);
 if(ObjectFind("CrazyDream Line")!=0)
 {ObjectCreate("CrazyDream line",OBJ_HLINE,0,Time[0],Fantnsy);ObjectSet("CrazyDream line",OBJPROP_COLOR,Gold);
  ObjectSet("CrazyDream line",OBJPROP_WIDTH,3);ObjectSet("CrazyDream line",OBJPROP_STYLE,STYLE_DOT);}
 else ObjectMove("CrazyDream line",0,Time[0],CrazyDream);}
 if(targets_Malay==false)
 {ObjectDelete("Start line");ObjectDelete("Stop line");ObjectDelete("Target1 line");ObjectDelete("Target2 line");
  ObjectDelete("Target3 line");ObjectDelete("Fantnsy line");ObjectDelete("CrazyDream line");}
 if(PriceSound_on)
 {if(ObjectFind(Name_FExpans)!=0)
  {ObjectCreate(Name_FExpans,OBJ_EXPANSION,0,time_0,PointA,time_1,PointB,time_2,PointC); 
   ObjectSet(Name_FExpans,OBJPROP_COLOR,FExpansColor);
   ObjectSet(Name_FExpans,OBJPROP_STYLE,1);}
 if(ObjectFind(Name_FExpans)==0)
 {ObjectMove(Name_FExpans,0,time_0,PointA);ObjectMove(Name_FExpans,1,time_1,PointB);ObjectMove(Name_FExpans,2,time_2,PointC);
  if(Ind_levels)
  {ObjectSet(Name_FExpans,OBJPROP_FIBOLEVELS,5);ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL,0.33);  
   ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL+1,0.618);ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL+2,1.0);
   ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL+3,1.618);ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL+4,2.618);
   ObjectSetFiboDescription(Name_FExpans,0,"START 33.0");ObjectSetFiboDescription(Name_FExpans,1,"COP 61.8");
   ObjectSetFiboDescription(Name_FExpans,2,"OP 100.0");ObjectSetFiboDescription(Name_FExpans,3,"XOP 161.0"); 
   ObjectSetFiboDescription(Name_FExpans,4,"SXOP 261.8");ObjectSet(Name_FExpans,OBJPROP_LEVELCOLOR,FExpansColor_levels);}
  else if(!Ind_levels)ObjectSet(Name_FExpans,OBJPROP_FIBOLEVELS,1); 
  c0=time_0;c1=PointA;c2=time_1;c3=PointB;c4=time_2;c5=PointC;}
 else if(ObjectFind(Name_FExpans)!=0){Alert("No FiboExpans - ",Name_FExpans," !");return(0);}
 a=c3-c1;if(c2>c0){cc0=c0;cc2=c2;}else if(c2<c0){cc0=c2;cc2=c0;}else if(c2==c0)return(0);
 if(ObjectFind(UniqueName1)!=0)
 {b=c5+0.618*a;ObjectCreate(UniqueName1,OBJ_TREND,0,cc0,b,cc2,b);ObjectSetText(UniqueName1,"Price level1",0);}
 if(ObjectFind(UniqueName1)==0) 
 {b=c5+0.618*a;ObjectMove(UniqueName1,0,cc0,b);ObjectMove(UniqueName1,1,cc2,b);
  ObjectSet(UniqueName1,OBJPROP_COLOR,LineColor1);ObjectSet(UniqueName1,OBJPROP_WIDTH,LineWidth1);
  PriceSound_trendline(UniqueName1,LineColor1,Sound1,ArrShift,lastLevel_62,lastPrice_62);}
 if(ObjectFind(UniqueName2)!=0)
 {b=c5+a;ObjectCreate(UniqueName2,OBJ_TREND,0,cc0,b,cc2,b);ObjectSetText(UniqueName2,"Price level2",0);}
 if(ObjectFind(UniqueName2)==0){b=c5+a;ObjectMove(UniqueName2,0,cc0,b);ObjectMove(UniqueName2,1,cc2,b);
 ObjectSet(UniqueName2,OBJPROP_COLOR,LineColor2);ObjectSet(UniqueName2,OBJPROP_WIDTH,LineWidth2);
 PriceSound_trendline(UniqueName2,LineColor2,Sound2,ArrShift,lastLevel_100,lastPrice_100);}
 if(ObjectFind(UniqueName3)!=0)
 {b=c5+1.618*a;ObjectCreate(UniqueName3,OBJ_TREND,0,cc0,b,cc2,b);ObjectSetText(UniqueName3,"Price level3",0);}
 if(ObjectFind(UniqueName3)==0){b=c5+1.618*a;ObjectMove(UniqueName3,0,cc0,b);ObjectMove(UniqueName3,1,cc2,b);
  ObjectSet(UniqueName3,OBJPROP_COLOR,LineColor3);ObjectSet(UniqueName3,OBJPROP_WIDTH,LineWidth3);
  PriceSound_trendline(UniqueName3,LineColor3,Sound3,ArrShift,lastLevel_162,lastPrice_162);} 
 if(ObjectFind(UniqueName4)!=0)
 {b=c5+2.618*a;ObjectCreate(UniqueName4,OBJ_TREND,0,cc0,b,cc2,b);ObjectSetText(UniqueName4,"Price level4",0);}
 if(ObjectFind(UniqueName4)==0){b=c5+2.618*a;ObjectMove(UniqueName4,0,cc0,b);ObjectMove(UniqueName4,1,cc2,b);
  ObjectSet(UniqueName4,OBJPROP_COLOR,LineColor4);ObjectSet(UniqueName4,OBJPROP_WIDTH,LineWidth4);
  PriceSound_trendline(UniqueName4,LineColor4,Sound4,ArrShift,lastLevel_262,lastPrice_262);}
 if(ObjectFind(UniqueName5)!=0)
 {b=c5+0.33*a;ObjectCreate(UniqueName5,OBJ_TREND,0,cc0,b,cc2,b);ObjectSetText(UniqueName5,"Price levelStart",0);}
 if(ObjectFind(UniqueName5)==0){b=c5+0.33*a;ObjectMove(UniqueName5,0,cc0,b);ObjectMove(UniqueName5,1,cc2,b);
  ObjectSet(UniqueName5,OBJPROP_COLOR,LineColor5);ObjectSet(UniqueName5,OBJPROP_WIDTH,LineWidth5);
  PriceSound_trendline(UniqueName5,LineColor5,Sound5,ArrShift,lastLevel_Start,lastPrice_Start);}
 if(ObjectFind(UniqueName6)!=0)
 {b=Stop;ObjectCreate(UniqueName6,OBJ_TREND,0,cc0,b,cc2,b);ObjectSetText(UniqueName6,"Price levelStop",0);}
 if(ObjectFind(UniqueName6)==0){b=Stop;ObjectMove(UniqueName6,0,cc0,b);ObjectMove(UniqueName6,1,cc2,b);
  ObjectSet(UniqueName6,OBJPROP_COLOR,LineColor6);ObjectSet(UniqueName6,OBJPROP_WIDTH,LineWidth6);
  PriceSound_trendline(UniqueName6,LineColor6,Sound6,ArrShift,lastLevel_Stop,lastPrice_Stop);}}
 if(PriceSound_on==false){ObjectDelete(Name_FExpans);
  ObjectDelete(UniqueName1);PipsTextName=UniqueName1+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName2);PipsTextName=UniqueName2+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName3);PipsTextName=UniqueName3+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName4);PipsTextName=UniqueName4+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName5);PipsTextName=UniqueName5+" Pips";ObjectDelete(PipsTextName);
  ObjectDelete(UniqueName6);PipsTextName=UniqueName6+" Pips";ObjectDelete(PipsTextName);
  lastLevel_Start=0;lastLevel_Stop=0;lastLevel_62=0;lastLevel_100=0;lastLevel_162=0;lastLevel_262=0;
  lastPrice_Start=0;lastPrice_Stop=0;lastPrice_62=0;lastPrice_100=0;lastPrice_162=0;lastPrice_262=0;}return(0);}
//+------------------------------------------------------------------+
void PriceSound_trendline(string UniqueName,color LineColor,string Sound,int arrShift,double lastLevel,double lastPrice)
{PipsTextName=StringConcatenate(UniqueName," ","Pips");if(DistPips>=10)ArrShift=DistPips;else ArrShift=arrShift;
 LastLevel=lastLevel;LastPrice=lastPrice;
 if(ObjectFind(PipsTextName)==-1){double cp=LastLevel;if(cp==0)cp=LastLevel+(10+ArrShift)*TradePoint;
    ObjectCreate(PipsTextName,OBJ_TEXT,0,Time[0],cp);}if(Ind_Bar>0)t=Ind_Bar;else t=0;
 ObjectSet(PipsTextName,OBJPROP_TIME1,Time[t]);double newlevel=ObjectGetValueByShift(UniqueName,0);
 if(Active){ObjectSet(UniqueName,OBJPROP_COLOR,LineColor);ObjectSetText(UniqueName,"Price sound level - Active",0);
  double Pips=MathAbs(NormalizeDouble((newlevel-Close[0])/TradePoint,Digits));
  if(Digits==3||Digits==5)ObjectSetText(PipsTextName,DoubleToStr(Pips,1),14,"Terminal",LineColor);
  else ObjectSetText(PipsTextName,DoubleToStr(Pips,0),14,"Terminal",LineColor);}
 if(Close[0]>newlevel)ObjectSet(PipsTextName,OBJPROP_PRICE1,newlevel-ArrShift*TradePoint);
 if(Close[0]<newlevel)ObjectSet(PipsTextName,OBJPROP_PRICE1,newlevel+ArrShift*TradePoint);
 if(LastLevel!=newlevel)
 {LastLevel=newlevel;LastPrice=0;ObjectSetText(UniqueName,"Price sound level - Active",0);Active=true;}
 if(Active&&LastPrice!=0&&((LastPrice<LastLevel&&Close[0]>=LastLevel)||(LastPrice>LastLevel&&Close[0]<=LastLevel)))
 {if(Sound_Play)PlaySound(Sound);else Active=false;ObjectSetText(PipsTextName,"",14,"Terminal",LineColor);
  ObjectSetText(UniqueName,"Price sound level - Inactive",0);ObjectSet(UniqueName,OBJPROP_COLOR,Blue);}
 if(UniqueName==UniqueName1){lastLevel_62=LastLevel;lastPrice_62=Close[0];}
 if(UniqueName==UniqueName2){lastLevel_100=LastLevel;lastPrice_100=Close[0];}
 if(UniqueName==UniqueName3){lastLevel_162=LastLevel;lastPrice_162=Close[0];}
 if(UniqueName==UniqueName4){lastLevel_262=LastLevel;lastPrice_262=Close[0];}
 if(UniqueName==UniqueName5){lastLevel_Start=LastLevel;lastPrice_Start=Close[0];}
 if(UniqueName==UniqueName6){lastLevel_Stop=LastLevel;lastPrice_Stop=Close[0];}}
//---------NORMALIZATION---------------------------------------------+
double ND(double v){double digits=MarketInfo(Symbol(),MODE_DIGITS);return(NormalizeDouble(v,digits));}
//+------------------------------------------------------------------+