![]() |
Chilkat • HOME • Android™ • AutoIt • C • C# • C++ • Chilkat2-Python • CkPython • Classic ASP • DataFlex • Delphi DLL • Go • Java • Node.js • Objective-C • PHP Extension • Perl • PowerBuilder • PowerShell • PureBasic • Ruby • SQL Server • Swift • Tcl • Unicode C • Unicode C++ • VB.NET • VBScript • Visual Basic 6.0 • Visual FoxPro • Xojo Plugin
(Delphi DLL) ETrade Preview OrderThe Preview Order API is used to submit an order request for preview before placing it. For more information, see https://apisb.etrade.com/docs/api/order/api-order-v1.html#/definition/orderPreview
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Http, HttpResponse, Xml, JsonObject; ... procedure TForm1.Button1Click(Sender: TObject); var http: HCkHttp; jsonToken: HCkJsonObject; success: Boolean; sandboxUrl: PWideChar; liveUrl: PWideChar; xml: HCkXml; resp: HCkHttpResponse; orderType: PWideChar; totalOrderValue: PWideChar; orderTerm: PWideChar; priceType: PWideChar; limitPrice: PWideChar; stopPrice: Integer; marketSession: PWideChar; allOrNone: PWideChar; symbol: PWideChar; securityType: PWideChar; symbolDescription: PWideChar; orderAction: PWideChar; quantityType: PWideChar; quantity: Integer; cancelQuantity: PWideChar; reserveOrder: PWideChar; reserveQuantity: PWideChar; i: Integer; count_i: Integer; code: Integer; description: PWideChar; v_type: PWideChar; egQual: PWideChar; estimatedCommission: PWideChar; estimatedTotalAmount: PWideChar; netPrice: Integer; netBid: Integer; netAsk: Integer; gcd: Integer; previewId: Integer; previewTime: PWideChar; dstFlag: PWideChar; accountId: Integer; optionLevelCd: Integer; marginLevelCd: PWideChar; ahDisclosureFlag: PWideChar; aoDisclosureFlag: PWideChar; conditionalDisclosureFlag: PWideChar; ehDisclosureFlag: PWideChar; currentBp: PWideChar; currentNetBp: PWideChar; currentOor: PWideChar; currentOrderImpact: PWideChar; netBp: PWideChar; begin // This requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. http := CkHttp_Create(); CkHttp_putOAuth1(http,True); CkHttp_putOAuthVerifier(http,''); CkHttp_putOAuthConsumerKey(http,'ETRADE_CONSUMER_KEY'); CkHttp_putOAuthConsumerSecret(http,'ETRADE_CONSUMER_SECRET'); // Load the access token previously obtained via the OAuth1 Authorization jsonToken := CkJsonObject_Create(); success := CkJsonObject_LoadFile(jsonToken,'qa_data/tokens/etrade.json'); if (success <> True) then begin Memo1.Lines.Add('Failed to load OAuth1 token'); Exit; end; CkHttp_putOAuthToken(http,CkJsonObject__stringOf(jsonToken,'oauth_token')); CkHttp_putOAuthTokenSecret(http,CkJsonObject__stringOf(jsonToken,'oauth_token_secret')); sandboxUrl := 'https://apisb.etrade.com/v1/accounts/{$accountIdKey}/orders/preview'; liveUrl := 'https://api.etrade.com/v1/accounts/{$accountIdKey}/orders/preview'; CkHttp_SetUrlVar(http,'accountIdKey','6_Dpy0rmuQ9cu9IbTfvF2A'); // Send a POST with the following XML body // 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 := CkXml_Create(); CkXml_putTag(xml,'PreviewOrderRequest'); CkXml_UpdateChildContent(xml,'orderType','EQ'); CkXml_UpdateChildContent(xml,'clientOrderId','sdfer333'); CkXml_UpdateChildContent(xml,'Order|allOrNone','false'); CkXml_UpdateChildContent(xml,'Order|priceType','LIMIT'); CkXml_UpdateChildContent(xml,'Order|orderTerm','GOOD_FOR_DAY'); CkXml_UpdateChildContent(xml,'Order|marketSession','REGULAR'); CkXml_UpdateChildContent(xml,'Order|stopPrice',''); CkXml_UpdateChildContent(xml,'Order|limitPrice','188.51'); CkXml_UpdateChildContent(xml,'Order|Instrument|Product|securityType','EQ'); CkXml_UpdateChildContent(xml,'Order|Instrument|Product|symbol','FB'); CkXml_UpdateChildContent(xml,'Order|Instrument|orderAction','BUY'); CkXml_UpdateChildContent(xml,'Order|Instrument|quantityType','QUANTITY'); CkXml_UpdateChildContent(xml,'Order|Instrument|quantity','10'); CkXml_putEmitCompact(xml,True); CkHttp_SetRequestHeader(http,'Content-Type','application/xml'); resp := CkHttp_PostXml(http,sandboxUrl,CkXml__getXml(xml),'utf-8'); if (CkHttp_getLastMethodSuccess(http) <> True) then begin Memo1.Lines.Add(CkHttp__lastErrorText(http)); Exit; end; // Make sure a successful response was received. if (CkHttpResponse_getStatusCode(resp) > 200) then begin Memo1.Lines.Add(CkHttpResponse__statusLine(resp)); Memo1.Lines.Add(CkHttpResponse__header(resp)); Memo1.Lines.Add(CkHttpResponse__bodyStr(resp)); Exit; end; // Sample XML response: // Use this online tool to generate parsing code from sample XML: // Generate Parsing Code from XML // <?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> // <cashBpDetails> // <settled> // <currentBp>5000.00</currentBp> // <currentNetBp>5000.00</currentNetBp> // <currentOor>0.00</currentOor> // <currentOrderImpact>64.95</currentOrderImpact> // <netBp>4935.05</netBp> // </settled> // <settledUnsettled> // <currentBp>5000.00</currentBp> // <currentNetBp>5000.00</currentNetBp> // <currentOor>0.00</currentOor> // <currentOrderImpact>64.95</currentOrderImpact> // <netBp>4935.05</netBp> // </settledUnsettled> // </cashBpDetails> // </PreviewOrderResponse> CkXml_LoadXml(xml,CkHttpResponse__bodyStr(resp)); Memo1.Lines.Add(CkXml__getXml(xml)); orderType := CkXml__getChildContent(xml,'orderType'); totalOrderValue := CkXml__getChildContent(xml,'totalOrderValue'); orderTerm := CkXml__getChildContent(xml,'Order|orderTerm'); priceType := CkXml__getChildContent(xml,'Order|priceType'); limitPrice := CkXml__getChildContent(xml,'Order|limitPrice'); stopPrice := CkXml_GetChildIntValue(xml,'Order|stopPrice'); marketSession := CkXml__getChildContent(xml,'Order|marketSession'); allOrNone := CkXml__getChildContent(xml,'Order|allOrNone'); symbol := CkXml__getChildContent(xml,'Order|Instrument|Product|symbol'); securityType := CkXml__getChildContent(xml,'Order|Instrument|Product|securityType'); symbolDescription := CkXml__getChildContent(xml,'Order|Instrument|symbolDescription'); orderAction := CkXml__getChildContent(xml,'Order|Instrument|orderAction'); quantityType := CkXml__getChildContent(xml,'Order|Instrument|quantityType'); quantity := CkXml_GetChildIntValue(xml,'Order|Instrument|quantity'); cancelQuantity := CkXml__getChildContent(xml,'Order|Instrument|cancelQuantity'); reserveOrder := CkXml__getChildContent(xml,'Order|Instrument|reserveOrder'); reserveQuantity := CkXml__getChildContent(xml,'Order|Instrument|reserveQuantity'); i := 0; count_i := CkXml_NumChildrenHavingTag(xml,'Order|messages|Message'); while i < count_i do begin CkXml_putI(xml,i); code := CkXml_GetChildIntValue(xml,'Order|messages|Message[i]|code'); description := CkXml__getChildContent(xml,'Order|messages|Message[i]|description'); v_type := CkXml__getChildContent(xml,'Order|messages|Message[i]|type'); i := i + 1; end; egQual := CkXml__getChildContent(xml,'Order|egQual'); estimatedCommission := CkXml__getChildContent(xml,'Order|estimatedCommission'); estimatedTotalAmount := CkXml__getChildContent(xml,'Order|estimatedTotalAmount'); netPrice := CkXml_GetChildIntValue(xml,'Order|netPrice'); netBid := CkXml_GetChildIntValue(xml,'Order|netBid'); netAsk := CkXml_GetChildIntValue(xml,'Order|netAsk'); gcd := CkXml_GetChildIntValue(xml,'Order|gcd'); previewId := CkXml_GetChildIntValue(xml,'PreviewIds|previewId'); previewTime := CkXml__getChildContent(xml,'previewTime'); dstFlag := CkXml__getChildContent(xml,'dstFlag'); accountId := CkXml_GetChildIntValue(xml,'accountId'); optionLevelCd := CkXml_GetChildIntValue(xml,'optionLevelCd'); marginLevelCd := CkXml__getChildContent(xml,'marginLevelCd'); ahDisclosureFlag := CkXml__getChildContent(xml,'Disclosure|ahDisclosureFlag'); aoDisclosureFlag := CkXml__getChildContent(xml,'Disclosure|aoDisclosureFlag'); conditionalDisclosureFlag := CkXml__getChildContent(xml,'Disclosure|conditionalDisclosureFlag'); ehDisclosureFlag := CkXml__getChildContent(xml,'Disclosure|ehDisclosureFlag'); currentBp := CkXml__getChildContent(xml,'cashBpDetails|settled|currentBp'); currentNetBp := CkXml__getChildContent(xml,'cashBpDetails|settled|currentNetBp'); currentOor := CkXml__getChildContent(xml,'cashBpDetails|settled|currentOor'); currentOrderImpact := CkXml__getChildContent(xml,'cashBpDetails|settled|currentOrderImpact'); netBp := CkXml__getChildContent(xml,'cashBpDetails|settled|netBp'); currentBp := CkXml__getChildContent(xml,'cashBpDetails|settledUnsettled|currentBp'); currentNetBp := CkXml__getChildContent(xml,'cashBpDetails|settledUnsettled|currentNetBp'); currentOor := CkXml__getChildContent(xml,'cashBpDetails|settledUnsettled|currentOor'); currentOrderImpact := CkXml__getChildContent(xml,'cashBpDetails|settledUnsettled|currentOrderImpact'); netBp := CkXml__getChildContent(xml,'cashBpDetails|settledUnsettled|netBp'); Memo1.Lines.Add('Success.'); CkHttp_Dispose(http); CkJsonObject_Dispose(jsonToken); CkXml_Dispose(xml); end; |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.