示例#1
0
def utest_CheckOrders():
    print '-- CheckOrders function --',
    o1, o2  = [Order(BID,  999, 123.45,  100, 100) for _ in range(2)]
    checkOrders(o1, o2)
    o1, o2  = [Order(ASK, 9191,  32.54, 1000, 100) for _ in range(2)] # icebergs
    checkOrders(o1, o2)
    print 'OK'
示例#2
0
    def MakeOrders(self, currentPortfolio, targetPortfolio):
        orders = []
        for currentAsset in currentPortfolio:
            # if exists in target, buy/sell to get to target
            tgtAssetArray = [
                a for a in targetPortfolio if a._symbol == currentAsset._symbol
            ]
            if len(tgtAssetArray) > 0:
                symbol = tgtAssetArray[0]._symbol
                price = tgtAssetArray[0]._sharePrice
                numShares = tgtAssetArray[
                    0]._numShares - currentAsset._numShares
                if numShares > 0:
                    orders.append(Order("Buy", Asset(symbol, price,
                                                     numShares)))
                elif numShares < 0:
                    orders.append(
                        Order("Sell", Asset(symbol, price, -numShares)))
            else:
                # else, sell all
                orders.append(Order("Sell", currentAsset))

        for targetAsset in targetPortfolio:
            # if not exists in current, buy all
            if not any([
                    a for a in currentPortfolio
                    if a._symbol == targetAsset._symbol
            ]):
                orders.append(Order("Buy", targetAsset))

        return orders
示例#3
0
 def run(self):
     global stop
     while not stop:
         time.sleep(5)
         command = input("commande : ").split()
         if len(command) > 0:
             if command[0] == "order":
                 start = float(time.time()) + float(command[2])
                 end = start + float(command[3])
                 order = Order(float(command[1]), start, end, time.time())
                 lock.acquire(1)
                 Agent.send({"order": Agregate(AgType.COM, order)})
                 lock.release()
             if command[0] == "go":
                 for i in range(60):
                     print("top ", i)
                     start = float(time.time()) + float(command[2])
                     end = start + float(command[3])
                     order = Order(float(command[1]), start, end,
                                   time.time())
                     lock.acquire(1)
                     Agent.send({"ORDER": Agregate(AgType.COM, order)})
                     lock.release()
                     time.sleep(float(command[2]) + float(command[3]) + 3)
                 stop = True
             if command[0] == "stop":
                 stop = True
示例#4
0
文件: Backtest.py 项目: rushic/RC
def manage_fx_hedge(portfolio, bar, order):
    if Cp.hedge_fx is True and get_ccy(order.ticker) == 'USD':

        # Case 1: New equity position opened, hedge the USD consideration
        if portfolio.fx_position[order.ticker] == 0.0:
            usd_amount_to_hedge = -1.0 * order.price * order.quantity
            portfolio.fx_position[order.ticker] = usd_amount_to_hedge

            fx_order = Order(open_date=bar['DealDate'],
                             ticker='USD-GBP',
                             quantity=usd_amount_to_hedge,
                             price=order.fx,
                             order_type='MKT',
                             ccy='GBP',
                             fx=1.0,
                             trade_status='OPEN')

        # Case 2: Equity position being closed
        else:
            usd_amount_to_hedge = -1.0 * portfolio.fx_position[order.ticker]
            portfolio.fx_position[order.ticker] = 0.0

            fx_order = Order(open_date=bar['DealDate'],
                             ticker='USD-GBP',
                             quantity=usd_amount_to_hedge,
                             price=order.fx,
                             order_type='MKT',
                             ccy='GBP',
                             fx=1.0,
                             trade_status='CLOSE')

        fx_order.trade_id = '{}_{}'.format(order.trade_id, order.ticker)
        portfolio.orders.append(fx_order)
示例#5
0
    def change(self):
        i = 0
        if (User[CurrentUser[1]].getType() == 0):
            void.setAddress(self.Page2_Address.text())

        self.stackedWidget.setCurrentIndex(2)
        randFood = random.randint(0, len(Menu) - 1)
        temp = CurrentCart.copy()
        if (User[CurrentUser[1]].getType() == 0):
            addPendingOrder(Order(void, temp))

        elif (User[CurrentUser[1]].getType() != 0):
            if (User[CurrentUser[1]].getType() == 2):

                randomFood = Food(Menu[randFood].getName() + " *Free*", 0,
                                  Menu[randFood].getCate(),
                                  Menu[randFood].getSpice())
                User[CurrentUser[1]].addUserOrder(randomFood)
                addCurrentCart(randomFood)
                self.Page3_label4.show()

            addPendingOrder(Order(User[CurrentUser[1]], temp))
        while i < len(User[CurrentUser[1]].order):
            self.Page3_listView.addItem(
                User[CurrentUser[1]].order[i].getName() + "\t\t\t" +
                format(User[CurrentUser[1]].order[i].getPrice(), '.2f'))
            i += 1

        User[CurrentUser[1]].order.clear()
        print(currentCartSize())
示例#6
0
    def test_Order(self):
        o1 = Order(1, 10, 2.5, datetime.now(), Side.BUY, 'FB',
                   OrderType.MARKET)
        self.assertEqual(o1.order_id, 10)
        self.assertEqual(o1.side, Side.BUY)
        self.assertEqual(o1.ordertype, OrderType.MARKET)
        self.assertEqual(o1.filled, 0)
        self.assertEqual(o1.ticker, 'FB')
        self.assertEqual(o1.price, None)
        self.assertEqual(o1.quantity, int(2))
        self.assertEqual(o1.is_fulfilled(), False)
        o1.fill_order(1)
        self.assertEqual(o1.filled, 1)
        self.assertEqual(o1.is_fulfilled(), False)
        o1.fill_order(2)
        self.assertEqual(o1.filled, 2)
        self.assertEqual(o1.is_fulfilled(), True)
        with self.assertRaises(ValueError):
            Order(1, 1, 2.5, datetime.now(), 'error', 'FB', OrderType.MARKET)
            Order(1, 1, 2.5, datetime.now(), 'buy', 'FB', 'error')

        # Test limit order
        with self.assertRaises(ValueError):
            Order(2, 10, 5, datetime.now(), Side.BUY, 'FB', OrderType.LIMIT)
        o2 = Order(2, 10, 5, datetime.now(), Side.BUY, 'FB', OrderType.LIMIT,
                   3)
        self.assertEqual(o2.price, 3)
        self.assertEqual(o2.trades, [])
示例#7
0
文件: Backtest.py 项目: rushic/RC
def enter_short_position(portfolio, bar, ticker):
    # Money & Risk Management: Use StdDev
    sd = bar['Std_Dev_pct_' + ticker]
    if sd == 0.0:
        sd = 1.0

    fx_l = get_fx(bar, ticker)  # fx rate for ticker

    # position s/b between min_position and max_position e.g. between GBP3000 and GBP10000
    try:
        position = max(
            abs(Cp.min_position),
            min(abs(Cp.max_position), abs(Cp.amount_to_risk_per_trade / sd)))
    except:
        position = 10000.0

    position = (-1.0) * position

    # Determine quantity of assets
    qty = int(position / (bar['EntryPrice_' + ticker] * fx_l))

    # Determine stop prices
    stop_price = (1 / fx_l) * (position - Cp.amount_to_risk_per_trade) / qty

    deal_date = bar['DealDate']
    deal_price = bar['EntryPrice_' + ticker]
    ccy = get_ccy(ticker)
    fx = get_fx(bar, ticker)

    # Add a Market Order
    market_order = Order(open_date=deal_date,
                         ticker=ticker,
                         quantity=qty,
                         order_type='MKT',
                         price=deal_price,
                         ccy=ccy,
                         fx=fx)

    portfolio.trade_id[ticker] += 1
    market_order.trade_id = portfolio.trade_id[ticker]
    portfolio.orders.append(market_order)

    # Risk Management: Add an associated Stop Order
    stop_order = Order(open_date=deal_date,
                       ticker=ticker,
                       quantity=-qty,
                       order_type='STP',
                       ccy=ccy,
                       fx=fx)
    stop_order.price = stop_price
    stop_order.trade_id = market_order.trade_id
    portfolio.orders.append(stop_order)

    # Hedge FX risk
    manage_fx_hedge(portfolio, bar, market_order)
