Sample code for 30+ languages & platforms
Perl

ETrade Preview Order

See more ETrade Examples

The Preview Order API is used to submit an order request for preview before placing it.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

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

$http = chilkat::CkHttp->new();

$http->put_OAuth1(1);
$http->put_OAuthVerifier("");
$http->put_OAuthConsumerKey("ETRADE_CONSUMER_KEY");
$http->put_OAuthConsumerSecret("ETRADE_CONSUMER_SECRET");

# Load the access token previously obtained via the OAuth1 Authorization
$jsonToken = chilkat::CkJsonObject->new();
$success = $jsonToken->LoadFile("qa_data/tokens/etrade.json");
if ($success != 1) {
    print "Failed to load OAuth1 token" . "\r\n";
    exit;
}

$http->put_OAuthToken($jsonToken->stringOf("oauth_token"));
$http->put_OAuthTokenSecret($jsonToken->stringOf("oauth_token_secret"));

$sandboxUrl = "https://apisb.etrade.com/v1/accounts/{$accountIdKey}/orders/preview";
$liveUrl = "https://api.etrade.com/v1/accounts/{$accountIdKey}/orders/preview";

$http->SetUrlVar("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 = chilkat::CkXml->new();
$xml->put_Tag("PreviewOrderRequest");
$xml->UpdateChildContent("orderType","EQ");
$xml->UpdateChildContent("clientOrderId","sdfer333");
$xml->UpdateChildContent("Order|allOrNone","false");
$xml->UpdateChildContent("Order|priceType","LIMIT");
$xml->UpdateChildContent("Order|orderTerm","GOOD_FOR_DAY");
$xml->UpdateChildContent("Order|marketSession","REGULAR");
$xml->UpdateChildContent("Order|stopPrice","");
$xml->UpdateChildContent("Order|limitPrice","188.51");
$xml->UpdateChildContent("Order|Instrument|Product|securityType","EQ");
$xml->UpdateChildContent("Order|Instrument|Product|symbol","FB");
$xml->UpdateChildContent("Order|Instrument|orderAction","BUY");
$xml->UpdateChildContent("Order|Instrument|quantityType","QUANTITY");
$xml->UpdateChildContent("Order|Instrument|quantity","10");
$xml->put_EmitCompact(1);

$resp = chilkat::CkHttpResponse->new();
$success = $http->HttpStr("POST",$sandboxUrl,$xml->getXml(),"utf-8","application/xml",$resp);
if ($success == 0) {
    print $http->lastErrorText() . "\r\n";
    exit;
}

# Make sure a successful response was received.
if ($resp->get_StatusCode() > 200) {
    print $resp->statusLine() . "\r\n";
    print $resp->header() . "\r\n";
    print $resp->bodyStr() . "\r\n";
    exit;
}

# 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>

$xml->LoadXml($resp->bodyStr());
print $xml->getXml() . "\r\n";

$orderType = $xml->getChildContent("orderType");
$totalOrderValue = $xml->getChildContent("totalOrderValue");
$orderTerm = $xml->getChildContent("Order|orderTerm");
$priceType = $xml->getChildContent("Order|priceType");
$limitPrice = $xml->getChildContent("Order|limitPrice");
$stopPrice = $xml->GetChildIntValue("Order|stopPrice");
$marketSession = $xml->getChildContent("Order|marketSession");
$allOrNone = $xml->getChildContent("Order|allOrNone");
$symbol = $xml->getChildContent("Order|Instrument|Product|symbol");
$securityType = $xml->getChildContent("Order|Instrument|Product|securityType");
$symbolDescription = $xml->getChildContent("Order|Instrument|symbolDescription");
$orderAction = $xml->getChildContent("Order|Instrument|orderAction");
$quantityType = $xml->getChildContent("Order|Instrument|quantityType");
$quantity = $xml->GetChildIntValue("Order|Instrument|quantity");
$cancelQuantity = $xml->getChildContent("Order|Instrument|cancelQuantity");
$reserveOrder = $xml->getChildContent("Order|Instrument|reserveOrder");
$reserveQuantity = $xml->getChildContent("Order|Instrument|reserveQuantity");
$i = 0;
$count_i = $xml->NumChildrenHavingTag("Order|messages|Message");
while ($i < $count_i) {
    $xml->put_I($i);
    $code = $xml->GetChildIntValue("Order|messages|Message[i]|code");
    $description = $xml->getChildContent("Order|messages|Message[i]|description");
    $v_type = $xml->getChildContent("Order|messages|Message[i]|type");
    $i = $i + 1;
}

$egQual = $xml->getChildContent("Order|egQual");
$estimatedCommission = $xml->getChildContent("Order|estimatedCommission");
$estimatedTotalAmount = $xml->getChildContent("Order|estimatedTotalAmount");
$netPrice = $xml->GetChildIntValue("Order|netPrice");
$netBid = $xml->GetChildIntValue("Order|netBid");
$netAsk = $xml->GetChildIntValue("Order|netAsk");
$gcd = $xml->GetChildIntValue("Order|gcd");
$previewId = $xml->GetChildIntValue("PreviewIds|previewId");
$previewTime = $xml->getChildContent("previewTime");
$dstFlag = $xml->getChildContent("dstFlag");
$accountId = $xml->GetChildIntValue("accountId");
$optionLevelCd = $xml->GetChildIntValue("optionLevelCd");
$marginLevelCd = $xml->getChildContent("marginLevelCd");
$ahDisclosureFlag = $xml->getChildContent("Disclosure|ahDisclosureFlag");
$aoDisclosureFlag = $xml->getChildContent("Disclosure|aoDisclosureFlag");
$conditionalDisclosureFlag = $xml->getChildContent("Disclosure|conditionalDisclosureFlag");
$ehDisclosureFlag = $xml->getChildContent("Disclosure|ehDisclosureFlag");
$currentBp = $xml->getChildContent("cashBpDetails|settled|currentBp");
$currentNetBp = $xml->getChildContent("cashBpDetails|settled|currentNetBp");
$currentOor = $xml->getChildContent("cashBpDetails|settled|currentOor");
$currentOrderImpact = $xml->getChildContent("cashBpDetails|settled|currentOrderImpact");
$netBp = $xml->getChildContent("cashBpDetails|settled|netBp");
$currentBp = $xml->getChildContent("cashBpDetails|settledUnsettled|currentBp");
$currentNetBp = $xml->getChildContent("cashBpDetails|settledUnsettled|currentNetBp");
$currentOor = $xml->getChildContent("cashBpDetails|settledUnsettled|currentOor");
$currentOrderImpact = $xml->getChildContent("cashBpDetails|settledUnsettled|currentOrderImpact");
$netBp = $xml->getChildContent("cashBpDetails|settledUnsettled|netBp");

print "Success." . "\r\n";