Trader::Action Trader::technicalAnalysis() { if (_stockPrices.size() >= 26) { float macd = MACD(12, 26); _macd.push_back(MACD(12, 26)); std::stringstream log; log << "[MACD] " << macd; _logger->writeLog(log.str()); log.str(""); if (_stockPrices.size() > 35) { float signalLine = exponentialMovingAverage(9, _macd); log << "[Signal Line] " << signalLine; _logger->writeLog(log.str()); if (macd <= signalLine) return BUY; else if (macd >= signalLine) return SELL; else return WAIT; } return WAIT; } return WAIT; }
#define MACD(N) MY_DEFAULT_MAC_BYTE ## N // Application-dependent structure used to contain IP address information APP_CONFIG AppConfig ={ {BUILD_MYDEFAULT32(IP_ADDR_)}, {BUILD_MYDEFAULT32(MASK_)}, {BUILD_MYDEFAULT32(GATE_)}, {BUILD_MYDEFAULT32(PRIMARY_DNS_)}, {BUILD_MYDEFAULT32(SECONDARY_DNS_)}, {BUILD_MYDEFAULT32(IP_ADDR_)}, {BUILD_MYDEFAULT32(MASK_)}, MY_DEFAULT_HOST_NAME, {1, 1}, // Flags { {MACD(1), MACD(2), MACD(3), MACD(4), MACD(5), MACD(6)}} }; // Declare AppConfig structure and some other supporting stack variables //APP_CONFIG AppConfig; static unsigned short wOriginalAppConfigChecksum; // Checksum of the ROM defaults for AppConfig BYTE AN0String[8]; #if (MY_DEFAULT_NETWORK_TYPE == WF_SOFT_AP) UINT8 g_scan_done = 0; // WF_PRESCAN This will be set wheneven event scan results are ready. UINT8 g_prescan_waiting = 1; // WF_PRESCAN This is used only to allow POR prescan once. #endif // Private helper functions.
Indicator HKU_API MACD(const Indicator& data, int n1, int n2, int n3) { return MACD(n1, n2, n3)(data); }