//+------------------------------------------------------------------+ //| SignalTrade.mqh | //| Sergey Greecie | //| sergey1294@list.ru | //+------------------------------------------------------------------+ #property copyright "Sergey Greecie" #property link "sergey1294@list.ru" //+------------------------------------------------------------------+ //| Declare variables for storing the settings of indicators | //+------------------------------------------------------------------+ //--- input parameters Moving Average int periodma1=8; int periodma2=16; ENUM_MA_METHOD MAmethod=MODE_SMA; ENUM_APPLIED_PRICE MAprice=PRICE_CLOSE; //--- input parameters MACD int FastMACD=12; int SlowMACD=26; int MACDSMA=9; ENUM_APPLIED_PRICE MACDprice=PRICE_CLOSE; //--- input parameters Price Channel int PCPeriod=22; //--- input parameters Adaptive Channel ADX int ADXPeriod=14; //--- input parameters Stochastic Oscillator int SOPeriodK=5; int SOPeriodD=3; int SOslowing=3; ENUM_MA_METHOD SOmethod=MODE_SMA; ENUM_STO_PRICE SOpricefield=STO_LOWHIGH; //--- input parameters RSI int RSIPeriod=14; ENUM_APPLIED_PRICE RSIprice=PRICE_CLOSE; //--- input parameters CCI int CCIPeriod=14; ENUM_APPLIED_PRICE CCIprice=PRICE_TYPICAL; //--- input parameters WPR int WPRPeriod=14; //--- input parameters Bollinger Bands int BBPeriod=20; double BBdeviation=2.0; ENUM_APPLIED_PRICE BBprice=PRICE_CLOSE; //--- input parameters Standard Deviation Channel int SDCPeriod=14; double SDCdeviation=2.0; ENUM_APPLIED_PRICE SDCprice=PRICE_CLOSE; ENUM_MA_METHOD SDCmethod=MODE_SMA; //--- input parameters Price Channel 2 int PC2Period=22; //--- input parameters Envelopes int ENVPeriod=14; double ENVdeviation=0.1; ENUM_APPLIED_PRICE ENVprice=PRICE_CLOSE; ENUM_MA_METHOD ENVmethod=MODE_SMA; //--- input parameters Donchian Channels int DCPeriod=24; int DCExtremes=3; int DCMargins=-2; //--- input parameters Silver-channels int SCPeriod=26; double SCSilvCh=38.2; double SCSkyCh=23.6; double SCFutCh=61.8; //--- input parameters NRTR int NRTRPeriod = 40; double NRTRK = 2.0; //--- input parameters Alligator int ALjawperiod=13; int ALteethperiod=8; int ALlipsperiod=5; ENUM_MA_METHOD ALmethod=MODE_SMMA; ENUM_APPLIED_PRICE ALprice=PRICE_MEDIAN; //--- input parameters AMA int AMAperiod=9; int AMAfastperiod=2; int AMAslowperiod=30; ENUM_APPLIED_PRICE AMAprice=PRICE_CLOSE; //--- input parameters Ichimoku Kinko Hyo int IKHtenkansen=9; int IKHkijunsen=26; int IKHsenkouspanb=52; //+------------------------------------------------------------------+ //| Declare variables for storing the handles of indicators | //+------------------------------------------------------------------+ int h_ma1 = INVALID_HANDLE; int h_ma2 = INVALID_HANDLE; int h_macd = INVALID_HANDLE; int h_pc = INVALID_HANDLE; int h_pc2 = INVALID_HANDLE; int h_acadx = INVALID_HANDLE; int h_stoh = INVALID_HANDLE; int h_rsi = INVALID_HANDLE; int h_cci = INVALID_HANDLE; int h_wpr = INVALID_HANDLE; int h_bb = INVALID_HANDLE; int h_sdc = INVALID_HANDLE; int h_env = INVALID_HANDLE; int h_dc = INVALID_HANDLE; int h_sc = INVALID_HANDLE; int h_gc = INVALID_HANDLE; int h_nrtr = INVALID_HANDLE; int h_al = INVALID_HANDLE; int h_ama = INVALID_HANDLE; int h_ao = INVALID_HANDLE; int h_ich = INVALID_HANDLE; //+------------------------------------------------------------------+ //| Declare necessary arrays for storing data of indicators | //+------------------------------------------------------------------+ double ma1_buffer[]; double ma2_buffer[]; double macd1_buffer[]; double macd2_buffer[]; double pc1_buffer[]; double pc2_buffer[]; double pc1_buffer2[]; double pc2_buffer2[]; double acadx1_buffer[]; double acadx2_buffer[]; double stoh_buffer[]; double rsi_buffer[]; double cci_buffer[]; double wpr_buffer[]; double bb1_buffer[]; double bb2_buffer[]; double sdc1_buffer[]; double sdc2_buffer[]; double env1_buffer[]; double env2_buffer[]; double dc1_buffer[]; double dc2_buffer[]; double sc1_buffer[]; double sc2_buffer[]; double gc1_buffer[]; double gc2_buffer[]; double nrtr1_buffer[]; double nrtr2_buffer[]; double al1_buffer[]; double al2_buffer[]; double al3_buffer[]; double ama_buffer[]; double ao_buffer[]; double ich1_buffer[]; double ich2_buffer[]; double Close[]; //+------------------------------------------------------------------+ //| functions for forming signals | //| 0 - no signal | //| 1 - signal to buy | //| -1 - signal to sell | //+------------------------------------------------------------------+ int TradeSignal_01() { //--- zero means absence of a signal int sig=0; //--- check handles of indicators if(h_ma1==INVALID_HANDLE)//--- if the handle is invalid { //--- create it again h_ma1=iMA(Symbol(),Period(),periodma1,0,MAmethod,MAprice); //--- exit from the function return(0); } else //--- if the handle is valid { //--- copy the values of indicator to the array if(CopyBuffer(h_ma1,0,0,3,ma1_buffer)<3) //--- and if the data is less than necessary //--- exit from the function return(0); //--- set indexing in the array as in a timeseries if(!ArraySetAsSeries(ma1_buffer,true)) //--- in case of an indexation error exit from the function return(0); } if(h_ma2==INVALID_HANDLE)//--- if the handle is invalid { //--- create it again h_ma2=iMA(Symbol(),Period(),periodma2,0,MAmethod,MAprice); //--- exit from the function return(0); } else //--- if the handle is valid { //--- copy the values of indicator to the array if(CopyBuffer(h_ma2,0,0,2,ma2_buffer)<2) //--- and if the data is less than necessary //--- exit from the function return(0); //--- set indexing in the array as in a timeseries if(!ArraySetAsSeries(ma1_buffer,true)) //--- in case of an indexation error exit from the function return(0); } //--- perform checking of the condition and set the value for sig if(ma1_buffer[2]ma2_buffer[1]) sig=1; else if(ma1_buffer[2]>ma2_buffer[1] && ma1_buffer[1]macd1_buffer[1] && macd2_buffer[1]macd1_buffer[1]) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_03() { int sig=0; if(h_pc==INVALID_HANDLE) { h_pc=iCustom(Symbol(),Period(),"Price Channel",PCPeriod); return(0); } else { if(CopyBuffer(h_pc,0,0,3,pc1_buffer)<3) return(0); if(CopyBuffer(h_pc,1,0,3,pc2_buffer)<3) return(0); if(CopyClose(Symbol(),Period(),0,2,Close)<2) return(0); if(!ArraySetAsSeries(pc1_buffer,true)) return(0); if(!ArraySetAsSeries(pc2_buffer,true)) return(0); if(!ArraySetAsSeries(Close,true)) return(0); } //--- perform checking of the condition and set the value for sig if(Close[1]>pc1_buffer[2]) sig=1; else if(Close[1]acadx1_buffer[1]) sig=1; else if(Close[1]20) sig=1; else if(stoh_buffer[2]>80 && stoh_buffer[1]<80) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_06() { int sig=0; if(h_rsi==INVALID_HANDLE) { h_rsi=iRSI(Symbol(),Period(),RSIPeriod,RSIprice); return(0); } else { if(CopyBuffer(h_rsi,0,0,3,rsi_buffer)<3) return(0); if(!ArraySetAsSeries(rsi_buffer,true)) return(0); } //--- perform checking of the condition and set the value for sig if(rsi_buffer[2]<30 && rsi_buffer[1]>30) sig=1; else if(rsi_buffer[2]>70 && rsi_buffer[1]<70) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_07() { int sig=0; if(h_cci==INVALID_HANDLE) { h_cci=iCCI(Symbol(),Period(),CCIPeriod,CCIprice); return(0); } else { if(CopyBuffer(h_cci,0,0,3,cci_buffer)<3) return(0); if(!ArraySetAsSeries(cci_buffer,true)) return(0); } //--- perform checking of the condition and set the value for sig if(cci_buffer[2]<-100 && cci_buffer[1]>-100) sig=1; else if(cci_buffer[2]>100 && cci_buffer[1]<100) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_08() { int sig=0; if(h_wpr==INVALID_HANDLE) { h_wpr=iWPR(Symbol(),Period(),WPRPeriod); return(0); } else { if(CopyBuffer(h_wpr,0,0,3,wpr_buffer)<3) return(0); if(!ArraySetAsSeries(wpr_buffer,true)) return(0); } //--- perform checking of the condition and set the value for sig if(wpr_buffer[2]<-80 && wpr_buffer[1]>-80) sig=1; else if(wpr_buffer[2]>-20 && wpr_buffer[1]<-20) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_09() { int sig=0; if(h_bb==INVALID_HANDLE) { h_bb=iBands(Symbol(),Period(),BBPeriod,0,BBdeviation,BBprice); return(0); } else { if(CopyBuffer(h_bb,1,0,2,bb1_buffer)<2) return(0); if(CopyBuffer(h_bb,2,0,2,bb2_buffer)<2) return(0); if(CopyClose(Symbol(),Period(),0,3,Close)<3) return(0); if(!ArraySetAsSeries(bb1_buffer,true)) return(0); if(!ArraySetAsSeries(bb2_buffer,true)) return(0); if(!ArraySetAsSeries(Close,true)) return(0); } //--- perform checking of the condition and set the value for sig if(Close[2]<=bb2_buffer[1] && Close[1]>bb2_buffer[1]) sig=1; else if(Close[2]>=bb1_buffer[1] && Close[1]sdc2_buffer[1]) sig=1; else if(Close[2]>=sdc1_buffer[1] && Close[1]pc2_buffer2[2] && Close[2]<=pc2_buffer2[3]) sig=1; else if(Close[1]=pc1_buffer2[3]) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_12() { int sig=0; if(h_env==INVALID_HANDLE) { h_env=iEnvelopes(Symbol(),Period(),ENVPeriod,0,ENVmethod,ENVprice,ENVdeviation); return(0); } else { if(CopyBuffer(h_env,0,0,2,env1_buffer)<2) return(0); if(CopyBuffer(h_env,1,0,2,env2_buffer)<2) return(0); if(CopyClose(Symbol(),Period(),0,3,Close)<3) return(0); if(!ArraySetAsSeries(env1_buffer,true)) return(0); if(!ArraySetAsSeries(env2_buffer,true)) return(0); if(!ArraySetAsSeries(Close,true)) return(0); } //--- perform checking of the condition and set the value for sig if(Close[2]<=env2_buffer[1] && Close[1]>env2_buffer[1]) sig=1; else if(Close[2]>=env1_buffer[1] && Close[1]dc1_buffer[2]) sig=1; else if(Close[1]sc1_buffer[1]) sig=1; else if(Close[2]>sc2_buffer[1] && Close[1]gc1_buffer[2]) sig=1; else if(Close[1]0) sig=1; else if(nrtr2_buffer[1]>0) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_17() { int sig=0; if(h_al==INVALID_HANDLE) { h_al=iAlligator(Symbol(),Period(),ALjawperiod,0,ALteethperiod,0,ALlipsperiod,0,ALmethod,ALprice); return(0); } else { if(CopyBuffer(h_al,0,0,2,al1_buffer)<2) return(0); if(CopyBuffer(h_al,1,0,2,al2_buffer)<2) return(0); if(CopyBuffer(h_al,2,0,2,al3_buffer)<2) return(0); if(!ArraySetAsSeries(al1_buffer,true)) return(0); if(!ArraySetAsSeries(al2_buffer,true)) return(0); if(!ArraySetAsSeries(al3_buffer,true)) return(0); } //--- perform checking of the condition and set the value for sig if(al3_buffer[1]>al2_buffer[1] && al2_buffer[1]>al1_buffer[1]) sig=1; else if(al3_buffer[1]ama_buffer[1]) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_19() { int sig=0; if(h_ao==INVALID_HANDLE) { h_ao=iAO(Symbol(),Period()); return(0); } else { if(CopyBuffer(h_ao,1,0,20,ao_buffer)<20) return(0); if(!ArraySetAsSeries(ao_buffer,true)) return(0); } //--- perform checking of the condition and set the value for sig if(ao_buffer[1]==0) sig=1; else if(ao_buffer[1]==1) sig=-1; else sig=0; //--- return the trade signal return(sig); } //+------------------------------------------------------------------+ int TradeSignal_20() { int sig=0; if(h_ich==INVALID_HANDLE) { h_ich=iIchimoku(Symbol(),Period(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb); return(0); } else { if(CopyBuffer(h_ich,0,0,2,ich1_buffer)<2) return(0); if(CopyBuffer(h_ich,1,0,2,ich2_buffer)<2) return(0); if(!ArraySetAsSeries(ich1_buffer,true)) return(0); if(!ArraySetAsSeries(ich2_buffer,true)) return(0); } //--- perform checking of the condition and set the value for sig if(ich1_buffer[1]>ich2_buffer[1]) sig=1; else if(ich1_buffer[1]