Esempio n. 1
0
class get_idea_trade():

    def __init__(self):
        self.user = sys.argv[1]
        self.password = sys.argv[2]
        self.timeframe = sys.argv[3]
        self.base_url = "%simportant" %(url)
	self.test_page = test_page
	self.test_page_cont = None
        self.art_data = {}
	self.instruments_dict = {}
	self.trades = {}
	self.all_trade_ideas = {}
	self.db = MySQL()

    def import_instruments(self):
	'''
	Importing list of indtrument from instruments.yaml file
	'''
	try:
	    with open(instruments, 'r') as f:
		self.instruments_dict = yaml.load(f)
	    log.print_green('Instruments imported!')
	except:
	    log.print_error('Instruments import failed')

    def check_page(self):
	'''
	Main function which is called every time.
	It's some kind of start process function.
	'''
        with requests.Session() as c:
            self.main_page = c.get(self.base_url, headers={"User-Agent": useragent})
            self.do_soup(self.main_page, "article")

    def do_article(self, art):
	'''
	check articles from /important page and find keywords from trade_word
	'''
        for trade_list in trade_word.values():
	    for trade in trade_list:
                try:
                    assert trade in art.text.lower()
                    self.art_data["action"] = self.get_action(trade)
                    self.login(art.contents[5].find_all("a")[0].get("href"))
                except AssertionError:
                    pass

    def login(self, link):
	'''
	Login function. This function use detailes passed into tadebeat.py
	'''
        with requests.Session() as l:
            l.get(url+"user")
            self.phpid= l.cookies["PHPSESSID"]  #save token
            self.login_data = {"PHPSESSID": self.phpid, #create login dictionary with details
                               "T[_U]": self.user,
                               "T[_P]": self.password,
                               "T[_A]":0, "T[_A]":1,
                               "Action[login]":1, "T[_B]":''}
            l.post(url+"user", data=self.login_data, headers={"Referer": url+"user"}) # send post request to login page
            page = l.get(url+link[1:]) # send get request to article page
	    self.check_artid(page, {"class": "news urgent"}) # pass page content for checking process

    def update_database(self, what, onwhat, artID):
	self._result = self.db.update(what, onwhat, artID)
	if self._result:
	    log.print_green(what, onwhat, artID, ' Update OK!')
	else:
	    return

    def ask_database(self, what, artID):
	self._result = self.db.select(what, artID)
	if self._result:
	    for data in self._result:
		self._result_dict = yaml.load(data)
	    return self._result_dict
	else:
	    log.print_warning('Nothing found!')
	    return 0

    def check_artid(self, page, option):
	self.soup = BeautifulSoup(page.content, "lxml")
	self.art = self.soup.find('article', option)
	if not self.art: return
	if self.ask_database('time', self.art.get("id")):
	    #log.print_green('Found something with has same articleID in database already...')
	    self.check_timestamp(self.art.get("id"), self.art) #  checking if article is an update, or old one
	    return
	else:
	    log.print_warning('Found something new!')
	    self.do_soup(page, option)

    def check_timestamp(self, artID, content):
	'''
	compare timestamp of last entry in time key
	'''
	#log.print_green('I am going to compare timestamps')
	#self._old_time = self.all_trade_ideas.get(artID).get('time')[len(self.all_trade_ideas.get(artID).get('time'))]
	self._old_time = self.ask_database('time', artID)
	#print artID
	#print self._old_time
	#print len(self._old_time)
	#self._old_time = self._old_time.values()
	self._new_time = content.find("time").get("datetime")
	if self._new_time in self._old_time.values():
	    print('No updates')
	    return
	else:
	    log.print_green('Update of article has been detected!')
	    return self.do_update(self._new_time, artID)

    def do_soup(self, page, option):
        self.soup = BeautifulSoup(page.content, "lxml")
        if option == "article":
            for art in self.soup.find_all(option):
                self.do_article(art)
        else:
            self.art = self.soup.find('article', option)
	    self.do_collect_info(self.art, page.url.encode('ascii', 'ignore'))

    def do_collect_info(self, art, pageurl):
	#self.save_to_yaml('page', str(art))
        self._art_data = {} #internal variable to hold article data	
	log.print_green("Let's start with ", art.find("h1").text.lower())
	self._art_data = tradeClass()
	self._art_data.title = art.find("h1").text.lower().encode('ascii', 'ignore')
	self._art_data.add_time(art.find("time").get("datetime"))
	self._art_data.ID = art.get("id")
	self._art_data.page_adr = pageurl
	self._art_data.instrument = self.check_instrument(self._art_data.title)
	for p in art.find('div').find_all('p'): #.text.encode('ascii', 'ignore')
	    self._art_data.description += p.text.encode('ascii', 'ignore')
	log.print_warning('###### description ##### ', self._art_data.description, self._art_data.ID)
        self.find_tp_sl(self._art_data.description) # find take profit and sl values
	self._art_data.author = art.find('section', {'class' : 'autor'}).find('div', {'class' : 'about'}).find('h1').text.encode('ascii', 'ignore')
	#self._art_data.add_trade(self.art_data['action'], self._art_data.takestop)
	#log.print_warning(art.find('div').find('p').text.encode('ascii', 'ignore'))
	self._art_data.do_all_data()
	print 'take stop', self._art_data.takestop
	self.do_trade(self._art_data.takestop)
	if self._art_data.trade and (self._art_data.instrument != 'not found') : self.place_order(self._art_data.all_data, len(self._art_data.trade))
	#log.print_warning('trade: ', self._art_data.trade)
	#log.print_warning('len: ', len(self._art_data.trade))
	self._art_data.do_all_data()
	self.trades.update({self._art_data.ID : self._art_data.all_data})
	#self.save_to_yaml(self._art_data.ID, self._art_data.all_data)
	#self.save_to_yaml_all(self.trades)
	self.db.insert(self._art_data.all_data) #insert all data to database
	self.trades = {}
	return

    def do_trade(self, value):
	log.print_green('Do trade with value: ', value)
	try:
    	    for i in range(0,max(len(value.get('SL')), len(value.get('TP')))):
    	        try:
		    self._temp = {}
            	    self._temp.update({'SL' : value.get('SL', '0')[0], 'TP': value.get('TP', '0')[i]})
            	    log.print_green('temp1: ', self._temp)
		    self._art_data.add_trade(self.art_data['action'], self._temp)
    	    	except IndexError:
		    self._temp = {}
		    log.print_green('temp2: ', self._temp)
        	    self._temp.update({'SL' : value.get('SL', '0')[i], 'TP': value.get('TP', '0')[0]})
		    self._art_data.add_trade(self.art_data['action'], self._temp)
	except TypeError:
	    self._art_data.trade = ''
	    

    def check_instrument(self, title):
	log.print_green('checking instruments...')
	for i in self.instruments_dict.keys():
	    if i.lower() in title.lower():
		log.print_green('Found: ', i.lower())
		return i.lower()
	return 'not found'


    def find_tp_sl(self, info):
	log.print_green('finding TP and SL...')
	for action in trade_action.keys():
	    for t in trade_action.get(action):
		try:
		    if t in info.lower():
			self._tmp = self.find_digits(t, info.lower())
			self._art_data.add_takestop(action, self._tmp)
		except ValueError:
		    pass
	log.print_green('takestop: ', self._art_data.takestop)

    def do_update(self, new_time, artID):
	'''
	do update for article
	'''
	log.print_green("Let's check what has been updated")
	self._old_time = self.ask_database('time', artID)
	self._tmp = self._old_time
	print 'przed: ', self._tmp
	self._tmp2 = '{}'.format(len(self._old_time)+1)
	print 'tmp2: ', self._tmp2
	self._tmp.update({self._tmp2 : new_time})
	print 'po: ', self._tmp
	self.update_database('time', self._tmp, artID)
	return

    def get_action(self, action):
	'''
	get action like, buy or sell
	'''
	for t in trade_word.keys():
	    if action in trade_word.get(t):
		return t

    def find_digits(self, what, where):
	self._result = 0
	self._compile = "{}.[0-9\s.,]+".format(what)
	try:
	    self._result = re.findall(self._compile, where)[0]
	    self._result = self._result.split(':')[1]
	    self._result = self._result.split(', ')
	    for i in range(0, len(self._result)):
		self._result[i] = self._result[i].replace(' ', '')
		self._result[i] = self._result[i].replace(',', '.')
	    return self._result
	except IndexError:
	    return ['0']


    def save_to_yaml_all(self, data):
        self._time = time.ctime().split(' ')
	self._time.remove('')
        self._dir_name = "./%s-%s/" % (self._time[2], self._time[1])
        self._file_name = 'all_trade_ideas.yaml'
        try:
            with open(self._file_name, "ab") as f:
                yaml.dump(data, f)
		log.print_green('All data has been saved to: ', self._file_name)
        except IOError:
	    log.print_error('Error during saving: ', self._file_name)

    def save_to_yaml(self, fname,data):
        self._time = time.ctime().split(' ')
	self._time.remove('')
        self._dir_name = "./%s-%s/" % (self._time[2], self._time[1])
        self._file_name = self._dir_name + fname + '.yaml'
        try:
            with open(self._file_name, "ab") as f:
                yaml.dump(data, f)
        except IOError:
            os.makedirs(self._dir_name)
            with open(self._file_name, "ab") as f:
                yaml.dump(data, f)

    def place_order(self, data, i):
	'''
	Funtion to place an order with ST and TP parameters
	'''
	log.print_green('Placing an order...')
	print data
	try:
	    self._instr = self.instruments_dict.get(data.get('instrument').upper())[0].get('instrument')
	    self._unit = self.instruments_dict.get(data.get('instrument').upper())[3].get('tradeUnit')
	    for x in range(1,(i+1)):
	        self._action = data.get('trade')[x].keys()[0]
		if not data.get('trade')[x][self._action]['TP']:
		    self._tp = 0
		else:
    	    	    self._tp = data.get('trade')[x][self._action]['TP'] 
    	    	self._sl = data.get('trade')[x][self._action]['SL']
	    	log.print_warning(self._instr, self._unit, self._action, self._tp, self._sl)
	    	self.ordr = order.MyOanda(self._instr, self._unit, self._action, self._sl, self._tp)
	    	try:
	    	    self._art_data.add_oanda(self.ordr.create_order())
	    	except OandaError:
	    	    log.print_error('Placing a order failed')
	    return
	except AttributeError, TypeError:
	    log.print_error('AttributeError, data NoneType')
	    return
