@TracerBullet
I really do not understand much of the coding, but can do little coding...learnt from gogling,trial and error, but I developed my trading system which places order to system but not able selectively cancel open order from order book, but I see orderman able to read the "Oderbook", so please guide with an example how to cancel order by AHK standalone, for example Crudeoil from orderbook, i.e if I run AHK it should open orderbook and cancel only crudeoil.
I find following codes from Order folder hope will easy ur effort....
/*
Order Details read from orderbook
*/
class OrderDetailsClass{
orderType := ""
buySell := ""
tradingSymbol := ""
totalQty := ""
pendingQty := ""
price := ""
triggerPrice := ""
averagePrice := ""
status := ""
nowOrderNo := ""
nowUpdateTime := ""
rejectionReason := ""
status2 := ""
isClosed(){ // Indicates whether order is in Order Book > Completed Orders
return this.status2 == "C"
}
isOpen(){ // Indicates whether order is in Order Book > Open Orders
return this.status2 == "O"
}
isComplete(){ // Indicates whether order status is "Complete"
global
return this.status == controlObj.ORDER_STATUS_COMPLETE
}
}
/*ffffffffffffffffffffffffff
*/
selectOpenOrder( searchMeOrderNo ){
global controlObj
this.open()
orderNoColIndex := this._openOrdersColumnIndex.nowOrderNo // column number containing NOW Order no in Order Book > open orders
listID := controlObj.ORDER_BOOK_OPEN_LIST
title := controlObj.ORDER_BOOK_TITLE
Loop, 3{ // Select order in Order Book. Search 3 times as a precaution
ControlGet, RowCount, List, Count, % listID, % title // No of rows in open orders
ControlSend, % listID, {Home 2}, % title // Start from top and search for order
Loop, %RowCount%{ // Get order number of selected row and compare
ControlGet, RowOrderNo, List, Selected Col%orderNoColIndex%, % listID, % title
if( RowOrderNo == searchMeOrderNo ){ // Found and Selected
return true
}
ControlSend, % listID, {Down}, % title // Move Down to next row if not found yet
}
}
return false
}
/* Clicks on cancel button in orderbook, assuming order is already selected
*/
cancelSelectedOpenOrder(){
global controlObj
window := controlObj.ORDER_BOOK_CANCEL_CONFIRMATION_TITLE
windowText := controlObj.ORDER_BOOK_CANCEL_CONFIRMATION_TEXT
ControlClick, % controlObj.ORDER_BOOK_CANCEL, % controlObj.ORDER_BOOK_TITLE,,,, NA // Click Cancel
WinWait, %window%, %windowText%, 1
WinSet, Transparent, 1, %window%, %windowText%
ControlClick, % controlObj.ORDER_BOOK_CANCEL_OK, %window%, %windowText%,,, NA // Click ok
}
/*fffffffffffffffffffffffffffffffff
*/
/* Cancel Order through orderbook
Returns true if order is Closed else false
*/
cancel(){
global orderbookObj
if( !this.isOpen() ) // Only cancel open orders
return true
Loop, 5 { // Try upto 5 times
selected := orderbookObj.selectOpenOrder( this._orderDetails.nowOrderNo )
if( selected ){
orderbookObj.cancelSelectedOpenOrder()
}
// Wait for some time for Orderbook to update
Sleep, 250 // orderbookObj.read() and orderbookObj.selectOpenOrder() should happen together
// else selectOpenOrder() will be on old data
orderbookObj.read()
this.reloadDetails()
if( this.isClosed() ){ // verify cancelled
_orderDetails == -1
return true
}
}
if( !selected ){
orderno := this._orderDetails.nowOrderNo
MsgBox, Order %orderno% Not Found in OrderBook > Open Orders
}
return false // cancel failed
}