Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) ETrade - Place Equity Order (JSON version)Shows how to place an equity order using ETrade with OAuth1 authorization. See https://developer.etrade.com/ctnt/dev-portal/getDetail?contentUri=V0_Documentation-OrderAPI-PlaceEquityOrder for more information.
IncludeFile "CkHttpResponse.pb" IncludeFile "CkHttp.pb" IncludeFile "CkJsonObject.pb" Procedure ChilkatExample() ; This example assumes the Chilkat HTTP 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 jsonToken.i = CkJsonObject::ckCreate() If jsonToken.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/etrade.json") If success <> 1 Debug "Failed to load OAuth1 token" CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) ProcedureReturn EndIf CkHttp::setCkOAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"oauth_token")) CkHttp::setCkOAuthTokenSecret(http, CkJsonObject::ckStringOf(jsonToken,"oauth_token_secret")) ; Build the JSON request body json.i = CkJsonObject::ckCreate() If json.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.-xmlns","http://order.etws.etrade.com") ; The accountId should be an 8-digit number such as "83405188" CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.accountId","MY_ETRADE_ACCOUNT_ID") CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.clientOrderId","45") CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.limitPrice","3") CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.quantity","4") CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.symbol","ETFC") CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.orderAction","BUY") CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.priceType","LIMIT") CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.marketSession","REGULAR") CkJsonObject::ckUpdateString(json,"PlaceEquityOrder.EquityOrderRequest.orderTerm","GOOD_FOR_DAY") CkJsonObject::setCkEmitCompact(json, 0) Debug CkJsonObject::ckEmit(json) ; The above code builds the following JSON: ; { ; "PlaceEquityOrder": { ; "-xmlns": "http://order.etws.etrade.com", ; "EquityOrderRequest": { ; "accountId": "83405188", ; "clientOrderId": "45", ; "limitPrice": "3", ; "quantity": "4", ; "symbol": "ETFC", ; "orderAction": "BUY", ; "priceType": "LIMIT", ; "marketSession": "REGULAR", ; "orderTerm": "GOOD_FOR_DAY" ; } ; } ; } ; POST the JSON and get the response. CkJsonObject::setCkEmitCompact(json, 1) ; Set the Accept property to get a JSON response. CkHttp::setCkAccept(http, "application/json") ; This example uses the sandbox URL. The live URL is "https://etws.etrade.com/order/rest/placeequityorder" resp.i = CkHttp::ckPostJson2(http,"https://etwssandbox.etrade.com/order/sandbox/rest/placeequityorder","application/json",CkJsonObject::ckEmit(json)) If CkHttp::ckLastMethodSuccess(http) <> 1 Debug CkHttp::ckLastErrorText(http) CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) CkJsonObject::ckDispose(json) ProcedureReturn EndIf ; Examine the response status code. statusCode.i = CkHttpResponse::ckStatusCode(resp) Debug "Status Code = " + Str(statusCode) ; Load the JSON response body: CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp)) CkJsonObject::setCkEmitCompact(json, 0) ; If the status code was not 200, then it was an error.. If statusCode <> 200 Debug CkJsonObject::ckEmit(json) Debug "Equity order failed." CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) CkJsonObject::ckDispose(json) ProcedureReturn EndIf Debug CkJsonObject::ckEmit(json) CkHttpResponse::ckDispose(resp) ; To examine some information from the JSON: Debug "quantity: " + Str(CkJsonObject::ckIntOf(json,"PlaceEquityOrderResponse.EquityOrderResponse.quantity")) Debug "msgDesc: " + CkJsonObject::ckStringOf(json,"PlaceEquityOrderResponse.EquityOrderResponse.messageList.msgDesc") ; etc .. ; This is a sample response: ; { ; "PlaceEquityOrderResponse": { ; "EquityOrderResponse": { ; "accountId": 83310056, ; "allOrNone": false, ; "estimatedCommission": 9.99, ; "estimatedTotalAmount": 1909.99, ; "messageList": { ; "msgDesc": "Your order was successfully entered during market hours.", ; "msgCode": 1026 ; }, ; "orderNum": 277, ; "orderTime": 1240982042179, ; "quantity": 100, ; "reserveOrder": false, ; "reserveQuantity": 0, ; "orderTerm": "GOOD_UNTIL_CANCEL", ; "limitPrice": 18, ; "stopPrice": 0, ; "symbolDesc": "CISCO SYS INC COM", ; "symbol": "CSCO", ; "orderAction": "BUY", ; "priceType": "LIMIT" ; } ; } ; } ; CkHttp::ckDispose(http) CkJsonObject::ckDispose(jsonToken) CkJsonObject::ckDispose(json) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.