Problem with multiple requests
Problem with multiple requests
11 Jan 2022, 17:24
Hi,
I have a problem with receiving responses from multiple requests in Python (eg. ProtoOAGetTrendbarsReq and ProtoOAGetTrendbarsRes). The example on the Github works fine with a single request (https://github.com/spotware/OpenApiPy/blob/main/samples/ConsoleSample/main.py). But, if you add multiple requests it is messing up and onMessageReceived callback does not work properly anymore. To get it just duplicate row 284 to execute command "commands[command](*parameters)" twice. Any recommendations?
Replies
tippy
13 Jan 2022, 01:40
RE:
thanks for response. I have noticed that first run is ok, problem occurs after another execution. Could you try execute sendProtoOAGetTrendbarsReq multiple times and check if it is ok?
I have another issue, is it normal that some of trendbars are missing in historical data for EURUSD on M1? I am using a demo account from the IC Markets.
@tippy
amusleh
13 Jan 2022, 09:03
RE: RE:
tippy said:
thanks for response. I have noticed that first run is ok, problem occurs after another execution. Could you try execute sendProtoOAGetTrendbarsReq multiple times and check if it is ok?
I have another issue, is it normal that some of trendbars are missing in historical data for EURUSD on M1? I am using a demo account from the IC Markets.
Hi,
I tested sendProtoOAGetTrendbarsReq by calling it 5 times in a row, here is the result:
Message received:
ctidTraderAccountId: 22415253
period: D1
timestamp: 1642024800000
trendbar {
volume: 98597
low: 112847
deltaOpen: 273
deltaClose: 139
deltaHigh: 471
utcTimestampInMinutes: 27357000
}
trendbar {
volume: 85986
low: 112901
deltaOpen: 63
deltaClose: 712
deltaHigh: 747
utcTimestampInMinutes: 27358440
}
trendbar {
volume: 91747
low: 112851
deltaOpen: 709
deltaClose: 430
deltaHigh: 757
utcTimestampInMinutes: 27362760
}
trendbar {
volume: 87745
low: 113130
deltaOpen: 122
deltaClose: 555
deltaHigh: 621
utcTimestampInMinutes: 27364200
}
trendbar {
volume: 94871
low: 113547
deltaOpen: 126
deltaClose: 866
deltaHigh: 980
utcTimestampInMinutes: 27365640
}
symbolId: 1
Message received:
ctidTraderAccountId: 22415253
period: D1
timestamp: 1642024800000
trendbar {
volume: 98597
low: 112847
deltaOpen: 273
deltaClose: 139
deltaHigh: 471
utcTimestampInMinutes: 27357000
}
trendbar {
volume: 85986
low: 112901
deltaOpen: 63
deltaClose: 712
deltaHigh: 747
utcTimestampInMinutes: 27358440
}
trendbar {
volume: 91747
low: 112851
deltaOpen: 709
deltaClose: 430
deltaHigh: 757
utcTimestampInMinutes: 27362760
}
trendbar {
volume: 87745
low: 113130
deltaOpen: 122
deltaClose: 555
deltaHigh: 621
utcTimestampInMinutes: 27364200
}
trendbar {
volume: 94871
low: 113547
deltaOpen: 126
deltaClose: 866
deltaHigh: 980
utcTimestampInMinutes: 27365640
}
symbolId: 1
Message received:
ctidTraderAccountId: 22415253
period: D1
timestamp: 1642024800000
trendbar {
volume: 98597
low: 112847
deltaOpen: 273
deltaClose: 139
deltaHigh: 471
utcTimestampInMinutes: 27357000
}
trendbar {
volume: 85986
low: 112901
deltaOpen: 63
deltaClose: 712
deltaHigh: 747
utcTimestampInMinutes: 27358440
}
trendbar {
volume: 91747
low: 112851
deltaOpen: 709
deltaClose: 430
deltaHigh: 757
utcTimestampInMinutes: 27362760
}
trendbar {
volume: 87745
low: 113130
deltaOpen: 122
deltaClose: 555
deltaHigh: 621
utcTimestampInMinutes: 27364200
}
trendbar {
volume: 94871
low: 113547
deltaOpen: 126
deltaClose: 866
deltaHigh: 980
utcTimestampInMinutes: 27365640
}
symbolId: 1
Message received:
ctidTraderAccountId: 22415253
period: D1
timestamp: 1642024800000
trendbar {
volume: 98597
low: 112847
deltaOpen: 273
deltaClose: 139
deltaHigh: 471
utcTimestampInMinutes: 27357000
}
trendbar {
volume: 85986
low: 112901
deltaOpen: 63
deltaClose: 712
deltaHigh: 747
utcTimestampInMinutes: 27358440
}
trendbar {
volume: 91747
low: 112851
deltaOpen: 709
deltaClose: 430
deltaHigh: 757
utcTimestampInMinutes: 27362760
}
trendbar {
volume: 87745
low: 113130
deltaOpen: 122
deltaClose: 555
deltaHigh: 621
utcTimestampInMinutes: 27364200
}
trendbar {
volume: 94871
low: 113547
deltaOpen: 126
deltaClose: 866
deltaHigh: 980
utcTimestampInMinutes: 27365640
}
symbolId: 1
Message received:
ctidTraderAccountId: 22415253
period: D1
timestamp: 1642024800000
trendbar {
volume: 98597
low: 112847
deltaOpen: 273
deltaClose: 139
deltaHigh: 471
utcTimestampInMinutes: 27357000
}
trendbar {
volume: 85986
low: 112901
deltaOpen: 63
deltaClose: 712
deltaHigh: 747
utcTimestampInMinutes: 27358440
}
trendbar {
volume: 91747
low: 112851
deltaOpen: 709
deltaClose: 430
deltaHigh: 757
utcTimestampInMinutes: 27362760
}
trendbar {
volume: 87745
low: 113130
deltaOpen: 122
deltaClose: 555
deltaHigh: 621
utcTimestampInMinutes: 27364200
}
trendbar {
volume: 94871
low: 113547
deltaOpen: 126
deltaClose: 866
deltaHigh: 980
utcTimestampInMinutes: 27365640
}
symbolId: 1
The code I used:
def sendProtoOAGetTrendbarsReq(weeks, period, symbolId, clientMsgId = None, numberOfCalls = 0):
if numberOfCalls == 5:
return
request = ProtoOAGetTrendbarsReq()
request.ctidTraderAccountId = currentAccountId
request.period = ProtoOATrendbarPeriod.Value(period)
request.fromTimestamp = int((datetime.datetime.utcnow() - datetime.timedelta(weeks=int(weeks))).timestamp()) * 1000
request.toTimestamp = int(datetime.datetime.utcnow().timestamp()) * 1000
request.symbolId = int(symbolId)
deferred = client.send(request, clientMsgId = clientMsgId)
deferred.addErrback(onError)
numberOfCalls += 1
sendProtoOAGetTrendbarsReq(weeks, period, symbolId, clientMsgId, numberOfCalls)
Regarding missing data, no, its not normal, most probably something is wrong with your code.
Please check the limits on documentation: https://spotware.github.io/open-api-docs/messages/#protooagettrendbarsreq
If you ask for more data than allowed you have to send multiple requests.
@amusleh
tippy
13 Jan 2022, 12:07
RE: RE: RE:
ok, I have checked it. That recurrency works fine for the first time and response comes immediately. Run it again from the menu and response does come randomly.
Regarding missing trendbars please try this one:
Execution: ProtoOAGetTrendbarsReq 1 M1 1
def sendProtoOAGetTrendbarsReq(weeks, period, symbolId, clientMsgId = None):
request = ProtoOAGetTrendbarsReq()
request.ctidTraderAccountId = currentAccountId
request.period = ProtoOATrendbarPeriod.Value(period)
request.fromTimestamp = 1578362820*1000 # 2020-01-07 02:07:00 GMT
request.toTimestamp = 1578363000*1000 # 2020-01-07 02:10:00 GMT
request.symbolId = int(symbolId)
deferred = client.send(request, clientMsgId = clientMsgId)
deferred.addErrback(onError)
The "2020-01-07 02:09:00" is missing in my response.
Message received:
period: M1
timestamp: 1578363000000
trendbar {
volume: 40
low: 111925
deltaOpen: 4
deltaClose: 0
deltaHigh: 5
utcTimestampInMinutes: 26306047 //<- 2020-01-07 02:07:00
}
trendbar {
volume: 14
low: 111924
deltaOpen: 2
deltaClose: 0
deltaHigh: 2
utcTimestampInMinutes: 26306048 //<- 2020-01-07 02:08:00
}
trendbar {
volume: 20
low: 111924
deltaOpen: 1
deltaClose: 1
deltaHigh: 1
utcTimestampInMinutes: 26306050 //<- 2020-01-07 02:10:00
}
symbolId: 1
@tippy
amusleh
13 Jan 2022, 14:47
RE: RE:
tippy said:
ok, it seems to work well on your system.
Could you please check missing trendbar with timestamps?
request.fromTimestamp = 1578362820*1000 # 2020-01-07 02:07:00 GMT request.toTimestamp = 1578363000*1000 # 2020-01-07 02:10:00 GMT
The bar data can be missed if there was no incoming price during that bar period, so it looks like the price didn't changed from previous bar close to this bar close.
@amusleh
amusleh
12 Jan 2022, 09:12
Hi,
I just tested the console app, I created a new copy of sendProtoOAGetTrendbarsReq method and called it from original one, the code looks like this (line 186):
Then I sent a ProtoOAGetTrendbarsReq with these parameters: 1 D1 1
Here is the response:
As you can see I received two responses.
@amusleh