Beispiel #1
0
def action_sell_trailing(params, data):
    trade = data['trade']

    #
    symbol = params[0].strip().upper()
    margin = string_to_relative(params[1])
    prev_order_id = string_to_int(params[2]) if len(params) > 2 else None
    order_term = 'GOOD_UNTIL_CANCEL'

    if margin is None:
        return '-> error: margin'
    if margin >= 0:
        print('-> error: margin must be negative')
        return False

    #
    # quantity
    #
    quantity = check_positions_quantity(symbol, data)
    if quantity <= 0:
        print('Cannot sell an equity that I do not own')
        return False

    #
    # previous orders
    #
    open_orders = trade.find_open_orders(symbol, 'SELL')
    if len(open_orders) > 1:
        print(
            'Multiple sell orders have been placed on this security, please cancel them before continue.'
        )
        return False
    if len(open_orders) == 1:
        if prev_order_id is not None:
            print('A sell order has already been placed [' +
                  str(open_orders[0][0]) +
                  '] on this security and it is not ' + str(prev_order_id))
            return False
        prev_order_id = open_orders[0][0]

    #
    # TODO not tested
    #
    job_server = data['job_server']
    new_id = job_server.next_valid_task_id()
    new_task = Tasks.SellTrailing(new_id, None)

    new_task.set_order_data(symbol=symbol,
                            qty=quantity,
                            margin=margin,
                            prev_order_id=prev_order_id,
                            order_term=order_term,
                            update_freq=10)

    job_server.add(new_task)
    job_server.list_done_tasks()
    print('job created')

    return False