This is what is I am trying to achieve. I would like to run the program for 6 minutes, within the six minutes I would like to toggle for 2 minutes data operation and for 1 minute trade operation, so there will be 2 cycle of data operation and 2 cycle of trade operation.
I am setting and getting the ptime outside the main program, but what is happening is that the getPtime of the template class is always return the +2 minutes of the current time, that is why diff is never reducing less than 2 minutes, why is that happening, the setter have been instantiated only once.
I would really appreciate if someone can help me out.
// boost_example.cpp : Defines the entry point for the console application.
//
#include "boost/date_time/posix_time/posix_time.hpp"
#include <iostream>
#include <stdio.h>
#include <stdio.h>
#include "windows.h"
using namespace std;
template <typename ptime_type>
class timeManagement
{
private:
ptime_type tradingTime;
public:
timeManagement(){};
void setPtime (const ptime_type& _val){tradingTime = _val; }
ptime_type const& getPtime() {return (tradingTime);}
~timeManagement(){};
};
int main()
{
bool btradingIndicator = false;
std::ostringstream msg;
using namespace boost::posix_time;
const ptime start = second_clock::local_time();
time_duration td = minutes(6);
time_duration tdDataCollection = minutes(2);
time_duration tdTrading = minutes(1);
bool bTradingIndicator = false;
const ptime end = start + td;
const ptime tTimeWindow = start + tdDataCollection;
int i = 0;
int switchTime = 0;
timeManagement <ptime> tradingWindow;
tradingWindow.setPtime(tTimeWindow);
//std::cout << tradingWindow.getPtime() << std::endl;
while(second_clock::local_time() <= end){
ptime currentTime = second_clock::local_time();
time_duration diff = tradingWindow.getPtime() - currentTime;
if(diff.total_seconds() >= 0 && !bTradingIndicator){
std::cout << "Data.) " << currentTime << "|" << tradingWindow.getPtime() << "|" << diff << std::endl;
}else{
const ptime tTimeWindow1 = currentTime + tdTrading;
tradingWindow.setPtime(tTimeWindow1);
bTradingIndicator = true;
}
if(diff.total_seconds() >= 0 && bTradingIndicator){
std::cout << "Trade.) " << diff << std::endl;
}else{
const ptime tTimeWindow2 = currentTime + tdDataCollection;
tradingWindow.setPtime(tTimeWindow2);
bTradingIndicator = false;
}
}
std::cout << "Start Time: " << start << std::endl;
std::cout << "End Time: " << end << std::endl;
std::cout << "Time Now: "<< end << std::endl;
return 0;
}