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

ETrade View Portfolio

See more ETrade Examples

Gets portfolio information for the selected brokerage account.

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.HttpResponse,
  Chilkat.JsonObject;

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

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  jsonToken: TJsonObject;
  sandboxUrl: string;
  liveUrl: string;
  resp: THttpResponse;
  xml: TXml;
  accountId: Integer;
  positionId: Integer;
  expiryDay: Integer;
  expiryMonth: Integer;
  expiryYear: Integer;
  securityType: string;
  strikePrice: Integer;
  symbol: string;
  symbolDescription: string;
  dateAcquired: string;
  pricePaid: string;
  commissions: string;
  otherFees: string;
  quantity: Integer;
  positionIndicator: string;
  positionType: string;
  daysGain: string;
  daysGainPct: string;
  marketValue: string;
  totalCost: string;
  totalGain: string;
  totalGainPct: string;
  pctOfPortfolio: string;
  costPerShare: string;
  todayCommissions: Integer;
  todayFees: Integer;
  todayPricePaid: Integer;
  todayQuantity: Integer;
  change: string;
  changePct: string;
  lastTrade: string;
  lastTradeTime: Integer;
  volume: Integer;
  lotsDetails: string;
  quoteDetails: string;
  totalPages: Integer;
  i: Integer;
  count_i: Integer;

