Navigation:Home > Content >

PriceSound_FiboExpansion.mq4

Time: 2015-10-05 | Download file:PriceSound_FiboExpansion.mq4

//+------------------------------------------------------------------+
//|                                     PriceSound_FiboEXPANSION.mq4 |
//|                                                             Roll |
//|                                  Расширение Фибоначчи со звуком. |
//+------------------------------------------------------------------+
#property copyright "Roll"
#property link      "http://www.mql4.com/ru/users/Roll"
#property indicator_chart_window
/*
/* Источники: 1)- индикатор PriceAlert(v.1.1)от api(http://codebase.mql4.com/download/17987).
 Индикатор PriceAlert работает с горизонтальной(ми)линией(ми).
 "Индикатор автоматически определяет момент пересечения ценой линии и активизирует сигнал"(api).
2)- Индикатор PriceSound_trendline(http://codebase.mql4.com/ru/7601).Работает в тестере.
 Индикатор PriceSound_trendline работает с трендовой(ми) линией(ми).
 Для сигнала предпочтение отдается звуку,поэтому звуковой файл должен быть индивидуальным и 
 продолжительностью проигрывания несколько секунд.На графике может находится несколько 
 таких трендовых линий с различными названиями(несколько индикаторов PriceSound_trendline).
Замечание: Во время запуска индикаторы PriceSound_...(PriceSound_trendline,PriceSound_channel,
 PriceSound_Fibochannel,PriceSound_Fibolevels,PriceSound_FIBOFAN,PriceSound_FiboEXPANSION)устанавливают или 
 предлагают установить"свои"объекты(по умолчанию),
 Если пользователь согласен (см.внешние переменные),то"объект"устанавливается немного выше рынка.
========================================================================
- Индикатор PriceSound_FiboEXPANSION работает с фибо-расширениями,которые перемещают
   трендовые линии со свойствами индикатора PriceSound_trendline.Работает в тестере.
========================================================================
*/
extern bool   Sound_Play=true;         //разрешение на звук
extern string UniqueName1="FiboExpans_62Price 1";//название 1 трендовой линии
extern color  LineColor1=YellowGreen;  //цвет 1 линии
extern int    LineWidth1=2;            //ширина 1 линии
extern string Sound1="ready.wav";      //название звукового файла для 1 трендовой линии
extern string UniqueName2="FiboExpans_100Price 1";//название 2 трендовой линии
extern color  LineColor2=OrangeRed;    //цвет 2 линии
extern int    LineWidth2=2;            //ширина 2 линии
extern string Sound2="ready.wav";      //название звукового файла для 2 трендовой линии
extern string UniqueName3="FiboExpans_162Price 1";//название 3 трендовой линии
extern color  LineColor3=Magenta;      //цвет 3 линии
extern int    LineWidth3=2;            //ширина 3 линии
extern string Sound3="ready.wav";      //название звукового файла для 3 трендовой линии
extern string UniqueName4="FiboExpans_262Price 1";//название 4 трендовой линии
extern color  LineColor4=Gold;         //цвет 4 линии
extern int    LineWidth4=2;            //ширина 4 линии
extern string Sound4="ready.wav";      //название звукового файла для 4 трендовой линии
extern bool   Ind_levels=false;        //разрешение/запрет индикации уровней фибо-расширения
extern int    Ind_Bar=0;               //номер бара (смещение) для индикации пунктов
extern int    DistPips=0; //Если меньше 10-авт.установка.Регулировка расстояния от изображения числа пунктов до соотв.прямой
extern color  FExpansColor_levels=Gold;//цвет уровней фибо-расширения
extern bool   Create_FExpans=true;     //разрешение/запрет на образование фибо-расширения
extern string Name_FExpans="FExpans_1";//название фибо-расширения
extern bool   Del_FExpans=false;       //запрет/разрешение на удаление заданного фибо-расширения
color  FExpansColor=DarkTurquoise;     //цвет фибо-расширения 
int ArrShift,t;bool Active;string PipsTextName;double LastLevel,LastPrice,TradePoint;
static double lastLevel_62,lastLevel_100,lastLevel_162,lastLevel_262,lastPrice_62,lastPrice_100,lastPrice_162,lastPrice_262;
int init()
{if(Digits==3||Digits==5)TradePoint=Point*10;else TradePoint=Point;
 LastPrice=0;lastLevel_62=0;lastLevel_100=0;lastLevel_162=0;lastLevel_262=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);
  lastLevel_62=0;lastLevel_100=0;lastLevel_162=0;lastLevel_262=0;
  lastPrice_62=0;lastPrice_100=0;lastPrice_162=0;lastPrice_262=0;}return(0);}
//+--------Custom indicator iteration function-----------------------+
int start(){datetime c0,cc0,c2,cc2,c4;double c1,c3,c5,a,b,cp,cp2;
 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;}}
 if(Del_FExpans)
 {if(ObjectFind(UniqueName1)==0) 
 PriceSound_trendline(UniqueName1,LineColor1,Sound1,ArrShift,lastLevel_62,lastPrice_62);
 if(ObjectFind(UniqueName2)==0) 
 PriceSound_trendline(UniqueName2,LineColor2,Sound2,ArrShift,lastLevel_100,lastPrice_100);
 if(ObjectFind(UniqueName3)==0) 
 PriceSound_trendline(UniqueName3,LineColor3,Sound3,ArrShift,lastLevel_162,lastPrice_162);
 if(ObjectFind(UniqueName4)==0) 
 PriceSound_trendline(UniqueName4,LineColor4,Sound4,ArrShift,lastLevel_262,lastPrice_262);
 if(ObjectFind(Name_FExpans)==0)ObjectDelete(Name_FExpans);return(0);}
 if(ObjectFind(Name_FExpans)!=0&&Create_FExpans)
 {cp=Close[0]+(10+ArrShift)*TradePoint;cp2=cp+ArrShift*TradePoint;
  ObjectCreate(Name_FExpans,OBJ_EXPANSION,0,Time[25],cp,Time[12],cp2,Time[0],cp);} 
 else if((ObjectFind(Name_FExpans)==0&&!Create_FExpans)||ObjectFind(Name_FExpans)==0)
 {ObjectSet(Name_FExpans,OBJPROP_COLOR,FExpansColor);ObjectSet(Name_FExpans,OBJPROP_STYLE,1);
 if(Ind_levels)
 {ObjectSet(Name_FExpans,OBJPROP_FIBOLEVELS,4);ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL,0.62);
  ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL+1,1.0);ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL+2,1.62);
  ObjectSet(Name_FExpans,OBJPROP_FIRSTLEVEL+3,2.62);ObjectSetFiboDescription(Name_FExpans,0,"COP 61.8");
  ObjectSetFiboDescription(Name_FExpans,1,"OP 100.0");ObjectSetFiboDescription(Name_FExpans,2,"XOP 161.0"); 
  ObjectSetFiboDescription(Name_FExpans,3,"SXOP 261.8");ObjectSet(Name_FExpans,OBJPROP_LEVELCOLOR,FExpansColor_levels);}
 else if(!Ind_levels)ObjectSet(Name_FExpans,OBJPROP_FIBOLEVELS,1); 
  c0=ObjectGet(Name_FExpans,0);c1=ObjectGet(Name_FExpans,1);c2=ObjectGet(Name_FExpans,2);
  c3=ObjectGet(Name_FExpans,3);c4=ObjectGet(Name_FExpans,4);c5=ObjectGet(Name_FExpans,5);}
 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=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]=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];}}
//+------------------------------------------------------------------+

Recommend