PureBasic
PureBasic
ETrade v1 Preview Order
See more HTTP Misc Examples
Gets the order details for a selected brokerage account based on the search criteria provided.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkXml.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttp::setCkOAuth1(http, 1)
CkHttp::setCkOAuthVerifier(http, "")
CkHttp::setCkOAuthConsumerKey(http, "ETRADE_CONSUMER_KEY")
CkHttp::setCkOAuthConsumerSecret(http, "ETRADE_CONSUMER_SECRET")
; Load the access token previously obtained via the OAuth1 3-Legged Authorization examples Step1 and Step2.
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonObject::ckLoadFile(json,"qa_data/tokens/etrade.json")
If success <> 1
Debug "Failed to load OAuth1 token"
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
CkHttp::setCkOAuthToken(http, CkJsonObject::ckStringOf(json,"oauth_token"))
CkHttp::setCkOAuthTokenSecret(http, CkJsonObject::ckStringOf(json,"oauth_token_secret"))
; See the ETrade v1 API documentation HERE.
; Sample XML Request
; Use this online tool to generate the code from sample XML:
; Generate Code to Create XML
; <?xml version="1.0" encoding="UTF-8"?>
; <PreviewOrderRequest>
; <orderType>EQ</orderType>
; <clientOrderId>sdfer333</clientOrderId>
; <Order>
; <allOrNone>false</allOrNone>
; <priceType>LIMIT</priceType>
; <orderTerm>GOOD_FOR_DAY</orderTerm>
; <marketSession>REGULAR</marketSession>
; <stopPrice />
; <limitPrice>188.51</limitPrice>
; <Instrument>
; <Product>
; <securityType>EQ</securityType>
; <symbol>FB</symbol>
; </Product>
; <orderAction>BUY</orderAction>
; <quantityType>QUANTITY</quantityType>
; <quantity>10</quantity>
; </Instrument>
; </Order>
; </PreviewOrderRequest>
xml.i = CkXml::ckCreate()
If xml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkXml::setCkTag(xml, "PreviewOrderRequest")
CkXml::ckUpdateChildContent(xml,"orderType","EQ")
CkXml::ckUpdateChildContent(xml,"clientOrderId","sdfer333")
CkXml::ckUpdateChildContent(xml,"Order|allOrNone","false")
CkXml::ckUpdateChildContent(xml,"Order|priceType","LIMIT")
CkXml::ckUpdateChildContent(xml,"Order|orderTerm","GOOD_FOR_DAY")
CkXml::ckUpdateChildContent(xml,"Order|marketSession","REGULAR")
CkXml::ckUpdateChildContent(xml,"Order|stopPrice","")
CkXml::ckUpdateChildContent(xml,"Order|limitPrice","188.51")
CkXml::ckUpdateChildContent(xml,"Order|Instrument|Product|securityType","EQ")
CkXml::ckUpdateChildContent(xml,"Order|Instrument|Product|symbol","FB")
CkXml::ckUpdateChildContent(xml,"Order|Instrument|orderAction","BUY")
CkXml::ckUpdateChildContent(xml,"Order|Instrument|quantityType","QUANTITY")
CkXml::ckUpdateChildContent(xml,"Order|Instrument|quantity","10")
xmlContent.s = CkXml::ckGetXml(xml)
endpointUrl.s = "https://apisb.etrade.com/v1/accounts/{accountIdKey}/orders/preview"
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpStr(http,"POST",endpointUrl,xmlContent,"utf-8","application/xml",resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(json)
CkXml::ckDispose(xml)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
; A 200 status code indicates success.
statusCode.i = CkHttpResponse::ckStatusCode(resp)
Debug "statusCode = " + Str(statusCode)
; Use the following online tool to generate parsing code from sample XML:
; Generate Parsing Code from XML
; A sample XML response is shown below...
CkXml::ckLoadXml(xml,CkHttpResponse::ckBodyStr(resp))
tagPath.s
orderType.s
totalOrderValue.s
orderTerm.s
priceType.s
limitPrice.s
stopPrice.i
marketSession.s
allOrNone.s
symbol.s
securityType.s
symbolDescription.s
orderAction.s
quantityType.s
quantity.i
cancelQuantity.s
reserveOrder.s
reserveQuantity.s
i.i
count_i.i
code.i
description.s
v_type.s
egQual.s
estimatedCommission.s
estimatedTotalAmount.s
netPrice.i
netBid.i
netAsk.i
gcd.i
previewId.i
previewTime.s
dstFlag.s
accountId.i
optionLevelCd.i
marginLevelCd.s
ahDisclosureFlag.s
aoDisclosureFlag.s
conditionalDisclosureFlag.s
ehDisclosureFlag.s
marginBuyingPower.s
orderType = CkXml::ckGetChildContent(xml,"orderType")
totalOrderValue = CkXml::ckGetChildContent(xml,"totalOrderValue")
orderTerm = CkXml::ckGetChildContent(xml,"Order|orderTerm")
priceType = CkXml::ckGetChildContent(xml,"Order|priceType")
limitPrice = CkXml::ckGetChildContent(xml,"Order|limitPrice")
stopPrice = CkXml::ckGetChildIntValue(xml,"Order|stopPrice")
marketSession = CkXml::ckGetChildContent(xml,"Order|marketSession")
allOrNone = CkXml::ckGetChildContent(xml,"Order|allOrNone")
symbol = CkXml::ckGetChildContent(xml,"Order|Instrument|Product|symbol")
securityType = CkXml::ckGetChildContent(xml,"Order|Instrument|Product|securityType")
symbolDescription = CkXml::ckGetChildContent(xml,"Order|Instrument|symbolDescription")
orderAction = CkXml::ckGetChildContent(xml,"Order|Instrument|orderAction")
quantityType = CkXml::ckGetChildContent(xml,"Order|Instrument|quantityType")
quantity = CkXml::ckGetChildIntValue(xml,"Order|Instrument|quantity")
cancelQuantity = CkXml::ckGetChildContent(xml,"Order|Instrument|cancelQuantity")
reserveOrder = CkXml::ckGetChildContent(xml,"Order|Instrument|reserveOrder")
reserveQuantity = CkXml::ckGetChildContent(xml,"Order|Instrument|reserveQuantity")
i = 0
count_i = CkXml::ckNumChildrenHavingTag(xml,"Order|messages|Message")
While i < count_i
CkXml::setCkI(xml, i)
code = CkXml::ckGetChildIntValue(xml,"Order|messages|Message[i]|code")
description = CkXml::ckGetChildContent(xml,"Order|messages|Message[i]|description")
v_type = CkXml::ckGetChildContent(xml,"Order|messages|Message[i]|type")
i = i + 1
Wend
egQual = CkXml::ckGetChildContent(xml,"Order|egQual")
estimatedCommission = CkXml::ckGetChildContent(xml,"Order|estimatedCommission")
estimatedTotalAmount = CkXml::ckGetChildContent(xml,"Order|estimatedTotalAmount")
netPrice = CkXml::ckGetChildIntValue(xml,"Order|netPrice")
netBid = CkXml::ckGetChildIntValue(xml,"Order|netBid")
netAsk = CkXml::ckGetChildIntValue(xml,"Order|netAsk")
gcd = CkXml::ckGetChildIntValue(xml,"Order|gcd")
previewId = CkXml::ckGetChildIntValue(xml,"PreviewIds|previewId")
previewTime = CkXml::ckGetChildContent(xml,"previewTime")
dstFlag = CkXml::ckGetChildContent(xml,"dstFlag")
accountId = CkXml::ckGetChildIntValue(xml,"accountId")
optionLevelCd = CkXml::ckGetChildIntValue(xml,"optionLevelCd")
marginLevelCd = CkXml::ckGetChildContent(xml,"marginLevelCd")
ahDisclosureFlag = CkXml::ckGetChildContent(xml,"Disclosure|ahDisclosureFlag")
aoDisclosureFlag = CkXml::ckGetChildContent(xml,"Disclosure|aoDisclosureFlag")
conditionalDisclosureFlag = CkXml::ckGetChildContent(xml,"Disclosure|conditionalDisclosureFlag")
ehDisclosureFlag = CkXml::ckGetChildContent(xml,"Disclosure|ehDisclosureFlag")
marginBuyingPower = CkXml::ckGetChildContent(xml,"marginBuyingPower")
; Sample XML Response
; <?xml version="1.0" encoding="UTF-8"?>
; <PreviewOrderResponse>
; <orderType>EQ</orderType>
; <totalOrderValue>1892.05</totalOrderValue>
; <Order>
; <orderTerm>GOOD_FOR_DAY</orderTerm>
; <priceType>LIMIT</priceType>
; <limitPrice>188.51</limitPrice>
; <stopPrice>0</stopPrice>
; <marketSession>REGULAR</marketSession>
; <allOrNone>false</allOrNone>
; <Instrument>
; <Product>
; <symbol>FB</symbol>
; <securityType>EQ</securityType>
; </Product>
; <symbolDescription>FACEBOOK INC CL A</symbolDescription>
; <orderAction>BUY</orderAction>
; <quantityType>QUANTITY</quantityType>
; <quantity>10</quantity>
; <cancelQuantity>0.0</cancelQuantity>
; <reserveOrder>true</reserveOrder>
; <reserveQuantity>0.0</reserveQuantity>
; </Instrument>
; <messages>
; <Message>
; <code>1042</code>
; <description>200|You have an existing open order for this security on the same side of the market. If you did not intend to place a second order for this security, please modify your order now.</description>
; <type>WARNING</type>
; </Message>
; <Message>
; <code>3093</code>
; <description>Position Concentrated.</description>
; <type>WARNING</type>
; </Message>
; </messages>
; <egQual>EG_QUAL_NOT_A_MARKET_ORDER</egQual>
; <estimatedCommission>6.95</estimatedCommission>
; <estimatedTotalAmount>1892.05</estimatedTotalAmount>
; <netPrice>0</netPrice>
; <netBid>0</netBid>
; <netAsk>0</netAsk>
; <gcd>0</gcd>
; <ratio />
; </Order>
; <PreviewIds>
; <previewId>1020563279</previewId>
; </PreviewIds>
; <previewTime>1529018458516</previewTime>
; <dstFlag>true</dstFlag>
; <accountId>84246841</accountId>
; <optionLevelCd>4</optionLevelCd>
; <marginLevelCd>MARGIN_TRADING_ALLOWED</marginLevelCd>
; <Disclosure>
; <ahDisclosureFlag>false</ahDisclosureFlag>
; <aoDisclosureFlag>false</aoDisclosureFlag>
; <conditionalDisclosureFlag>true</conditionalDisclosureFlag>
; <ehDisclosureFlag>false</ehDisclosureFlag>
; </Disclosure>
; <marginBuyingPower>86758.05</marginBuyingPower>
; </PreviewOrderResponse>
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(json)
CkXml::ckDispose(xml)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndProcedure