开云体育

ctrl + shift + ? for shortcuts
© 2025 开云体育

Re: 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

Join [email protected] to automatically receive all group messages.