Esempio n. 2
0
class get_idea_trade():
    def __init__(self):
        self.user = sys.argv[1]
        self.password = sys.argv[2]
        self.timeframe = sys.argv[3]
        self.base_url = "%simportant" % (url)
        self.test_page = test_page
        self.test_page_cont = None
        self.art_data = {}
        self.instruments_dict = {}
        self.trades = {}
        self.all_trade_ideas = {}
        self.db = MySQL()

    def import_instruments(self):
        '''
	Importing list of indtrument from instruments.yaml file
	'''
        try:
            with open(instruments, 'r') as f:
                self.instruments_dict = yaml.load(f)
            log.print_green('Instruments imported!')
        except:
            log.print_error('Instruments import failed')

    def check_page(self):
        '''
	Main function which is called every time.
	It's some kind of start process function.
	'''
        with requests.Session() as c:
            self.main_page = c.get(self.base_url,
                                   headers={"User-Agent": useragent})
            self.do_soup(self.main_page, "article")

    def do_article(self, art):
        '''
	check articles from /important page and find keywords from trade_word
	'''
        for trade_list in trade_word.values():
            for trade in trade_list:
                try:
                    assert trade in art.text.lower()
                    self.art_data["action"] = self.get_action(trade)
                    self.login(art.contents[5].find_all("a")[0].get("href"))
                except AssertionError:
                    pass

    def login(self, link):
        '''
	Login function. This function use detailes passed into tadebeat.py
	'''
        with requests.Session() as l:
            l.get(url + "user")
            self.phpid = l.cookies["PHPSESSID"]  #save token
            self.login_data = {
                "PHPSESSID": self.phpid,  #create login dictionary with details
                "T[_U]": self.user,
                "T[_P]": self.password,
                "T[_A]": 0,
                "T[_A]": 1,
                "Action[login]": 1,
                "T[_B]": ''
            }
            l.post(url + "user",
                   data=self.login_data,
                   headers={"Referer":
                            url + "user"})  # send post request to login page
            page = l.get(url + link[1:])  # send get request to article page
            self.check_artid(page,
                             {"class": "news urgent"
                              })  # pass page content for checking process

    def update_database(self, what, onwhat, artID):
        self._result = self.db.update(what, onwhat, artID)
        if self._result:
            log.print_green(what, onwhat, artID, ' Update OK!')
        else:
            return

    def ask_database(self, what, artID):
        self._result = self.db.select(what, artID)
        if self._result:
            for data in self._result:
                self._result_dict = yaml.load(data)
            return self._result_dict
        else:
            log.print_warning('Nothing found!')
            return 0

    def check_artid(self, page, option):
        self.soup = BeautifulSoup(page.content, "lxml")
        self.art = self.soup.find('article', option)
        if not self.art: return
        if self.ask_database('time', self.art.get("id")):
            #log.print_green('Found something with has same articleID in database already...')
            self.check_timestamp(
                self.art.get("id"),
                self.art)  #  checking if article is an update, or old one
            return
        else:
            log.print_warning('Found something new!')
            self.do_soup(page, option)

    def check_timestamp(self, artID, content):
        '''
	compare timestamp of last entry in time key
	'''
        #log.print_green('I am going to compare timestamps')
        #self._old_time = self.all_trade_ideas.get(artID).get('time')[len(self.all_trade_ideas.get(artID).get('time'))]
        self._old_time = self.ask_database('time', artID)
        #print artID
        #print self._old_time
        #print len(self._old_time)
        #self._old_time = self._old_time.values()
        self._new_time = content.find("time").get("datetime")
        if self._new_time in self._old_time.values():
            print('No updates')
            return
        else:
            log.print_green('Update of article has been detected!')
            return self.do_update(self._new_time, artID)

    def do_soup(self, page, option):
        self.soup = BeautifulSoup(page.content, "lxml")
        if option == "article":
            for art in self.soup.find_all(option):
                self.do_article(art)
        else:
            self.art = self.soup.find('article', option)
            self.do_collect_info(self.art, page.url.encode('ascii', 'ignore'))

    def do_collect_info(self, art, pageurl):
        #self.save_to_yaml('page', str(art))
        self._art_data = {}  #internal variable to hold article data
        log.print_green("Let's start with ", art.find("h1").text.lower())
        self._art_data = tradeClass()
        self._art_data.title = art.find("h1").text.lower().encode(
            'ascii', 'ignore')
        self._art_data.add_time(art.find("time").get("datetime"))
        self._art_data.ID = art.get("id")
        self._art_data.page_adr = pageurl
        self._art_data.instrument = self.check_instrument(self._art_data.title)
        for p in art.find('div').find_all(
                'p'):  #.text.encode('ascii', 'ignore')
            self._art_data.description += p.text.encode('ascii', 'ignore')
        log.print_warning('###### description ##### ',
                          self._art_data.description, self._art_data.ID)
        self.find_tp_sl(
            self._art_data.description)  # find take profit and sl values
        self._art_data.author = art.find('section', {
            'class': 'autor'
        }).find('div', {
            'class': 'about'
        }).find('h1').text.encode('ascii', 'ignore')
        #self._art_data.add_trade(self.art_data['action'], self._art_data.takestop)
        #log.print_warning(art.find('div').find('p').text.encode('ascii', 'ignore'))
        self._art_data.do_all_data()
        print 'take stop', self._art_data.takestop
        self.do_trade(self._art_data.takestop)
        if self._art_data.trade and (self._art_data.instrument != 'not found'):
            self.place_order(self._art_data.all_data,
                             len(self._art_data.trade))
        #log.print_warning('trade: ', self._art_data.trade)
        #log.print_warning('len: ', len(self._art_data.trade))
        self._art_data.do_all_data()
        self.trades.update({self._art_data.ID: self._art_data.all_data})
        #self.save_to_yaml(self._art_data.ID, self._art_data.all_data)
        #self.save_to_yaml_all(self.trades)
        self.db.insert(self._art_data.all_data)  #insert all data to database
        self.trades = {}
        return

    def do_trade(self, value):
        log.print_green('Do trade with value: ', value)
        try:
            for i in range(0, max(len(value.get('SL')), len(value.get('TP')))):
                try:
                    self._temp = {}
                    self._temp.update({
                        'SL': value.get('SL', '0')[0],
                        'TP': value.get('TP', '0')[i]
                    })
                    log.print_green('temp1: ', self._temp)
                    self._art_data.add_trade(self.art_data['action'],
                                             self._temp)
                except IndexError:
                    self._temp = {}
                    log.print_green('temp2: ', self._temp)
                    self._temp.update({
                        'SL': value.get('SL', '0')[i],
                        'TP': value.get('TP', '0')[0]
                    })
                    self._art_data.add_trade(self.art_data['action'],
                                             self._temp)
        except TypeError:
            self._art_data.trade = ''

    def check_instrument(self, title):
        log.print_green('checking instruments...')
        for i in self.instruments_dict.keys():
            if i.lower() in title.lower():
                log.print_green('Found: ', i.lower())
                return i.lower()
        return 'not found'

    def find_tp_sl(self, info):
        log.print_green('finding TP and SL...')
        for action in trade_action.keys():
            for t in trade_action.get(action):
                try:
                    if t in info.lower():
                        self._tmp = self.find_digits(t, info.lower())
                        self._art_data.add_takestop(action, self._tmp)
                except ValueError:
                    pass
        log.print_green('takestop: ', self._art_data.takestop)

    def do_update(self, new_time, artID):
        '''
	do update for article
	'''
        log.print_green("Let's check what has been updated")
        self._old_time = self.ask_database('time', artID)
        self._tmp = self._old_time
        print 'przed: ', self._tmp
        self._tmp2 = '{}'.format(len(self._old_time) + 1)
        print 'tmp2: ', self._tmp2
        self._tmp.update({self._tmp2: new_time})
        print 'po: ', self._tmp
        self.update_database('time', self._tmp, artID)
        return

    def get_action(self, action):
        '''
	get action like, buy or sell
	'''
        for t in trade_word.keys():
            if action in trade_word.get(t):
                return t

    def find_digits(self, what, where):
        self._result = 0
        self._compile = "{}.[0-9\s.,]+".format(what)
        try:
            self._result = re.findall(self._compile, where)[0]
            self._result = self._result.split(':')[1]
            self._result = self._result.split(', ')
            for i in range(0, len(self._result)):
                self._result[i] = self._result[i].replace(' ', '')
                self._result[i] = self._result[i].replace(',', '.')
            return self._result
        except IndexError:
            return ['0']

    def save_to_yaml_all(self, data):
        self._time = time.ctime().split(' ')
        self._time.remove('')
        self._dir_name = "./%s-%s/" % (self._time[2], self._time[1])
        self._file_name = 'all_trade_ideas.yaml'
        try:
            with open(self._file_name, "ab") as f:
                yaml.dump(data, f)
                log.print_green('All data has been saved to: ',
                                self._file_name)
        except IOError:
            log.print_error('Error during saving: ', self._file_name)

    def save_to_yaml(self, fname, data):
        self._time = time.ctime().split(' ')
        self._time.remove('')
        self._dir_name = "./%s-%s/" % (self._time[2], self._time[1])
        self._file_name = self._dir_name + fname + '.yaml'
        try:
            with open(self._file_name, "ab") as f:
                yaml.dump(data, f)
        except IOError:
            os.makedirs(self._dir_name)
            with open(self._file_name, "ab") as f:
                yaml.dump(data, f)

    def place_order(self, data, i):
        '''
	Funtion to place an order with ST and TP parameters
	'''
        log.print_green('Placing an order...')
        print data
        try:
            self._instr = self.instruments_dict.get(
                data.get('instrument').upper())[0].get('instrument')
            self._unit = self.instruments_dict.get(
                data.get('instrument').upper())[3].get('tradeUnit')
            for x in range(1, (i + 1)):
                self._action = data.get('trade')[x].keys()[0]
                if not data.get('trade')[x][self._action]['TP']:
                    self._tp = 0
                else:
                    self._tp = data.get('trade')[x][self._action]['TP']
                self._sl = data.get('trade')[x][self._action]['SL']
                log.print_warning(self._instr, self._unit, self._action,
                                  self._tp, self._sl)
                self.ordr = order.MyOanda(self._instr, self._unit,
                                          self._action, self._sl, self._tp)
                try:
                    self._art_data.add_oanda(self.ordr.create_order())
                except OandaError:
                    log.print_error('Placing a order failed')
            return
        except AttributeError, TypeError:
            log.print_error('AttributeError, data NoneType')
            return
