Perl
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
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";