示例#8
0
 def _prepare_for_random(self, stack_space: list, insert_no: set,
                         result: list):
     """
     递归函数,目的是为了寻找一条合适的路径就停下来,如果递归结束都没有找到,那就输出不存在
     注意:现在还没有考虑递归深度的问题
     stack_space:
     [(now_address),(able_index)]
     [(1,2,0,0),(2,3)]
     [(1,0,2,0),(1,3)]
     """
     # 栈中没东西,说明本层没有合适路径,需要退回上一层寻找,直接return
     if not stack_space:
         return
     else:
         # 最后一个数字查好了以后,栈中只可能有一个元素
         # 如果没有数字可以插,表示需要判断这个元素是不是满足要求
         if not insert_no:
             # 把该元素弹出来,去判断是不是符合要求
             temp_item = stack_space.pop()
             temp_address = list(temp_item[0])
             temp_routine = []
             # 如果满足了要求,修改标志位,修改result(result必须是可变的),return
             if self._find_one_routine(Order(temp_address), temp_routine):
                 result.append((temp_routine, Order(temp_address)))
                 # 修改标志位
                 self._random_flag = True
                 return
         # 如果还有能插的位置,则对该栈中的元素洗牌后,依次弹出,弹的每一个去计算新表,然后递归调用
         else:
             # 这里其实也可以对插入数字的队列进行洗牌,显得更加的随机
             curr_insert_no = insert_no.pop()
             random.shuffle(stack_space)
             while stack_space and (not self._random_flag):
                 # 弹出一个,进行操作
                 temp_item = stack_space.pop()
                 temp_address = temp_item[0].copy()
                 temp_index = deque(temp_item[1].copy())
                 # 下面进行插入操作,可行结果放到新的stack中,进行后续递归
                 new_stack_space = []
                 # 循环进行几次,取决有有多少个空位
                 loop_times = len(temp_index)
                 for i in range(loop_times):
                     curr_index = temp_index.popleft()
                     temp_address[curr_index] = curr_insert_no
                     if self.arr_checker(temp_address):
                         # 将新的一个下一折的地址和对应空位的信息打包放入新栈
                         new_stack_space.append(
                             ((temp_address.copy()), temp_index.copy()))
                     # 还原操作
                     temp_address[curr_index] = 0
                     temp_index.append(curr_index)
                 # 某一个排列对应的next的新表做好了以后,直接递归调用求下一次的
                 self._prepare_for_random(new_stack_space, insert_no.copy(),
                                          result)
示例#9
0
def test_order():
    """
    This is a perfect case!
    A new order initialOrder is created an then used to create updatedOrder in perfect use case. No errors.
    Asserts to check updating is happening correctly.
    """
    initialOrder = Order(1568390243, 'abbb11', 'AAPL', 'B', 209.00000, 100)
    updatedOrder = Order(1568390247,
                         'abbb11',
                         quantity=101,
                         orgOrder=initialOrder)
    assert updatedOrder.ticker == 'AAPL'
    assert updatedOrder.quantity == 101
    assert updatedOrder.side == 'B'
示例#10
0
def utest_Order():    
    print '-- Order --',
    o  = Order(    BID,         999, 123.45,  100, 100)
    checkOrder(o,  True, False, 999, 123.45,  100, 100)

    o1 = Order(    BID,        9191,  32.54, 1000, 100) # iceberg
    checkOrder(o1, True, True, 9191,  32.54, 1000, 100)

    o2 = Order(    ASK,          999, 123.45,  100, 100)
    checkOrder(o2, False, False, 999, 123.45,  100, 100)

    o3 = Order(    ASK,         9191, 324,    1000, 100) # iceberg
    checkOrder(o3, False, True, 9191, 324,    1000, 100)
    
    print 'OK'
示例#11
0
    def get_depth(self, base, alt):
        order_book = {'bids': [], 'asks': []}
        pair, swapped = self.get_validated_pair((base, alt))
        if pair is None:
            return

        pairstr = pair[0].lower() + "_" + pair[1].lower()
        if swapped:
            bids, asks = btceapi.getDepth(pairstr)
        else:
            asks, bids = btceapi.getDepth(pairstr)

        order_book['bids'] = [Order(float(b[0]), float(b[1])) for b in bids]
        order_book['asks'] = [Order(float(a[0]), float(a[1])) for a in asks]
        return order_book