begin
  success := False;

  //  This 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 Authorization
  jsonToken := TJsonObject.Create;
  success := jsonToken.LoadFile('qa_data/tokens/etrade.json');
  if (success <> True) then
    begin
      WriteLn('Failed to load OAuth1 token');
      Exit;
    end;

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

  sandboxUrl := 'https://apisb.etrade.com/v1/accounts/{$accountIdKey}/portfolio';
  liveUrl := 'https://api.etrade.com/v1/accounts/{$accountIdKey}/portfolio';

  http.SetUrlVar('accountIdKey','6_Dpy0rmuQ9cu9IbTfvF2A');

  resp := THttpResponse.Create;
  success := http.HttpNoBody('GET',sandboxUrl,resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  //  Make sure a successful response was received.
  if (resp.StatusCode > 200) then
    begin
      WriteLn(resp.StatusLine);
      WriteLn(resp.Header);
      WriteLn(resp.BodyStr);
      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" standalone="yes"?>
  //  <PortfolioResponse>
  //      <AccountPortfolio>
  //          <accountId>83359700</accountId>
  //          <Position>
  //              <positionId>27005131</positionId>
  //              <Product>
  //                  <expiryDay>0</expiryDay>
  //                  <expiryMonth>0</expiryMonth>
  //                  <expiryYear>0</expiryYear>
  //                  <securityType>EQ</securityType>
  //                  <strikePrice>0</strikePrice>
  //                  <symbol>BR</symbol>
  //              </Product>
  //              <symbolDescription>BR</symbolDescription>
  //              <dateAcquired>-57600000</dateAcquired>
  //              <pricePaid>0</pricePaid>
  //              <commissions>0</commissions>
  //              <otherFees>0</otherFees>
  //              <quantity>10</quantity>
  //              <positionIndicator>TYPE2</positionIndicator>
  //              <positionType>LONG</positionType>
  //              <daysGain>-2.7999</daysGain>
  //              <daysGainPct>-1.3346</daysGainPct>
  //              <marketValue>207</marketValue>
  //              <totalCost>0</totalCost>
  //              <totalGain>207</totalGain>
  //              <totalGainPct>0</totalGainPct>
  //              <pctOfPortfolio>0.0018</pctOfPortfolio>
  //              <costPerShare>0</costPerShare>
  //              <todayCommissions>0</todayCommissions>
  //              <todayFees>0</todayFees>
  //              <todayPricePaid>0</todayPricePaid>
  //              <todayQuantity>0</todayQuantity>
  //              <Quick>
  //                  <change>-0.28</change>
  //                  <changePct>-1.3346</changePct>
  //                  <lastTrade>20.70</lastTrade>
  //                  <lastTradeTime>1343160240</lastTradeTime>
  //                  <volume>431591</volume>
  //              </Quick>
  //              <lotsDetails>https://apisb.etrade.com/v1/accounts/E5Nd4LJBsEi_UyHm4Vio9g/portfolio/27005131</lotsDetails>
  //              <quoteDetails>https://apisb.etrade.com/v1/market/quote/BR</quoteDetails>
  //          </Position>
  //          <Position>
  //              <positionId>4709131</positionId>
  //              <Product>
  //                  <expiryDay>0</expiryDay>
  //                  <expiryMonth>0</expiryMonth>
  //                  <expiryYear>0</expiryYear>
  //                  <securityType>EQ</securityType>
  //                  <strikePrice>0</strikePrice>
  //                  <symbol>GLD</symbol>
  //              </Product>
  //              <symbolDescription>GLD</symbolDescription>
  //              <dateAcquired>1335250800000</dateAcquired>
  //              <pricePaid>1</pricePaid>
  //              <commissions>5</commissions>
  //              <otherFees>0</otherFees>
  //              <quantity>2</quantity>
  //              <positionIndicator>TYPE1</positionIndicator>
  //              <positionType>LONG</positionType>
  //              <daysGain>0.9799</daysGain>
  //              <daysGainPct>0.3201</daysGainPct>
  //              <marketValue>307.04</marketValue>
  //              <totalCost>7</totalCost>
  //              <totalGain>300.04</totalGain>
  //              <totalGainPct>4286.2857</totalGainPct>
  //              <pctOfPortfolio>0.0028</pctOfPortfolio>
  //              <costPerShare>3.5</costPerShare>
  //              <todayCommissions>0</todayCommissions>
  //              <todayFees>0</todayFees>
  //              <todayPricePaid>0</todayPricePaid>
  //              <todayQuantity>0</todayQuantity>
  //              <Quick>
  //                  <change>0.49</change>
  //                  <changePct>0.3201</changePct>
  //                  <lastTrade>153.52</lastTrade>
  //                  <lastTradeTime>1343160000</lastTradeTime>
  //                  <volume>6510878</volume>
  //              </Quick>
  //              <lotsDetails>https://apisb.etrade.com/v1/accounts/E5Nd4LJBsEi_UyHm4Vio9g/portfolio/4709131</lotsDetails>
  //              <quoteDetails>https://apisb.etrade.com/v1/market/quote/GLD</quoteDetails>
  //          </Position>
  //          <Position>
  //              <positionId>4729131</positionId>
  //              <Product>
  //                  <expiryDay>0</expiryDay>
  //                  <expiryMonth>0</expiryMonth>
  //                  <expiryYear>0</expiryYear>
  //                  <securityType>EQ</securityType>
  //                  <strikePrice>0</strikePrice>
  //                  <symbol>MSFT</symbol>
  //              </Product>
  //              <symbolDescription>MSFT</symbolDescription>
  //              <dateAcquired>1335250800000</dateAcquired>
  //              <pricePaid>1</pricePaid>
  //              <commissions>5</commissions>
  //              <otherFees>0</otherFees>
  //              <quantity>1</quantity>
  //              <positionIndicator>TYPE2</positionIndicator>
  //              <positionType>LONG</positionType>
  //              <daysGain>-0.13</daysGain>
  //              <daysGainPct>-0.4439</daysGainPct>
  //              <marketValue>29.1499</marketValue>
  //              <totalCost>6</totalCost>
  //              <totalGain>23.1499</totalGain>
  //              <totalGainPct>385.8333</totalGainPct>
  //              <pctOfPortfolio>0.0002</pctOfPortfolio>
  //              <costPerShare>6</costPerShare>
  //              <todayCommissions>0</todayCommissions>
  //              <todayFees>0</todayFees>
  //              <todayPricePaid>0</todayPricePaid>
  //              <todayQuantity>0</todayQuantity>
  //              <Quick>
  //                  <change>-0.13</change>
  //                  <changePct>-0.4439</changePct>
  //                  <lastTrade>29.15</lastTrade>
  //                  <lastTradeTime>1343160000</lastTradeTime>
  //                  <volume>47711254</volume>
  //              </Quick>
  //              <lotsDetails>https://apisb.etrade.com/v1/accounts/E5Nd4LJBsEi_UyHm4Vio9g/portfolio/4729131</lotsDetails>
  //              <quoteDetails>https://apisb.etrade.com/v1/market/quote/MSFT</quoteDetails>
  //          </Position>
  //          <Position>
  //              <positionId>23971131</positionId>
  //              <Product>
  //                  <expiryDay>0</expiryDay>
  //                  <expiryMonth>0</expiryMonth>
  //                  <expiryYear>0</expiryYear>
  //                  <securityType>EQ</securityType>
  //                  <strikePrice>0</strikePrice>
  //                  <symbol>MSFT</symbol>
  //              </Product>
  //              <symbolDescription>MSFT</symbolDescription>
  //              <dateAcquired>-57600000</dateAcquired>
  //              <pricePaid>0</pricePaid>
  //              <commissions>0</commissions>
  //              <otherFees>0</otherFees>
  //              <quantity>-10</quantity>
  //              <positionIndicator>TYPE5</positionIndicator>
  //              <positionType>SHORT</positionType>
  //              <daysGain>1.30</daysGain>
  //              <daysGainPct>-0.4439</daysGainPct>
  //              <marketValue>-291.5</marketValue>
  //              <totalCost>0</totalCost>
  //              <totalGain>-291.5</totalGain>
  //              <totalGainPct>0</totalGainPct>
  //              <pctOfPortfolio>-0.0026</pctOfPortfolio>
  //              <costPerShare>0</costPerShare>
  //              <todayCommissions>0</todayCommissions>
  //              <todayFees>0</todayFees>
  //              <todayPricePaid>0</todayPricePaid>
  //              <todayQuantity>0</todayQuantity>
  //              <Quick>
  //                  <change>-0.13</change>
  //                  <changePct>-0.4439</changePct>
  //                  <lastTrade>29.15</lastTrade>
  //                  <lastTradeTime>1343160000</lastTradeTime>
  //                  <volume>47711254</volume>
  //              </Quick>
  //              <lotsDetails>https://apisb.etrade.com/v1/accounts/E5Nd4LJBsEi_UyHm4Vio9g/portfolio/23971131</lotsDetails>
  //              <quoteDetails>https://apisb.etrade.com/v1/market/quote/MSFT</quoteDetails>
  //          </Position>
  //          <Position>
  //              <positionId>4725131</positionId>
  //              <Product>
  //                  <expiryDay>0</expiryDay>
  //                  <expiryMonth>0</expiryMonth>
  //                  <expiryYear>0</expiryYear>
  //                  <securityType>EQ</securityType>
  //                  <strikePrice>0</strikePrice>
  //                  <symbol>RBL</symbol>
  //              </Product>
  //              <symbolDescription>RBL</symbolDescription>
  //              <dateAcquired>1335250800000</dateAcquired>
  //              <pricePaid>1</pricePaid>
  //              <commissions>5</commissions>
  //              <otherFees>0</otherFees>
  //              <quantity>2</quantity>
  //              <positionIndicator>TYPE2</positionIndicator>
  //              <positionType>LONG</positionType>
  //              <daysGain>-0.52</daysGain>
  //              <daysGainPct>-1.0252</daysGainPct>
  //              <marketValue>50.20</marketValue>
  //              <totalCost>7</totalCost>
  //              <totalGain>43.20</totalGain>
  //              <totalGainPct>617.1428</totalGainPct>
  //              <pctOfPortfolio>0.0004</pctOfPortfolio>
  //              <costPerShare>3.5</costPerShare>
  //              <todayCommissions>0</todayCommissions>
  //              <todayFees>0</todayFees>
  //              <todayPricePaid>0</todayPricePaid>
  //              <todayQuantity>0</todayQuantity>
  //              <Quick>
  //                  <change>-0.26</change>
  //                  <changePct>-1.0252</changePct>
  //                  <lastTrade>25.10</lastTrade>
  //                  <lastTradeTime>1343159760</lastTradeTime>
  //                  <volume>11827</volume>
  //              </Quick>
  //              <lotsDetails>https://apisb.etrade.com/v1/accounts/E5Nd4LJBsEi_UyHm4Vio9g/portfolio/4725131</lotsDetails>
  //              <quoteDetails>https://apisb.etrade.com/v1/market/quote/RBL</quoteDetails>
  //          </Position>
  //          <Position>
  //              <positionId>20841131</positionId>
  //              <Product>
  //                  <expiryDay>0</expiryDay>
  //                  <expiryMonth>0</expiryMonth>
  //                  <expiryYear>0</expiryYear>
  //                  <securityType>EQ</securityType>
  //                  <strikePrice>0</strikePrice>
  //                  <symbol>RPI</symbol>
  //              </Product>
  //              <symbolDescription>RPI</symbolDescription>
  //              <dateAcquired>1335250800000</dateAcquired>
  //              <pricePaid>7.5599</pricePaid>
  //              <commissions>5</commissions>
  //              <otherFees>45</otherFees>
  //              <quantity>2</quantity>
  //              <positionIndicator>TYPE2</positionIndicator>
  //              <positionType>LONG</positionType>
  //              <daysGain>0</daysGain>
  //              <daysGainPct>0</daysGainPct>
  //              <marketValue>2.8599</marketValue>
  //              <totalCost>65.12</totalCost>
  //              <totalGain>-62.2599</totalGain>
  //              <totalGainPct>-95.6081</totalGainPct>
  //              <pctOfPortfolio>0.00</pctOfPortfolio>
  //              <costPerShare>32.56</costPerShare>
  //              <todayCommissions>0</todayCommissions>
  //              <todayFees>0</todayFees>
  //              <todayPricePaid>0</todayPricePaid>
  //              <todayQuantity>0</todayQuantity>
  //              <Quick>
  //                  <change>0</change>
  //                  <changePct>0</changePct>
  //                  <lastTrade>1.43</lastTrade>
  //                  <lastTradeTime>1343150700</lastTradeTime>
  //                  <volume>1803</volume>
  //              </Quick>
  //              <lotsDetails>https://apisb.etrade.com/v1/accounts/E5Nd4LJBsEi_UyHm4Vio9g/portfolio/20841131</lotsDetails>
  //              <quoteDetails>https://apisb.etrade.com/v1/market/quote/RPI</quoteDetails>
  //          </Position>
  //          <Position>
  //              <positionId>4732131</positionId>
  //              <Product>
  //                  <expiryDay>0</expiryDay>
  //                  <expiryMonth>0</expiryMonth>
  //                  <expiryYear>0</expiryYear>
  //                  <securityType>EQ</securityType>
  //                  <strikePrice>0</strikePrice>
  //                  <symbol>RXD</symbol>
  //              </Product>
  //              <symbolDescription>RXD</symbolDescription>
  //              <dateAcquired>1335250800000</dateAcquired>
  //              <pricePaid>1</pricePaid>
  //              <commissions>2.99</commissions>
  //              <otherFees>0.0099</otherFees>
  //              <quantity>-3</quantity>
  //              <positionIndicator>TYPE5</positionIndicator>
  //              <positionType>SHORT</positionType>
  //              <daysGain>-1.296</daysGain>
  //              <daysGainPct>2.6799</daysGainPct>
  //              <marketValue>-49.6559</marketValue>
  //              <totalCost>0</totalCost>
  //              <totalGain>-49.6559</totalGain>
  //              <totalGainPct>-827.60</totalGainPct>
  //              <pctOfPortfolio>-0.0004</pctOfPortfolio>
  //              <costPerShare>0</costPerShare>
  //              <todayCommissions>0</todayCommissions>
  //              <todayFees>0</todayFees>
  //              <todayPricePaid>0</todayPricePaid>
  //              <todayQuantity>0</todayQuantity>
  //              <Quick>
  //                  <change>0.432</change>
  //                  <changePct>2.6799</changePct>
  //                  <lastTrade>16.552</lastTrade>
  //                  <lastTradeTime>1343157480</lastTradeTime>
  //                  <volume>2200</volume>
  //              </Quick>
  //              <lotsDetails>https://apisb.etrade.com/v1/accounts/E5Nd4LJBsEi_UyHm4Vio9g/portfolio/4732131</lotsDetails>
  //              <quoteDetails>https://apisb.etrade.com/v1/market/quote/RXD</quoteDetails>
  //          </Position>
  //          <totalPages>1</totalPages>
  //      </AccountPortfolio>
  //  </PortfolioResponse>
  //  

  xml := TXml.Create;
  xml.LoadXml(resp.BodyStr);
  WriteLn(xml.GetXml());

  accountId := xml.GetChildIntValue('AccountPortfolio|accountId');
  i := 0;
  count_i := xml.NumChildrenHavingTag('AccountPortfolio|Position');
  while i < count_i do
    begin
      xml.I := i;
      positionId := xml.GetChildIntValue('AccountPortfolio|Position[i]|positionId');
      expiryDay := xml.GetChildIntValue('AccountPortfolio|Position[i]|Product|expiryDay');
      expiryMonth := xml.GetChildIntValue('AccountPortfolio|Position[i]|Product|expiryMonth');
      expiryYear := xml.GetChildIntValue('AccountPortfolio|Position[i]|Product|expiryYear');
      securityType := xml.GetChildContent('AccountPortfolio|Position[i]|Product|securityType');
      strikePrice := xml.GetChildIntValue('AccountPortfolio|Position[i]|Product|strikePrice');
      symbol := xml.GetChildContent('AccountPortfolio|Position[i]|Product|symbol');
      symbolDescription := xml.GetChildContent('AccountPortfolio|Position[i]|symbolDescription');
      dateAcquired := xml.GetChildContent('AccountPortfolio|Position[i]|dateAcquired');
      pricePaid := xml.GetChildContent('AccountPortfolio|Position[i]|pricePaid');
      commissions := xml.GetChildContent('AccountPortfolio|Position[i]|commissions');
      otherFees := xml.GetChildContent('AccountPortfolio|Position[i]|otherFees');
      quantity := xml.GetChildIntValue('AccountPortfolio|Position[i]|quantity');
      positionIndicator := xml.GetChildContent('AccountPortfolio|Position[i]|positionIndicator');
      positionType := xml.GetChildContent('AccountPortfolio|Position[i]|positionType');
      daysGain := xml.GetChildContent('AccountPortfolio|Position[i]|daysGain');
      daysGainPct := xml.GetChildContent('AccountPortfolio|Position[i]|daysGainPct');
      marketValue := xml.GetChildContent('AccountPortfolio|Position[i]|marketValue');
      totalCost := xml.GetChildContent('AccountPortfolio|Position[i]|totalCost');
      totalGain := xml.GetChildContent('AccountPortfolio|Position[i]|totalGain');
      totalGainPct := xml.GetChildContent('AccountPortfolio|Position[i]|totalGainPct');
      pctOfPortfolio := xml.GetChildContent('AccountPortfolio|Position[i]|pctOfPortfolio');
      costPerShare := xml.GetChildContent('AccountPortfolio|Position[i]|costPerShare');
      todayCommissions := xml.GetChildIntValue('AccountPortfolio|Position[i]|todayCommissions');
      todayFees := xml.GetChildIntValue('AccountPortfolio|Position[i]|todayFees');
      todayPricePaid := xml.GetChildIntValue('AccountPortfolio|Position[i]|todayPricePaid');
      todayQuantity := xml.GetChildIntValue('AccountPortfolio|Position[i]|todayQuantity');
      change := xml.GetChildContent('AccountPortfolio|Position[i]|Quick|change');
      changePct := xml.GetChildContent('AccountPortfolio|Position[i]|Quick|changePct');
      lastTrade := xml.GetChildContent('AccountPortfolio|Position[i]|Quick|lastTrade');
      lastTradeTime := xml.GetChildIntValue('AccountPortfolio|Position[i]|Quick|lastTradeTime');
      volume := xml.GetChildIntValue('AccountPortfolio|Position[i]|Quick|volume');
      lotsDetails := xml.GetChildContent('AccountPortfolio|Position[i]|lotsDetails');
      quoteDetails := xml.GetChildContent('AccountPortfolio|Position[i]|quoteDetails');
      i := i + 1;
    end;

  totalPages := xml.GetChildIntValue('AccountPortfolio|totalPages');

  WriteLn('Success.');


  http.Free;
  jsonToken.Free;
  resp.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.