Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

ETrade v1 Get Account Balances

See more HTTP Misc Examples

Get account balances using the ETrade v1 API.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.Xml,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  json: TJsonObject;
  respStr: string;
  statusCode: Integer;
  xml: TXml;
  tagPath: string;
  accountId: Integer;
  accountType: string;
  optionLevel: string;
  accountDescription: string;
  quoteMode: Integer;
  dayTraderStatus: string;
  accountMode: string;
  fundsForOpenOrdersCash: Integer;
  moneyMktBalance: Integer;
  cashAvailableForInvestment: Integer;
  netCash: string;
  cashBalance: string;
  settledCashForInvestment: Integer;
  unSettledCashForInvestment: Integer;
  fundsWithheldFromPurchasePower: Integer;
  fundsWithheldFromWithdrawal: Integer;
  marginBuyingPower: Integer;
  cashBuyingPower: string;
  dtMarginBuyingPower: Integer;
  dtCashBuyingPower: Integer;
  shortAdjustBalance: Integer;
  regtEquity: Integer;
  regtEquityPercent: Integer;
  accountBalance: Integer;
  dtCashOpenOrderReserve: Integer;
  dtMarginOpenOrderReserve: Integer;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  http := THttp.Create;

  http.OAuth1 := True;
  http.OAuthVerifier := '';
  http.OAuthConsumerKey := 'ETRADE_CONSUMER_KEY';
  http.OAuthConsumerSecret := 'ETRADE_CONSUMER_SECRET';

  //  Load the access token previously obtained via the OAuth1 3-Legged Authorization examples Step1 and Step2.
  json := TJsonObject.Create;
  success := json.LoadFile('qa_data/tokens/etrade.json');
  if (success <> True) then
    begin
      WriteLn('Failed to load OAuth1 token');
      Exit;
    end;

  http.OAuthToken := json.StringOf('oauth_token');
  http.OAuthTokenSecret := json.StringOf('oauth_token_secret');

  //  See the ETrade v1 API documentation HERE.

  http.SetUrlVar('accountIdKey','vsnhtF7d9jXxBy6HyaAC4vQ');
  http.SetUrlVar('instType','BROKERAGE');
  respStr := http.QuickGetStr('https://apisb.etrade.com/v1/accounts/{$accountIdKey}/balance?instType={$instType}&realTimeNAV=true');
  if (http.LastMethodSuccess <> True) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  //  A 200 status code indicates success.
  statusCode := http.LastStatus;
  WriteLn('statusCode = ' + 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...

  xml := TXml.Create;
  xml.LoadXml(respStr);

  accountId := xml.GetChildIntValue('accountId');
  accountType := xml.GetChildContent('accountType');
  optionLevel := xml.GetChildContent('optionLevel');
  accountDescription := xml.GetChildContent('accountDescription');
  quoteMode := xml.GetChildIntValue('quoteMode');
  dayTraderStatus := xml.GetChildContent('dayTraderStatus');
  accountMode := xml.GetChildContent('accountMode');
  fundsForOpenOrdersCash := xml.GetChildIntValue('Cash|fundsForOpenOrdersCash');
  moneyMktBalance := xml.GetChildIntValue('Cash|moneyMktBalance');
  cashAvailableForInvestment := xml.GetChildIntValue('Computed|cashAvailableForInvestment');
  netCash := xml.GetChildContent('Computed|netCash');
  cashBalance := xml.GetChildContent('Computed|cashBalance');
  settledCashForInvestment := xml.GetChildIntValue('Computed|settledCashForInvestment');
  unSettledCashForInvestment := xml.GetChildIntValue('Computed|unSettledCashForInvestment');
  fundsWithheldFromPurchasePower := xml.GetChildIntValue('Computed|fundsWithheldFromPurchasePower');
  fundsWithheldFromWithdrawal := xml.GetChildIntValue('Computed|fundsWithheldFromWithdrawal');
  marginBuyingPower := xml.GetChildIntValue('Computed|marginBuyingPower');
  cashBuyingPower := xml.GetChildContent('Computed|cashBuyingPower');
  dtMarginBuyingPower := xml.GetChildIntValue('Computed|dtMarginBuyingPower');
  dtCashBuyingPower := xml.GetChildIntValue('Computed|dtCashBuyingPower');
  shortAdjustBalance := xml.GetChildIntValue('Computed|shortAdjustBalance');
  regtEquity := xml.GetChildIntValue('Computed|regtEquity');
  regtEquityPercent := xml.GetChildIntValue('Computed|regtEquityPercent');
  accountBalance := xml.GetChildIntValue('Computed|accountBalance');
  dtCashOpenOrderReserve := xml.GetChildIntValue('Margin|dtCashOpenOrderReserve');
  dtMarginOpenOrderReserve := xml.GetChildIntValue('Margin|dtMarginOpenOrderReserve');

  //  <?xml version="1.0" encoding="UTF-8"?>
  //  <BalanceResponse>
  //     <accountId>83564979</accountId>
  //     <accountType>PDT_ACCOUNT</accountType>
  //     <optionLevel>LEVEL_4</optionLevel>
  //     <accountDescription>KRITHH TT</accountDescription>
  //     <quoteMode>6</quoteMode>
  //     <dayTraderStatus>PDT_MIN_EQUITY_RES_1XK</dayTraderStatus>
  //     <accountMode>PDT ACCOUNT</accountMode>
  //     <Cash>
  //        <fundsForOpenOrdersCash>0</fundsForOpenOrdersCash>
  //        <moneyMktBalance>0</moneyMktBalance>
  //     </Cash>
  //     <Computed>
  //        <cashAvailableForInvestment>0</cashAvailableForInvestment>
  //        <netCash>93921.44</netCash>
  //        <cashBalance>93921.44</cashBalance>
  //        <settledCashForInvestment>0</settledCashForInvestment>
  //        <unSettledCashForInvestment>0</unSettledCashForInvestment>
  //        <fundsWithheldFromPurchasePower>0</fundsWithheldFromPurchasePower>
  //        <fundsWithheldFromWithdrawal>0</fundsWithheldFromWithdrawal>
  //        <marginBuyingPower>0</marginBuyingPower>
  //        <cashBuyingPower>93921.44</cashBuyingPower>
  //        <dtMarginBuyingPower>0</dtMarginBuyingPower>
  //        <dtCashBuyingPower>0</dtCashBuyingPower>
  //        <shortAdjustBalance>0</shortAdjustBalance>
  //        <regtEquity>0</regtEquity>
  //        <regtEquityPercent>0</regtEquityPercent>
  //        <accountBalance>0</accountBalance>
  //     </Computed>
  //     <Margin>
  //        <dtCashOpenOrderReserve>0</dtCashOpenOrderReserve>
  //        <dtMarginOpenOrderReserve>0</dtMarginOpenOrderReserve>
  //     </Margin>
  //  </BalanceResponse>


  http.Free;
  json.Free;
  xml.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.