Okay keep looking.
jordan82es:
Hello guys.
I´m looking for an Stochastic indicator with PUSH Alerts but the concept here is if the alerts were when the both lines are crossing at any moment and any level, not only at the 80 , 50 or 20 levels, I want the alert at any moment when the both lines are crossing.
Cheers.
I found one which code looks good.
#property indicator_chart_window //---- two buffers are used for calculation and drawing the indicator #property indicator_buffers 2 //---- only two plots are used #property indicator_plots 2 //+----------------------------------------------+ //| Parameters of drawing the bearish indicator | //+----------------------------------------------+ //---- drawing the indicator 1 as a symbol #property indicator_type1 DRAW_ARROW //---- magenta color is used as the color of the bearish label of the indicator #property indicator_color1 Magenta //---- thickness of the indicator line 1 is equal to 4 #property indicator_width1 4 //---- displaying of the bearish label of the indicator #property indicator_label1 "Sell" //+----------------------------------------------+ //| Parameters of drawing the bullish indicator | //+----------------------------------------------+ //---- drawing the indicator 2 as a symbol #property indicator_type2 DRAW_ARROW //---- lime color is used as the color of the bullish label of the indicator #property indicator_color2 Lime //---- thickness of the indicator line 2 is equal to 4 #property indicator_width2 4 //---- displaying the bullish label of the indicator #property indicator_label2 "Buy" //+----------------------------------------------+ //| Indicator input parameters | //+----------------------------------------------+ input bool SoundON=false; input bool EmailON=false; //---- input int KPeriod=5; input int DPeriod=3; input int Slowing=3; input ENUM_MA_METHOD MA_Method=MODE_SMA; input ENUM_STO_PRICE Price_field=STO_LOWHIGH; input int OverBoughtLevel=80; input int OverSoldLevel=20; input bool show_KD_cross=false; input bool show_K_OBOScross = true; input bool show_D_OBOScross = false; //+----------------------------------------------+ //---- declaration of dynamic arrays that // will be used as indicator buffers double SellBuffer[]; double BuyBuffer[]; //---- int StartBars; int STO_Handle; bool flagval1_; bool flagval2_; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- initialization of global variables StartBars=KPeriod+DPeriod; if(StartBars<9)StartBars=9; //---- getting handle of the ATR indicator STO_Handle=iStochastic(NULL,0,KPeriod,DPeriod,Slowing,MA_Method,Price_field); if(STO_Handle==INVALID_HANDLE)Print(" Failed to get handle of the iStochastic1 indicator"); //---- set dynamic array as an indicator buffer SetIndexBuffer(0,SellBuffer,INDICATOR_DATA); //---- shifting the start of drawing of the indicator 1 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,StartBars); //---- Create label to display in DataWindow PlotIndexSetString(0,PLOT_LABEL,"Sell"); //---- indicator symbol PlotIndexSetInteger(0,PLOT_ARROW,234); //---- indexing elements in the buffer as timeseries ArraySetAsSeries(SellBuffer,true); //---- set dynamic array as an indicator buffer SetIndexBuffer(1,BuyBuffer,INDICATOR_DATA); //---- shifting the start of drawing of the indicator 2 PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,StartBars); //---- Create label to display in DataWindow PlotIndexSetString(1,PLOT_LABEL,"Buy"); //---- indicator symbol PlotIndexSetInteger(1,PLOT_ARROW,233); //---- indexing elements in the buffer as timeseries ArraySetAsSeries(BuyBuffer,true); //---- Setting the format of accuracy of displaying the indicator IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- name for the data window and the label for sub-windows string short_name="Stochastic_Cross_Alert"; IndicatorSetString(INDICATOR_SHORTNAME,short_name); //---- } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //---- checking the number of bars to be enough for the calculation if(BarsCalculated(STO_Handle)<rates_total || rates_total<StartBars) return(0); //---- declarations of local variables int to_copy,limit,bar; double fastMAnow,slowMAnow,fastMAprevious,slowMAprevious; double Range,AvgRange,STOM[],STOS[],Bid,Ask; string sTimeCur,sAsk,sBid,sTimeHour,sTimeMinute,sPeriod; bool flagval1,flagval2; //---- calculations of the necessary amount of data to be copied //---- and the 'limit' starting index for the bars recalculation loop if(prev_calculated>rates_total || prev_calculated<=0)// checking for the first start of calculation of an indicator { to_copy=rates_total; // calculated number of all bars limit=rates_total-StartBars-1; // starting index for calculation of all bars flagval1_=false; flagval2_=false; } else { to_copy=rates_total-prev_calculated+2; // calculated number of new bars only limit=rates_total-prev_calculated; // starting index for calculation of new bars } //---- copy newly appeared data in the arrays if(CopyBuffer(STO_Handle,0,0,to_copy,STOM)<=0) return(0); if(CopyBuffer(STO_Handle,1,0,to_copy,STOS)<=0) return(0); //---- indexing elements in arrays as timeseries ArraySetAsSeries(STOM,true); ArraySetAsSeries(STOS,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(close,true); //---- restore values of the variables flagval1=flagval1_; flagval2=flagval2_; //---- main indicator calculation loop for(bar=limit; bar>0; bar--) { //---- store values of the variables before running at the current bar if(rates_total!=prev_calculated && bar==rates_total-1) { flagval1_ = flagval1; flagval2_ = flagval2; } AvgRange=0; for(int iii=bar; iii<bar+10; iii++) AvgRange+=MathAbs(high[iii]-low[iii]); Range=AvgRange/10; SellBuffer[bar]=0.0; BuyBuffer[bar]=0.0; fastMAnow=STOM[bar]; fastMAprevious=STOM[bar+1]; slowMAnow=STOS[bar]; slowMAprevious=STOS[bar+1]; if((show_KD_cross && fastMAnow>slowMAnow && fastMAprevious<slowMAprevious) || (show_K_OBOScross && fastMAnow>OverSoldLevel && fastMAprevious<OverSoldLevel) || (show_D_OBOScross && slowMAnow>OverSoldLevel && slowMAprevious<OverSoldLevel)) { if(bar==1 && !flagval1) { flagval1=true; flagval2=false; if(SoundON || EmailON) { Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); sTimeCur=TimeToString(TimeCurrent(),TIME_DATE); sAsk=DoubleToString(Ask,_Digits); sBid=DoubleToString(Bid,_Digits); MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); sTimeHour=IntegerToString(tm.hour); sTimeMinute=IntegerToString(tm.min); sPeriod=EnumToString(Period()); } if(SoundON) Alert("BUY signal at Ask=",sAsk,"\n Bid=",sBid,"\n Time=",sTimeCur," ",sTimeHour,":",sTimeMinute,"\n Symbol=",Symbol()," Period=",sPeriod); if(EmailON) SendMail("BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+sTimeCur+" "+sTimeHour+":"+sTimeMinute+" Symbol="+Symbol()+" Period="+sPeriod); } BuyBuffer[bar]=low[bar]-Range*0.5; SellBuffer[bar]=0.0; } else if((show_KD_cross && fastMAnow<slowMAnow && fastMAprevious>slowMAprevious) || (show_K_OBOScross && fastMAnow<OverBoughtLevel && fastMAprevious>OverBoughtLevel) || (show_D_OBOScross && slowMAnow<OverBoughtLevel && slowMAprevious>OverBoughtLevel)) { if(bar==1 && !flagval2) { flagval2=true; flagval1=false; if(SoundON || EmailON) { Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); sTimeCur=TimeToString(TimeCurrent(),TIME_DATE); sAsk=DoubleToString(Ask,_Digits); sBid=DoubleToString(Bid,_Digits); MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); sTimeHour=IntegerToString(tm.hour); sTimeMinute=IntegerToString(tm.min); sPeriod=EnumToString(Period()); } if(SoundON) Alert("SELL signal at Ask=",sAsk,"\n Bid=",sBid,"\n Date=",sTimeCur," ",sTimeHour,":",sTimeMinute,"\n Symbol=",Symbol()," Period=",sPeriod); if(EmailON) SendMail("SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+sTimeCur+" "+sTimeHour+":"+sTimeMinute+" Symbol="+Symbol()+" Period="+sPeriod); } SellBuffer[bar]=high[bar]+Range*0.5; BuyBuffer[bar]=0.0; } } SellBuffer[0]=0.0; BuyBuffer[0]=0.0; //---- return(rates_total); } //+------------------------------------------------------------------+
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Hello guys.
I´m looking for an Stochastic indicator with PUSH Alerts but the concept here is if the alerts were when the both lines are crossing at any moment and any level, not only at the 80 , 50 or 20 levels, I want the alert at any moment when the both lines are crossing.
Cheers.