float MACD(float signif, int factor, int sp, int lp, int empp, float cu_price, vector <struct historicalprices> prev_price, vector <struct price_entry> prices){ double dlp, dsp, ds; if (factor ==1){ unsigned int num_consid = period_consider(lp,signif); float formatted_price[num_consid-1]; set_to_zero(formatted_price); format_price_days(prev_price, formatted_price); dlp = EMA(lp, signif, cu_price, formatted_price); dsp = EMA(sp, signif, cu_price,formatted_price); dsp -=dlp; } }
// brute force optimization function run(){ set(PARAMETERS); int PeriodsEMA1[4] = { 5, 10, 15, 20 }; int PeriodsEMA2[3] = { 100, 150, 200 }; LookBack = 250; int Index = optimize(1,1,4*3,1) - 1; int PeriodEMA1 = PeriodsEMA1[Index%4]; int PeriodEMA2 = PeriodsEMA2[Index/4]; vars Price = series(price(0)); vars EMA1 = series(EMA(Price,PeriodEMA1)); vars EMA2 = series(EMA(Price,PeriodEMA2)); if(crossOver(EMA1,EMA2)) enterLong(); else if(crossUnder(EMA1,EMA2)) enterShort(); }
inline void MACD(int short_window, int long_window, int smooth_window, dvector &input, dvector &macd, dvector &macd_signal, dvector &macd_hist) { std::vector<double> short_emas; std::vector<double> long_emas; short_emas.reserve(input.size()); long_emas.reserve(input.size()); macd.reserve(input.size()); macd_signal.reserve(input.size()); macd_hist.reserve(input.size()); EMA(short_window,input,short_emas); EMA(long_window,input,long_emas); SUBTRACT(short_emas,long_emas,macd); EMA(smooth_window,macd,macd_signal); SUBTRACT(macd,macd_signal,macd_hist); }
var filter(var* Data,int Period) { return EMA(Data,2.0/(1+Period)); }