Esempio n. 3
0
class FindInTextTest(unittest.TestCase):

    def setUp(self):
        self.user = ''
        self.password = ''
        self._art_takestop = {}
	self.test_page = test_page
	self.test_page_cont = None
	self.art_data = {}
	self.trades = {}
	self.all_trade_ideas = {}
	self.db = MySQL()


    def check_page(self):
	'''
	Main function which is called every time.
	It's some kind of start process function.
	'''
        with requests.Session() as c:
	    self.do_soup(self.test_page_cont, "article")
	
    def check_instrument(self, title):
	log.print_green('checking instruments...')
	for i in self.instruments_dict.keys():
	    print title
	    print 'i.lower() ', i.lower()
	    if i.lower() in title:
		print '2: ', title
		print '2: i.lower() ', i.lower()
		log.print_green('Found: ', i.lower())
		return i.lower()

    def do_update(self,new_time):
	'''
	do update for article
	'''
	print("Let's check what has been updated")
	self._art_data.add_time(new_time)
	return

    def get_action(self, action):
	'''
	get action like, buy or sell
	'''
	for t in trade_word.keys():
	    if action in trade_word.get(t):
		return t


    def do_article(self, art):
	'''
	check articles from /important page and find keywords from trade_word
	'''
        for trade_list in trade_word.values():
	    for trade in trade_list:
                try:
                    assert trade in art.text.lower()
                    self.art_data["action"] = self.get_action(trade)
		    self.check_artid(self.test_page, {"class": "news urgent"})
                except AssertionError:
                    pass


    def ask_database(self, what, artID):
	self._result = self.db.select(what, artID)
	if self._result:
	    for data in self._result:
		self._result_dict = yaml.load(data)
	    return self._result_dict
	else:
	    log.print_warning('Nothing found!')
	    return 0

    def check_artid(self, page, option):
	self.soup = BeautifulSoup(self.test_page_cont, "lxml")
	self.art = self.soup.find('article', option)
	if self.ask_database('time', self.art.get("id")):
	    log.print_green('Found something with has same articleID in database already...')
	    self.check_timestamp(self.art.get("id"), self.art) #  checking if article is an update, or old one
	    return
	else:
	    log.print_warning('Found something new!')
	    self.do_soup(page, option)

    def check_timestamp(self, artID, content):
	'''
	compare timestamp of last entry in time key
	'''
	print('I am going to compare timestamps')
	#self._old_time = self.all_trade_ideas.get(artID).get('time')[len(self.all_trade_ideas.get(artID).get('time'))]
	self._old_time = self.ask_database('time', artID)
	print artID
	print self._old_time
	print len(self._old_time)
	self._old_time = self._old_time.values()[-1]
	self._new_time = content.find("time").get("datetime")
	if self._old_time == self._new_time:
	    print('No updates')
	    return
	else:
	    print('Update of article has been detected!')
	    return self.do_update(self._new_time)

    def do_soup(self, page, option):
	self.soup = BeautifulSoup(page, "lxml")
        if option == "article":
            for art in self.soup.find_all(option):
                #self.do_article(art)
		print art
        else:
            self.art = self.soup.find('article', option)
	    self.do_collect_info(self.art, page.url.encode('ascii', 'ignore'))

    def do_collect_info(self, art, pageurl):
	self.save_to_yaml('page', str(art))
        self._art_data = {} #internal variable to hold article data	
	log.print_green("Let's start with ", art.find("h1").text.lower())
	self._art_data = tradeClass()
	self._art_data.title = art.find("h1").text.lower().encode('ascii', 'ignore')
	self._art_data.add_time(art.find("time").get("datetime"))
	self._art_data.ID = art.get("id")
	self._art_data.page_adr = pageurl
	self._art_data.instrument = self.check_instrument(self._art_data.title)
	for p in art.find('div').find_all('p'): #.text.encode('ascii', 'ignore')
	    self._art_data.description += p.text.encode('ascii', 'ignore')
	log.print_warning('###### description ##### ', self._art_data.description)
        self.find_tp_sl(self._art_data.description) # find take profit and sl values
	self._art_data.author = art.find('section', {'class' : 'autor'}).find('div', {'class' : 'about'}).find('h1').text.encode('ascii', 'ignore')
	#self._art_data.add_trade(self.art_data['action'], self._art_data.takestop)
	#log.print_warning(art.find('div').find('p').text.encode('ascii', 'ignore'))
	self._art_data.do_all_data()
	self.do_trade(self._art_data.takestop)
	if self._art_data.trade: self.place_order(self._art_data.all_data, len(self._art_data.trade))
	#log.print_warning('trade: ', self._art_data.trade)
	#log.print_warning('len: ', len(self._art_data.trade))
	self._art_data.do_all_data()
	self.trades.update({self._art_data.ID : self._art_data.all_data})
	self.save_to_yaml(self._art_data.ID, self._art_data.all_data)
	self.save_to_yaml_all(self.trades)
	self.db.insert(self._art_data.all_data) #insert all data to database
	self.trades = {}
	return

    def do_trade(self, value):
	log.print_green('Do trade with value: ', value)
	try:
    	    for i in range(0,max(len(value.get('SL')), len(value.get('TP')))):
	        log.print_green(i)
    	        try:
		    self._temp = {}
            	    self._temp.update({'SL' : value.get('SL')[0], 'TP': value.get('TP')[i]})
            	    log.print_green('temp1: ', self._temp)
		    self._art_data.add_trade(self.art_data['action'], self._temp)
    	    	except IndexError:
		    self._temp = {}
		    log.print_green('temp2: ', self._temp)
        	    self._temp.update({'SL' : value.get('SL')[i], 'TP': value.get('TP')[0]})
		    self._art_data.add_trade(self.art_data['action'], self._temp)
	except TypeError:
	    self._art_data.trade = ''
	   


    def import_test_page(self):
	'''
	Importing test_page from mainpage.yaml file
	'''
	try:
	    with open(self.test_page, 'r') as f:
		self.test_page_cont = f.read()
	    log.print_green('Test page imported!')
	except:
	    log.print_error('Test page import failed')

    def import_instruments(self):
	'''
	Importing list of indtrument from instruments.yaml file
	'''
	try:
	    with open('./instruments.yaml', 'r') as f:
		self.instruments_dict = yaml.load(f)
	    log.print_green('Instruments imported!')
	except:
	    log.print_error('Instruments import failed')

    def find_tp_sl(self, info):
	print('finding TP and SL...')
	for action in trade_action.keys():
	    for t in trade_action.get(action):
		try:
		    if t in info.lower():
			self._tmp = self.find_digits(t, info.lower())
			self._art_takestop.update({action : self._tmp})
		except ValueError:
		    pass
	log.print_green(self._art_takestop)

    def find_digits(self, what, where):
	self._result = 0
	self._compile = "{}.[0-9\s.,]+".format(what)
	try:
	    self._result = re.findall(self._compile, where)[0]
	    self._result = self._result.split(':')[1]
	    self._result = self._result.split(', ')
	    for i in range(0, len(self._result)):
		self._result[i] = self._result[i].replace(' ', '')
		self._result[i] = self._result[i].replace(',', '.')
	    print 'new result: ', self._result
	    return self._result
	except IndexError:
	    return []


    @unittest.skip("skipping")
    def test_01_value_with_one_comma(self):
	self.description = description.format('(open price 0,67580)','Take profit: 0,6200', 'Stop Loss:0,7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': ['0.7050']}, self._art_takestop) 

    @unittest.skip("skipping")
    def test_02_value_with_two_comma_sl(self):
	self.description = description.format('(open price 0,67580)','Take profit: 0,6200', 'Stop Loss:0,7050, 0,7150')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': ['0.7050', '0.7150']}, self._art_takestop) 

    @unittest.skip("skipping")
    def test_03_value_with_two_comma(self):
	self.description = description.format('(open price 0,67580)','Take profit: 0,6200, 0,6500', 'Stop Loss:0,7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200', '0.6500'], 'SL': ['0.7050']}, self._art_takestop)

    @unittest.skip("skipping")
    def test_04_value_with_three_comma(self):
	self.description = description.format('(open price 0,67580)','Take profit: 0,6200, 0,6500, 0,6700', 'Stop Loss:0,7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200', '0.6500', '0.6700'], 'SL': ['0.7050']}, self._art_takestop)

    @unittest.skip("skipping")
    def test_05_value_with_three_comma_sl(self):
	self.description = description.format('(open price 0,67580)','Take profit: 0,6200', 'Stop Loss:0,7050, 0,7150, 0,7350')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': ['0.7050', '0.7150', '0.7350']}, self._art_takestop) 

    @unittest.skip("skipping")
    def test_06_value_with_one_dot(self):
	self.description = description.format('(open price 0.67580)','Take profit: 0.6200', 'Stop Loss:0.7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': ['0.7050']}, self._art_takestop)

    @unittest.skip("skipping")
    def test_07_value_with_two_dot(self):
	self.description = description.format('(open price 0.67580)','Take profit: 0.6200, 0.6500', 'Stop Loss:0.7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200', '0.6500'], 'SL': ['0.7050']}, self._art_takestop)

    @unittest.skip("skipping")
    def test_08_value_with_three_dot(self):
	self.description = description.format('(open price 0.67580)','Take profit: 0.6200, 0.6500, 0.6700', 'Stop Loss:0.7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200', '0.6500', '0.6700'], 'SL': ['0.7050']}, self._art_takestop)

    @unittest.skip("skipping")
    def test_09_no_tp_dot(self):
	self.description = description.format('(open price 0.67580)','Take profit,', 'Stop Loss:0.7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': [], 'SL': ['0.7050']}, self._art_takestop)

    @unittest.skip("skipping")
    def test_10_no_sl_dot(self):
	self.description = description.format('(open price 0.67580)','Take profit: 0.6200', 'Stop Loss')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': []}, self._art_takestop)

    @unittest.skip("skipping")
    def test_11_no_sl_and_tp(self):
	self.description = description.format('(open price 0.67580)','Take profit:', 'Stop Loss:')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': [], 'SL': []}, self._art_takestop)

    @unittest.skip("skipping")
    def test_12_value_with_one_comma_short(self):
	self.description = description.format('(open price 0,67580)','TP: 0,6200', 'SL:0,7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': ['0.7050']}, self._art_takestop) 

    @unittest.skip("skipping")
    def test_13_value_with_two_comma_short(self):
	self.description = description.format('(open price 0,67580)','TP: 0,6200', 'SL:0,7050, 0,7150')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': ['0.7050', '0.7150']}, self._art_takestop) 

    @unittest.skip("skipping")
    def test_14_value_with_one_comma_mixed(self):
	self.description = description.format('(open price 0,67580)','Take profit: 0,6200', 'sl: 0,7050')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': ['0.7050']}, self._art_takestop) 

    @unittest.skip("skipping")
    def test_15_value_with_two_comma_mixed(self):
	self.description = description.format('(open price 0,67580)','Take profit: 0,6200', 'SL:0,7050, 0,7150')
	print self.description
	self.find_tp_sl(self.description)
	self.assertEqual(self._art_takestop, {'TP': ['0.6200'], 'SL': ['0.7050', '0.7150']}, self._art_takestop) 

    @unittest.skip("skipping")
    def test_16_title(self):
	self.instruments_dict = {}
	self.import_instruments()
	self._title = 'caduiyjpy - trade idea 02/03'
	self._instr = self.check_instrument(self._title)
	self.assertEqual(self._instr, 'cadjpy' , self._instr)

    def test_17_check_page(self):
    	self.import_instruments()
        self.import_test_page()
	self.do_soup(self.test_page_cont, 'article')