IBridgePy和在功能级别导入

时间:2017-11-06 16:45:54

标签: python import stocks trading

我花了三个月左右的时间赚取了python,我从我在这个网站上找到的回复中学到了很多东西。我面临着导入问题,以及IBridgePy提供的与IB交易的代码。

我相信我的问题是我想将他们的模块级配置代码作为一个函数运行。我已经读过,导入会在第一次调用时正确设置。问题是,我需要在一个循环中运行他们的配置代码,因为我的程序是为扫描股票而设计的,当需要时,它会购买它。

鉴于我无法导入函数,每次循环时,如何替换循环中原始配置文件中模块的初始化?

我的错误是没有上述解决方案,第一个订单后的每个订单只打印一个关于第一个订单的信息,表明订单函数inst采用我更新的变量。

您可以在这里找到整个图书馆,但他们希望您登录下载。 http://www.ibridgepy.com/wp-content/uploads/2017/11/IBridgePy_Python3_64bit.zip

以下是他们提供的pf作为学习该模块的方法。它要么高于我的技能水平,要么与其目的无关。无论哪种方式,我都没有找到它。 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwia5M6hnqrXAhUJ4yYKHSSpBd4QFggoMAA&url=https%3A%2F%2Fwww.interactivebrokers.com%2Fwebinars%2F2016-WB-2578_QuantInsti-ImplementAlgoTradingCodedinPythonNotes.pdf&usg=AOvVaw0ePQpNlEGDa7UoFgeDGRL9

以下是他们提供的三个文件组合的代码,我正在尝试,并且无法循环。在我的代码中,我将“if name ==”部分中的大部分内容称为函数。我把它传给了一个自动收报机并试图买下它。它在第一个自动收报机上取得了成功,之后每个都失败了。

from IBridgePy.quantopian import LimitOrder, StopOrder, MarketOrder
from IBridgePy.quantopian import LimitOnOpenOrder, LimitOnCloseOrder
from BasicPyLib.handle_calendar import *
from IBridgePy.quantopian import calendars,date_rules, time_rules
from IBridgePy.TradingRules import TradingRules, Indicator, IndicatorDetails
import os
from sys import exit
import time

accountCode='DUXXXXXX'

def initialize(context):
    context.flag=False
    context.security=symbol('STK,'+ticker+',USD') 

def handle_data(context, data):
    if context.flag==False:               
        orderId=order(context.security, 100)
        order_status_monitor(orderId, target_status='Filled')
        context.flag=True

    else:
        time.sleep(10)
        display_all()
        end()

if __name__ == '__main__':
    global ticker
    for i in range(4):
        if i==0:
            ticker='ABEO'
        if i==1:
            ticker='ABIO'
        if i==2:
            ticker='APPL'
        if i==3:
            ticker='DOWJ'
        if i==4:
            ticker='AMD'





        try:
            id(runMode)
        except:
            runMode='run'

        if type(accountCode)==str:
            if runMode=='test_run_daily':
                from IBridgePy.TEST_Trader_single_account import Trader
                from IBridgePy.backtester_daily import MarketManager
                interval = 86400     
            elif runMode == 'test_run':
                from IBridgePy.TEST_Trader_single_account import Trader
                from IBridgePy.backtester_minute import MarketManager
                interval = 60
            else:
                from IBridgePy.Trader_single_account import Trader
                from IBridgePy.MarketManagerBase import MarketManager

        elif type(accountCode)==tuple:
            if runMode=='test_run':
                from IBridgePy.TEST_Trader_multi_account import Trader
            else:
                from IBridgePy.Trader_multi_account import Trader
                from IBridgePy.MarketManagerBase import MarketManager


        try:
            id(logLevel)
        except:
            logLevel='INFO'
        try:
            id(showTimeZone)
        except:
            showTimeZone='US/Eastern' 
        try:
            id(clientId) 
        except:
            clientId=9 


        repBarFreq=1

        try:
            id(before_trading_start)
        except:
            before_trading_start=None

        try:
            id(handle_data)
        except:
            handle_data=None

        try:
            id(trader)
            time.sleep(1)
            trader.disconnect()
            time.sleep(1)
        except:
            time.sleep(1)

        trader=Trader()
        trader.setup_trader(accountCode=accountCode,
                            logLevel=logLevel,
                            showTimeZone=showTimeZone,
                            repBarFreq=repBarFreq, 
                            initialize_quantopian=initialize,
                            handle_data_quantopian=handle_data,
                            before_trading_start_quantopian=before_trading_start)

        log = trader.log
        record = trader.userLog.record
        get_datetime=trader.get_datetime
        order=trader.order
        order_target=trader.order_target
        order_percent=trader.order_percent
        order_value = trader.order_value
        order_target_percent = trader.order_target_percent
        order_target_value = trader.order_target_value
        cancel_order=trader.cancel_order
        cancel_all_orders=trader.cancel_all_orders
        roundToMinTick=trader.roundToMinTick
        request_data=trader.request_data
        order_status_monitor=trader.order_status_monitor
        display_positions=trader.display_positions
        display_orderStatusBook=trader.display_orderStatusBook
        display_all=trader.display_all
        close_all_positions=trader.close_all_positions
        close_all_positions_except=trader.close_all_positions_except
        symbol=trader.symbol
        symbols=trader.symbols
        superSymbol=trader.superSymbol
        show_real_time_price=trader.show_real_time_price
        count_open_orders=trader.count_open_orders
        count_positions=trader.count_positions
        show_account_info=trader.show_account_info
        calculate_profit=trader.calculate_profit
        create_order=trader.create_order
        place_order_with_TP_SL=trader.place_order_with_TP_SL
        place_combination_orders=trader.place_combination_orders
        show_nextId=trader.show_nextId
        hold_any_position=trader.hold_any_position
        schedule_function=trader.schedule_function
        request_historical_data=trader.request_historical_data
        get_order=trader.get_order
        get_open_orders=trader.get_open_orders
        get_option_greeks=trader.get_option_greeks
        get_contract_details=trader.get_contract_details
        end=trader.end

        try:
            id(remoteHostIP)
        except:
            remoteHostIP=''
        c=MarketManager(trader, host=remoteHostIP, port=7496, clientId=clientId)

        if runMode=='run':
            c.run()
        elif runMode=='run_like_quantopian':
            c.run_like_quantopian()
        elif runMode=='run_auto_connection':
            c.run_auto_connection()
        elif runMode=='realTimeBars':
            c.runOnEvent()
        elif runMode in ['test_run_daily', 'test_run']:
            try:
                id(dataSource)
            except:
                dataSource='IB'
            c.test_run(startTime, endTime, dataSource, interval=interval)
        else:
            print ('realMode::EXIT, cannot handle runMode=%s'%(runMode,))

理想情况下,我只是希望能够订购(符号('SPY'),100)并完成它,但这对我来说似乎不是一个选择。所以我正在和他们给我的东西搏斗,而对我来说,这似乎是无稽之谈。程序将在每次运行时输出不同的错误,因为看似没有任何理由,当我在http://www.ibridgepy.com/community/或通过电子邮件联系他们时,我得不到任何响应或链接到无用的Q& A。

我已经在这一周了一周,尝试了我能想到的每一项工作,但这显然超出了我的能力范围。我哪里错了?

1 个答案:

答案 0 :(得分:0)

IBridgePy提供免费的调试服务,只要您可以使用错误消息将代码简化到最小。请参阅此网站http://www.ibridgepy.com/rent-a-coder/#Free_debug_service