//+------------------------------------------------------------------+ //| filters.mqh | //| Rafael Morgado Silva | //| | //+------------------------------------------------------------------+ enum FILTER_TYPES { FTNone,//Nenhum FTLiq,//Liquidez mínima FTPre,//Preço mínimo FTRent,//Rentabilidade positiva FTHiVol,//Volatilidade alta FTLowVol,//Volatilidade baixa FTCross//Cruzamento de média }; class Filters { public: string symbol; FILTER_TYPES myfilter; double FTPreMin,FTLiqFrac; int FTPeriod;//,FTVolPAtr1,FTVolPAtr2; ENUM_TIMEFRAMES FTTimeframe; string FTLiqSymbolref; Filters(void) { myfilter=FTNone; symbol=Symbol(); FTPreMin=4; FTLiqFrac=0.95; FTPeriod=30; FTTimeframe=PERIOD_D1; FTLiqSymbolref="IBOV"; } void operator=(const Filters &r) { myfilter=r.myfilter; symbol=r.symbol; FTPreMin=r.FTPreMin; FTLiqFrac=r.FTLiqFrac; FTPeriod=r.FTPeriod; FTTimeframe=r.FTTimeframe; FTLiqSymbolref=r.FTLiqSymbolref; } bool Filter(ENUM_OP_TYPES OpType) { bool ret=false;//false=nofilter;true=block switch(myfilter) { case FTNone:break; case FTLiq://liquidez relativa ao ibov { if (Bars(symbol,FTTimeframe,TimeLocal()-FTPeriod*24*3600,TimeLocal())< FTLiqFrac*Bars(FTLiqSymbolref,FTTimeframe,TimeLocal()-FTPeriod*24*3600,TimeLocal())) return (true); break; } case FTPre: { MqlRates rt[]; if(CopyRates(symbol,PERIOD_D1,0,1,rt)==1) if (rt[0].closeAtr(symbol,55,FTTimeframe)) return(true);//Alta volatilidade break; } case FTLowVol://filtra baixa volatilidade { if(Atr(symbol,13,FTTimeframe)=Avg100)) return(true); break; } } return(ret); } };