Exemple #1
0
	def run(self):
		# set up db
		dname = 'btcltc_ML'
		
		SRC_CRY = 'BTC'
		TRG_CRY = 'LTC'
		
		db.init(dname,host='192.168.1.22', user='******',passwd='hammer')
		try:
			db.connect()
		except: ### access denied
			log.error('db %s access denied' % dname)
			exit()
		else:
			log.info('Connect DB: %s' % dname)
#################################################
## TODO
## - get orders
## - instanziate an Orders objects, which takes the db object
##   and has the methods
##   creates a shallow copy via [:]
##		show() ... 	returns the current order table in pretty format
##					may take an argument for various display formatting, i.e 'sql', 'screen'
##		match()		does a round of matching
##					may return a list of modified orders as a list of addresses
##					OR
##					iterative starting at top
##						checking for next order with status <300/200 = active or partially filled
##						try match && match
##						

		
		while True:

			######################
			# get active orders from db
			#db.set_autocommit(False)
			db.set_autocommit(True)
			
			TIMESTAMP = '2013-10-16 00:00:00'
			#TIMESTAMP = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
			
			active_orders = (Order
				.select(
					Order.send_to_address,
					Order.order_type,
					Order.source,
					Order.target,
					Order.amount,
					Order.amount_settled,
					Order.amount_ask,
					Order.created,
					Order.price_ask,
					Order.status)
				.where(
					(Order.source == SRC_CRY) | (Order.source == TRG_CRY) 
					& (Order.status >= Order.STATUS_ACTIVE) 
					& (Order.status < Order.STATUS_FILLED) 
					& (TIMESTAMP < Order.valid_until))
				.order_by(Order.price_ask.asc(),Order.created.desc())
				.for_update(True) ## maybe add nowait?
				) 
			#active_orders.execute()
			
			######################
			# set canceled orders to topay
			pay_canceled_orders = (Order
				.update(
					status=Order.STATUS_TOPAY)
				.where(
					(Order.status == Order.STATUS_CANCELED) 
					)
				) 
			
			
			###############################################
			## set canceled order to TOPAY
			no_canceled = pay_canceled_orders.execute()
			log.debug('paying canceled order: ' + str(no_canceled))
			
			###############################################
			## get the order book and init class
			ob = OrderBook(active_orders)
			
			###############################################
			# discover price
			# if the orderbook matching has been down this will be an open price scenario			
			ob.discover_price()
			
			#log.debug('showing the orderbook')
			#ob.show_order_book('screen')
			
			ob.settle_orderbook()
			
			#___________________________________
			# looping using a generator
			#ob.loop_orders()
			#c = ob.get_next()
			#print next(c).send_to_address
			#print next(c).send_to_address

			sys.exit('stop')
			pass
			#____TODO____
			# before writing check if there is a new cancel status
			
			###############################################
			## DB LOCKING TESTS
			#log.debug('created query')
			#time.sleep(20)
			#log.debug('executing')
			#active_orders.execute()
			#time.sleep(20)
			#log.debug('committing')
			#db.commit()
			#log.debug('after commi')
			#time.sleep(100000)
			
			###############################################
			# testing updateing data in a tuple/row
			#x = ob.update_status('999')
			#print x
			#ob.show_order_book('raw')			
			
			log.debug('done settleing')
			time.sleep(10)
Exemple #2
0
			#x = ob.update_status('999')
			#print x
			#ob.show_order_book('raw')			
			
			log.debug('done settleing')
			time.sleep(10)

#####################################################
if __name__ == "__main__":

	orderd.logger.set_logging(DEBUG)	
	daemon = OrderDaemon('/home/markus/order_daemon.pid')
	
	if len(sys.argv) == 3 and 'debug' == sys.argv[2]:
		orderd.logger.set_logging(True)
		log.debug('Running in debug mode ...')
		daemon.run()

	if 'start' == sys.argv[1]:
		log.info('Starting ...')
		daemon.start()
	elif 'stop' == sys.argv[1]:
		log.info('Stopping ...')
		daemon.stop()
	elif 'restart' == sys.argv[1]:
		daemon.restart()
	else:
		print "usage: %s start|stop|restart [debug]" % sys.argv[0]
		sys.exit(2)
		sys.exit(0)