示例#12
0
    def get_order_obj(self, msg, order_id):
        ''' Construct an order object '''

        stock_symbol = self.get_stock_symbol_from_msg(msg)
        quantity = self.get_quantity_from_add_msg(msg)

        return Order(order_id, stock_symbol, quantity)
示例#13
0
def queue_order():
    if request.headers['Content-Type'] == 'application/json':

        requestdatajson = request.get_json()

        custid = requestdatajson['custId']
        custname = requestdatajson['customerName']
        itemname = requestdatajson['itemName']

        neworder = Order(customerid=custid,
                         customername=custname,
                         itemname=itemname)

        # neworder.displayOrder()

        orderQueue.put(neworder)

        responsedata = {'status': 'Order Queued'}

        # resp = jsonify(responsedata)
        responsedata = json.dumps(responsedata)

        resp = Response(responsedata, status=201, mimetype='application/json')

        return resp
    else:
        responsedata = {'status': '415 - Unsupported media type!!! '}

        resp = jsonify(responsedata)
        resp.status_code = 415
        return resp
示例#14
0
 def test_remove_item(self):
     order = Order(1)
     pizza = Pizza("vegetarian_pizza", 0, "small")
     order.add_item(pizza)
     order.remove_item(1)
     assert 1 not in order.ids_to_items
     assert len(order.items) == 0
示例#15
0
    def process_order(self):
        """
        Processes the order received.
        """
        factory_mapper = FactoryMapping()
        d = {}

        for detail in self._order_lst:
            i = 0
            for value in detail:
                d[self._column[i]] = value
                i += 1

            if d['holiday'] == "Christmas":
                factory = factory_mapper.map(1)
            elif d["holiday"] == "Halloween":
                factory = factory_mapper.map(2)
            else:
                factory = factory_mapper.map(3)

            corrupted = self.check_corrupted(d)
            corrupted_reason = self.check_corrupted(d)
            self._orders.append(
                Order(ord_num=d["order_number"],
                      product_id=d["product_id"],
                      item_type=d["item"],
                      name=d["name"],
                      prod_detail=dict(d),
                      factory_obj=factory,
                      corrupted=corrupted,
                      corrupted_reason=corrupted_reason))
示例#16
0
def generateSampleOrder():
    from Order import Order
    order = Order()
    order.setLab(generateSampleLab())
    order.setTestList(kgenerateTestList())
    order.setPrescDetail(kgeneratePrescriptionDetail())
    return order
示例#17
0
    def readStore(self):  # yuki
        with open('database.json', 'r') as infile:
            savedStore = json.loads(infile.read())
        for productData in savedStore['products']:
            productId = productData['id']
            productName = productData['name']
            productUnit = productData['unit']
            productOriginalPrice = productData['originalPrice']
            productSource = productData['source']
            productShelfLife = productData['shelfLife']
            batches = productData['batch']
            product = Product(productId, productName, productUnit,
                              productOriginalPrice, productSource,
                              productShelfLife)
            for batch in batches:
                sDate = batch['shelfDate'].split('-')
                bShelfDate = datetime.date(int(sDate[0]), int(sDate[1]),
                                           int(sDate[2]))
                batchId = batch['batchId']
                batchActualPrice = batch['actualPrice']
                batchQuantity = batch['quantity']
                batchShelfDate = bShelfDate
                product.buildBatch(batchId, batchActualPrice, batchQuantity,
                                   batchShelfDate, productShelfLife)
            self.products.append(product)
        for customerData in savedStore['customers']:
            cId = customerData['id']
            cPassword = customerData['password']
            cName = customerData['name']
            cPhoneNumber = customerData['phoneNumber']
            cAddress = customerData['address']
            cBalance = customerData['balance']
            cShoppingCart = customerData['shoppingCart']
            customer = CustomerAccount(cId, cPassword, cName, cPhoneNumber,
                                       cAddress, cBalance)
            customer.shoppingCart.setProductsInCart(cShoppingCart)
            self.customers.append(customer)

        for customerId in savedStore['orderHistory']:
            cOrderList = savedStore['orderHistory'][customerId]
            customerOrders = []
            for eachOrder in cOrderList:
                orderId = eachOrder['orderId']
                orderCId = eachOrder['customerId']
                tempShoppingCart = eachOrder['shoppingCart']
                orderShoppingCart = ShoppingCart()
                orderShoppingCart.setProductsInCart(tempShoppingCart)
                orderTotalPrice = eachOrder['totalPrice']
                dateS = eachOrder['transactionDate'].split('-')
                orderTransactionDate = datetime.datetime(
                    int(dateS[0]), int(dateS[1]), int(dateS[2]), int(dateS[3]),
                    int(dateS[4]), int(dateS[5]))
                order = Order(orderId, orderCId, orderShoppingCart,
                              orderTotalPrice, orderTransactionDate)
                customerOrders.append(order)
            self.orderHistory[customerId] = customerOrders

        ownerData = savedStore['owner']
        self.owner = OwnerAccount(ownerData['id'], ownerData['name'],
                                  ownerData['password'])
