Keyboard Shortcuts
ctrl + shift + ? :
Show all keyboard shortcuts
ctrl + g :
Navigate to a group
ctrl + shift + f :
Find
ctrl + / :
Quick actions
esc to dismiss
Likes
Search
VB Sample Project: How To Place An Order [Code]
marinindextrader
Put a Text1 textbox on your form.
Put a Command1 command button on your form Add a Simple BAS Module Stick this in the Form: (and the rest in the Module) Private Sub Command1_Click() 'here I have just plugged in literal values for the example 'of course you could pull these in as variables or control properties 'such as a combo box text or what not... Call PlaceNewOrder("BUY", 1, "ES", "FUT", "200209", 0, "", "GLOBEX", "", "MKT", 0, 0) End Sub Private Sub Form_Load() 'connection call Tws1.Connect "", 7496 'initialize your module variables Call InitVarsNewOrderMod Text1 = "PLACE ORDER DEMO:" & vbCrLf & vbCrLf & _ "When you click Command1, a market order will fire off for 1 Contract of September " & _ "ES. Keep clicking it and it will keep buying one at market. Each time you click, " & _ "This box will fill with the order information stored in your array" End Sub 'and use this for when you log out and relog in 'you can conditionally test next valid id in the module Private Sub Tws1_nextValidId(ByVal id As Long) 'call a module level Sub that captures the IB id on log in Call CaptureID(id) End Sub 'now create a private sub that will handle the order routines 'the array captures the order info and stores it for you 'good idea IMHO to internally track this info and not rely 'on IB soley Private Sub PlaceNewOrder(ByVal action As String, ByVal quantity As Long, _ ByVal symbol As String, ByVal secType As String, ByVal expiry As String, _ ByVal strike As Double, ByVal right As String, ByVal exchange As String, _ ByVal curency As String, ByVal orderType As String, ByVal lmtPrice As Double, _ ByVal auxPrice As Double) Dim mirror(12) As Variant 'left this as zero based for clarity Dim newID As Long 'assign all of the arguements to the array 'not the conspicuous absence of id in the arguements mirror(1) = action: mirror(2) = quantity: mirror(3) = symbol mirror(4) = secType: mirror(5) = expiry: mirror(6) = strike: mirror(7) = right: mirror(8) = exchange: mirror(9) = curency: mirror(10) = orderType: mirror(11) = lmtPrice: mirror(12) = auxPrice 'pass the array out to the module newID = Get_Set_NewOrderID(mirror) 'place the order Call Tws1.placeOrder(newID, action, quantity, symbol, secType, expiry, strike, right, exchange, _ curency, orderType, price, auxPrice) End Sub 'MODULE CODE STARTS HERE Option Explicit Private m_arrOrders() As Variant 'master array Private m_myID As Long 'your starting point Private m_theirID As Long 'thier starting point Private m_nextID 'next id your going to use Private m_incrament As Integer 'a variable to incrament by any value; 1, 5, 10 etc ' 'call on form load Sub InitVarsNewOrderMod() m_myID = 3030 'set your starting level here ReDim m_arrOrders(12, 0) m_incrament = 10 'optional to incrament by other than 1 End Sub Sub CaptureID(ByVal theirID As Long) 'capture theirs at log on m_theirID = theirID End Sub 'store your order info and give an id back to the calling sub 'this is the workhorse Function Get_Set_NewOrderID(ByVal mirror As Variant) As Long Dim iTemp As Integer 'find the proper id; this looks a little convaluted but stare at it 'you will see that if the next available IB id is greater than your starting 'point, it will back up one then add your incrament 'otherwise it just keeps ripping out new id's per your incrament If m_theirID < m_myID Then m_nextID = m_myID m_myID = m_myID + m_incrament Else m_myID = m_theirID - 1 + m_incrament m_nextID = m_myID m_myID = m_myID + m_incrament End If 'assign the id to the first element of the array m_arrOrders(0, UBound(m_arrOrders, 2)) = m_nextID 'assign the mirror to the rest of the array For iTemp = 1 To UBound(m_arrOrders) m_arrOrders(iTemp, UBound(m_arrOrders, 2)) = mirror(iTemp) Next iTemp 'redim and preserve your array in preperation for the next order ReDim Preserve m_arrOrders(12, UBound(m_arrOrders, 2) + 1) 'display your array in the text box Call DisplayArray 'finally send the new id back to the calling sub to actually make the order Get_Set_NewOrderID = m_nextID End Function 'and a sub to display your array information Private Sub DisplayArray() Dim iTemp As Integer, iTemp2 As Integer Dim OrderString As String 'loop through the array and build a string to display For iTemp = 0 To UBound(m_arrOrders, 2) - 1 For iTemp2 = 0 To UBound(m_arrOrders) Select Case iTemp2 Case LBound(m_arrOrders) 'place the number of orders at the begining of each line OrderString = OrderString & "Trade: " & iTemp + 1 & ", " & _ "ID# " & m_arrOrders(iTemp2, iTemp) & ", " Case UBound(m_arrOrders) 'insert a line return character when you reach the end of the 'first trade OrderString = OrderString & m_arrOrders(iTemp2, iTemp) & vbCrLf Case Else OrderString = OrderString & m_arrOrders(iTemp2, iTemp) & ", " End Select Next iTemp2 Next iTemp 'display the string Form1.Text1 = OrderString End Sub |
marinindextrader
I wrote:
"Put a Text1 textbox on your form. Put a Command1 command button on your form Add a Simple BAS Module" And lamed out by not saying: Make sure you change the multiline property of your text box to True....The default is false Unless multi-line is selected you get these funney looking black box like charecters in your string and it just runs on.. Scott |
Reveca
I got the error of this code:
toggle quoted message
Show quoted text
Call Tws1.placeOrder(newID, action, quantity, symbol, secType, expiry, strike, right, exchange, curency, orderType, price, auxPrice) Teh error show is Argument not Optional. How to fix this? Thank you. sincerely yours, Reveca Pescadero --- In TWSAPI@..., "marinindextrader" <marinindextrader@...> wrote:
|
Reveca
That error message means that you haven’t supplied enough arguments to the method call. If you look at the definition for placeOrder you’ll find that there are another six arguments that you missed. Richard From: Reveca Sent: Friday, March 18, 2011 4:12 PM To: TWSAPI@... Subject: [TWS API] Re: VB Sample Project: How To Place An Order [Code] I got the error of this code: Call Tws1.placeOrder(newID, action, quantity, symbol, secType, expiry, strike, right, exchange, curency, orderType, price, auxPrice) Teh error show is Argument not Optional. How to fix this? Thank you. sincerely yours, Reveca Pescadero --- In mailto:TWSAPI%40yahoogroups.com, "marinindextrader" <marinindextrader@...> wrote:
[Non-text portions of this message have been removed] |
to navigate to use esc to dismiss