经过多年没有编程,我正准备在Mac OSX上学习C++.我热切的目标是创建一个与Interactive Brokers一起使用的算法/自动交易软件.
现在,我下载了适用于Mac OSX的API和文档.但我认为MacOSX的API仅适用于Java?
我的情况我错了:如果有人可以帮助我在IB-API上使用几行C++,例如打开会话或加载marketdata以获得安全性,我会很高兴吗?
顺便说一下,我用R做了这个,在找到一些例子之后它很容易使用.
谢谢.
我试图搜索找出如何在一定时间范围内搜索模式。显然,该模式可能会根据时间范围出现几次,这就是为什么我对重复的最大次数特别感兴趣。
为了说明我要进一步实现的目标,请说我正在搜索从2小时到15分钟图表的模式,然后在2小时图表中找到它,然后再钻入下一个1小时的时间范围,最后得出在1小时图上的两个模式中,我将继续30分钟(两个1小时模式)和15分钟,直到获得最大的时间。
我认为将需要一种返回下一个较低时间范围的方法。我已经能够写出来,请参见下面的代码。我真的很感谢您的帮助。
ENUM_TIMEFRAMES findLowerTimeframe(ENUM_TIMEFRAMES timePeriod)
{
int timeFrames[5] = {15, 20, 30, 60, 120};
int TFIndex=ArrayBsearch(timeFrames, (int)timePeriod);
return((ENUM_TIMEFRAMES) timeFrames[TFIndex - 1]);
}
Run Code Online (Sandbox Code Playgroud)
编辑
我没有添加特定的烛台图案,因为我认为这不是我的问题中最重要的部分。问题的症结在于如何在几个连续的时间框架内搜索模式,以找到该模式在该时间范围内出现的最大次数。
所以我按照这里的步骤来写信:https : //www.reddit.com/r/algorading/comments/c81vzq/td_ameritrade_api_access_2019_guide/以获得刷新令牌,以便我可以在 C# 中构建客户端应用程序使用德美利证券的 API,进行特殊股票和期权筛选和交易。在遇到任何麻烦之前,我已经走到了尽头。
在获取我的刷新令牌的最后一步中,您填写了https://developer.tdameritrade.com/authentication/apis/post/token-0上的字段,它失败了,我只是在 HTTP 中得到以下响应401错误:
HTTP/1.1 401 Unauthorized
Access-Control-Allow-Headers: origin
Access-Control-Allow-Methods:
GET
Access-Control-Allow-Origin:
https://developer.tdameritrade.com
Access-Control-Max-Age: 3628800
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 31
Content-Security-Policy: frame-ancestors 'self'
Content-Type: application/json;charset=UTF-8
Date: Sat, 04 Apr 2020 16:07:04 GMT
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Application-Context: OAUTH_SERVICE:run:8080
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
{
"error": "invalid_grant"
}
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?我已经对每个步骤和文本框中的值(如下图)进行了两次和三次检查以接收刷新令牌,但我无法让它工作。根据指南的步骤,代码和客户端 ID 也已正确完成 - 我进行了两次和三次检查。
我按照 Reddit 指南中的步骤以及 TDA Ameritrade 自己的链接指南进行操作,以确保我将正确的值放在正确的字段中,所以我真的不知道发生了什么。
任何帮助表示赞赏。
我有一个交易多对(30-40)的交易机器人。它使用之前的 5m 蜡烛作为价格输入。因此,我一一获得所有对的 5m 历史记录。目前,完整的周期大约需要 10 分钟,因此 500 万支蜡烛每 10 米更新一次,这是不好的。
关于如何加快速度的任何想法?
我试图看看是否可以为MetaTrader构建一个可以发出异步互联网请求的自定义指标,以便将数据发布到带有PHP接口的服务器上.
这些请求可能需要一些时间才能处理Web服务器,因此我担心如果以同步方式执行这些请求,它们将阻止指示器不断更新新的tick数据.
MT4是否有可用的异步库?
这是我用来请求市场数据的脚本.
我还没有订阅数据馈送,所以我会自动返回延迟的市场数据,但显然我必须启用它,但无法找到这样做的地方.
这是脚本和我得到的错误,我只需要接收延迟数据,所以我可以测试我的算法.
from ib.opt import ibConnection, message
from ib.ext.Contract import Contract
from time import sleep
def fundamentalData_handler(msg):
print(msg)
def error_handler(msg):
print(msg)
tws = ibConnection(port=7496, clientId=100)
tws.register(error_handler, message.Error)
tws.register(fundamentalData_handler, message.fundamentalData)
tws.connect()
c = Contract()
c.m_symbol = 'AAPL'
c.m_secType = 'STK'
c.m_exchange = "SMART"
c.m_currency = "USD"
print "on it"
tws.reqMktData(897,c,"",False)
sleep(50)
tws.disconnect()
Run Code Online (Sandbox Code Playgroud)
错误:
<error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:hfarm>
<error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:eufarm>
<error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:jfarm> …Run Code Online (Sandbox Code Playgroud) 检查美国证券交易所今天是否开放交易的最简单方法是什么?
我希望避免的长期方法是创建例程来解析带有日历信息的提要,例如https://business.nasdaq.com/trade/US-Options/Holiday-Trading-Hours.html
我更喜欢Ruby,但即使是使用curl进行简单的 URL 查找来生成真/假,或者直到下一个市场开盘的时间,也会很棒。
选修的
能够查找任意日期会更好,并解决这个问题。即什至是来自外壳的
东西。curl google.com/search?q="Is the NYSE open on $(date +%Y-%m-%d)"
我想另一个条件添加到该解决方案在这个岗位。我希望当交易获利10点时,止损将增加10点。更具体地说,假设我已经设置了一个待处理的买单,止损位比开盘价低10点,止盈位为50点。如果交易获利10个点,那么止损将向上移动10个点,如果交易获利为20个点,则止损将向上移动另一个10个点,而当交易获利30和40个点时,同样会发生直到达到50点止盈为止。这里的想法是,止损会增加10个点,而利润会增加10个点,但是止损不会下降。因此,如果止损为获利10个点,而价格为获利23个点并且突然下降,它将以10个止损获利退出交易。
设置以上条件对我来说似乎很复杂。我还没完成。
以下是我要解决的代码的相关部分(请注意,其余代码与上述链接的问题解决方案相同)。
//=========================================================
//CLOSE EXPIRED STOP/EXECUTED ORDERS
//---------------------------------------------------------
for( int i=OrdersTotal()-1; i>=0; i-- ) {
if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES ))
if( OrderSymbol() == Symbol() )
if( OrderMagicNumber() == viMagicId) {
if( (OrderType() == OP_BUYSTOP) || (OrderType() == OP_SELLSTOP) )
if((TimeCurrent()-OrderOpenTime()) >= viDeleteStopOrderAfterInSec)
OrderDelete(OrderTicket());
if( (OrderType() == OP_BUY) || (OrderType() == OP_SELL) )
if((TimeCurrent()-OrderOpenTime()) >= viDeleteOpenOrderAfterInSec) {
// For executed orders, need to close them
double closePrice = 0;
RefreshRates();
if(OrderType() == OP_BUY)
closePrice = Bid;
if(OrderType() == …Run Code Online (Sandbox Code Playgroud)