示例#18
0
    def zic_strategy(observation):

        # If the player has already traded, idle
        if observation['trader'].order == None:
            return None

        # Obtain details from observation
        time = observation['lob']['time']
        tid = observation['trader'].tid
        order_price = observation['trader'].order.price
        order_type = observation['trader'].order.otype
        min_price = observation['trader'].exchange_rules['minprice']
        max_price = observation['trader'].exchange_rules['maxprice']

        # Choose price
        if order_type == OType.BID:
            price = random.randint(min_price, order_price)
        elif order_type == OType.ASK:
            price = random.randint(order_price, max_price)
        else:
            raise RuntimeError('Observation contains malformed order.')

        # Form and return order
        order = Order(tid, order_type, price, 1, time)
        return order
示例#19
0
    def addOrder(self,
                 isBuy=None,
                 orderId=None,
                 price=None,
                 qty=None,
                 peakSize=None,
                 order=None):
        '''| TODO 
        | Creates and adds an order to the map of orders. In addition, pointer to the order is added to the proper map (bid/ask) and
        | vector (price level). The maps are ordered, therefore, inserting elements with price as keys, automatically builds a correct
        | depth of the book.
        | Note: best bid is the last element (price level) of the bid map; best ask is the first element (price level) of the ask map.
        |________'''

        # Already checked that an order with the same Id is not present in the book
        myOrder = Order(isBuy, orderId, price, qty,
                        peakSize) if order == None else order

        self.activeOrders[myOrder.orderId] = myOrder

        # TODO: Where do we deal with int*100 price as keys?
        key_price = int(myOrder.price * 100)

        level = self.bid if myOrder.isBuy else self.ask

        if key_price not in level:
            level[key_price] = Level()

        level[key_price].addOrder(myOrder)
示例#20
0
 def ApproveOrRejectOrder(self, Command: ApproveOrRejectOrderCommand):
     Events, SnapshotData = OrderRepository().Find(Command.OrderId, 'Order')
     UpdatedOrder = Order()
     UpdatedOrder.Revise(SnapshotData, Events)
     Events = UpdatedOrder.procces_OrderApproveOrRejectCommand(Command)
     UpdatedOrder.apply_OrderApprovedOrRejectedEvent(Events[0])
     OrderRepository().Update((UpdatedOrder, ), Events, Command.MessageId)
def test_pizza_methods():
    order = Order()
    assert order.countPizza == 0 and order.countDrinks == 0

    order.add_pizza("pepperoni small []")
    assert order.countPizza == 1
    assert order.user_order['pizza'][0] == \
           {"pizzaType": "pepperoni", "pizzaSize": "small", "toppings": []}

    order.change_type(0, "vegetarian")
    assert order.user_order['pizza'][0] == \
           {"pizzaType": "vegetarian", "pizzaSize": "small", "toppings": []}

    order.change_size(0, "medium")
    assert order.user_order['pizza'][0] == \
           {"pizzaType": "vegetarian", "pizzaSize": "medium", "toppings": []}

    order.change_toppings(0, "[jalapenos,olives]")
    assert order.user_order['pizza'][0] == \
           {"pizzaType": "vegetarian", "pizzaSize": "medium", "toppings": ['jalapenos', 'olives']}

    try:
        order.change_type(0, "Obama")
    except ValueError:
        assert order.user_order['pizza'][0] == \
               {"pizzaType": "vegetarian", "pizzaSize": "medium", "toppings": ['jalapenos', 'olives']}

    assert order.countPizza == 1
    order.delete_pizza(0)
    assert order.countPizza == 0
