我花了三个月左右的时间赚取了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。
我已经在这一周了一周,尝试了我能想到的每一项工作,但这显然超出了我的能力范围。我哪里错了?
答案 0 :(得分:0)
IBridgePy提供免费的调试服务,只要您可以使用错误消息将代码简化到最小。请参阅此网站http://www.ibridgepy.com/rent-a-coder/#Free_debug_service