示例#22
0
def addWebOrder():
    from typing import Dict, List

    # Converts string date into datetime object
    from datetime import datetime
    date: datetime = datetime.strptime(request.form["date"], '%Y-%m-%d')

    # Category is a work in progress
    # category= request.form["category"]
    location: str = request.form["loc"]
    subtotals: Dict[str, float] = {
        'Nishant': float(request.form["nishant"]),
        'Arjun': float(request.form["arjun"]),
        'Param': float(request.form["param"]),
    }
    newUserName = request.form["userName"]
    if newUserName:
        subtotals[newUserName] = float(request.form["userTotal"])
    total = float(request.form["total"])

    # Adds order to database
    from DB import DB
    from Order import Order
    excessive: List[Dict] = DB.add(Order(date, location, subtotals, total))

    # Sends member a confirmation message
    Twilio.Communication.send(
        "\nAdded order from %s for a total of $%.2f" % (location, total),
        "Nishant")
    Twilio.alert(excessive)
示例#23
0
 def from_dict(self, flower_shop_dict):
     self.logged_user = None
     self.name = ""
     if 'name' in flower_shop_dict:
         self.name = flower_shop_dict['name']
     self.flowers = []
     if 'flowers' in flower_shop_dict:
         for flower_dict in flower_shop_dict['flowers']:
             flower = Flower()
             flower.from_dict(flower_dict)
             self.flowers.append(flower)
     self.bouquets = []
     if 'bouquets' in flower_shop_dict:
         for bouquet_dict in flower_shop_dict['bouquets']:
             bouquet = Bouquet()
             bouquet.from_dict(bouquet_dict, self.flowers)
             self.bouquets.append(bouquet)
     self.users = []
     if 'users' in flower_shop_dict:
         for user_dict in flower_shop_dict['users']:
             user = User()
             user.from_dict(user_dict)
             self.users.append(user)
     self.orders = []
     if 'orders' in flower_shop_dict:
         for order_dict in flower_shop_dict['orders']:
             order = Order()
             order.from_dict(order_dict, self.bouquets)
             self.orders.append(order)
     self.orders_id_counter = len(self.orders)
     self.users_id_counter = len(self.users)
     self.flowers_id_counter = len(self.flowers)
     self.bouquets_id_counter = len(self.bouquets)
示例#24
0
    def getInitActiveOrders(self):
        ackMsg = self.trading_client.get_openorders()
        if type(ackMsg) == dict:
            if len(ackMsg['result']) == 0:
                return ackMsg
            else:
                tmpActiveOrderList = []

                for i in range(len(ackMsg['result'])):
                    obj = ackMsg['result'][i]
                    odid = str(obj['orderId'])
                    symbol = str(obj['instrument'])
                    sym_ = symbol.split('-')[0]
                    _sym = symbol.split('-')[1]
                    orderType = str(obj['type'])
                    price = float(obj['price'])
                    side = str(obj['direction'])
                    qty = float(obj['quantity'])
                    o = Order(self.exchCode, sym_, _sym, orderType, price,
                              side, qty)
                    o.odid = odid
                    o.status = 'ACTIVE'
                    o.activeTs = nowStr()
                    tmpActiveOrderList.append(o)
                return tmpActiveOrderList
        else:
            intAckMsg = self.handleUnknownMsg(ackMsg['message'])
            return intAckMsg
示例#25
0
    def customer_loop(self, id, containers_list, orders):
        print("Hello in Klient App")

        select_char = "s"
        while select_char != "q":
            select_char = input("Select action:\n"
                                "\t1. Show available offer\n"
                                "\t2. Submit your order\n"
                                "\t3. My orders\n"
                                "\t4. Exit\n").upper()

            if select_char not in "1234" or len(select_char) != 1:
                print("No such action")
                continue

            if select_char == '1':
                for i in range(len(containers_list)):
                    containers_list[i].print_info(i)

            elif select_char == '2':
                order = Order()
                for i in range(len(containers_list)):
                    containers_list[i].print_info(i)

                container_id = int(input("Enter the container id: "))
                order.set_order(id, containers_list[container_id], False)
                orders.append(order)

            elif select_char == '3':
                for i in range(len(orders)):
                    if orders[i].id == id:
                        orders[i].print_order(i)

            elif select_char == "4":
                return
示例#26
0
 def strat_ma(self, n_days):
     print('Executing a simple MA strategy...')
     self.order_book = Order_Book(self.cash)
     end_date = dt.now()
     start_date = end_date - timedelta(days=n_days)
     for asset in self.asset_list:
         df = scrape_page(asset.name, asset.ticker, start_date, end_date)
         ma = df['close'].rolling(len(df)).mean().iloc[-1]
         close = df['close'].iloc[-1]
         if ma > close and asset.position > 0:
             self.order_book.add_order(
                 Order(asset, 'Sell', ma, asset.position))
         elif ma < close:
             self.order_book.add_order(
                 Order(asset, 'Buy', ma, 1 / float(df.std())))
     self.order_book.execute_order()
示例#27
0
文件: Backtest.py 项目: rushic/RC
def exit_position(portfolio, bar, ticker):
    """Creates new MKT orders to flatten current position for a ticker and cancels any associated STP orders"""
    qty = -portfolio.position[ticker]
    deal_date = bar['DealDate']
    deal_price = bar['EntryPrice_' + ticker]

    if qty != 0:
        ccy = get_ccy(ticker)
        fx = get_fx(bar, ticker)

        # Add a Market Order to close current position
        market_order = Order(open_date=deal_date,
                             ticker=ticker,
                             quantity=qty,
                             order_type='MKT',
                             price=deal_price,
                             ccy=ccy,
                             fx=fx)
        market_order.trade_id = portfolio.trade_id[ticker]
        market_order.trade_status = 'CLOSE'
        portfolio.orders.append(market_order)

        # Cancel any OPEN STP orders for the ticker
        for stop_order in portfolio.orders:
            if stop_order.ticker == ticker and stop_order.status == 'OPEN' and stop_order.order_type == 'STP':
                stop_order.cancel_order(deal_date)

        # Remove FX Hedge
        manage_fx_hedge(portfolio, bar, market_order)
示例#28
0
 def test_update_total(self):
     order = Order(1)
     assert order.order_total == 0
     pizza = Pizza("vegetarian_pizza", 0, "small")
     order.add_item(pizza)
     order.update_total()
     assert order.order_total == 9.99
示例#29
0
def parse(file):
    file = open(file)
    lines = [line.rstrip('\r\n') for line in file.readlines()]

    variables = lines[0].split(' ')
    r, c, drones, deadline, max_load = variables

    products_count = int(lines[1])

    products = [
        Product(index, int(lines[2].split(' ')[index]))
        for index in range(len(lines[2].split(' ')))
    ]

    warehouse_count = int(lines[3])

    # this used to have for warehouse_no in range(warehouse_count*2-1)
    # - what was the *2-1 for? It makes us 19 warehouses rather than 10
    warehouses = [
        Warehouse(convert_coord(lines[warehouse_no + 4]),
                  convert_products(lines[warehouse_no + 5], products),
                  warehouse_no) for warehouse_no in range(warehouse_count)
    ]

    orders_offset = 4 + warehouse_count * 2

    orders_count = int(lines[orders_offset])

    orders = [
        Order(convert_coord(lines[order_no + orders_offset]),
              lines[order_no + orders_offset + 2], order_no)
        for order_no in range(orders_count * 3 - 1)
    ]

    return {'orders': orders, 'warehouses': warehouses, 'variables': variables}
def test_drink_methods():
    order = Order()
    assert order.countPizza == 0 and order.countDrinks == 0

    order.add_drink("coke", 2)
    assert order.countDrinks == 1
    assert order.user_order['drinks'] == {"coke": 2}

    order.add_drink("water", 2)
    assert order.user_order['drinks'] == {"water": 2, "coke": 2}
    assert order.countDrinks == 2

    order.change_drink_quantity("water", 7)
    assert order.user_order['drinks'] == {"water": 7, "coke": 2}

    order.change_drink_quantity("coke", 0)
    assert order.user_order['drinks'] == {"water": 7}
    assert order.countDrinks == 1

    order.add_drink("water", 2)
    assert order.user_order['drinks'] == {"water": 9}

    try:
        order.change_drink_quantity("coke", 3)
    except ValueError:
        assert order.user_order['drinks'] == {"water": 9}

    try:
        order.add_drink("ciroc", 2)
    except ValueError:
        assert order.user_order['drinks'] == {"water": 9}