---
title: Lanzar Órdenes Manuales con AmiBroker
date: 2005-07-29T00:00:00Z
modified: 2024-07-05T16:22:56Z
permalink: "https://www.x-trader.net/lanzar-ordenes-manuales-con-amibroker/"
type: post
status: publish
excerpt: En este artículo os enseñamos cómo se pueden lanzar órdenes a la TWS de forma manual desde AmiBroker, esto es, teniendo el gráfico delante y sin tener que cambiar de ventana para introducir la orden.
wpid: 315
categories:
  - Software y Tecnología
tags:
  - AmiBroker
  - Tutoriales de Trading
  - TWS Interactive Brokers
featured_image: "https://www.x-trader.net/wp-content/uploads/2005/06/intro_amibroker.jpg"
author: X-Trader
---

Si bien por el momento no nos ha dado tiempo a terminar el artículo sobre el lanzamiento de ordenes automático con AmiBroker, si podemos avanzaros cómo se pueden lanzar órdenes de forma manual teniendo el gráfico delante, esto es, sin tener que cambiar de ventana para introducir la orden. Los pasos a seguir son los siguientes:

1\. Descargar un plugin denominado IBController desde [http://www.amibroker.com/at/at1007beta.exe](http://www.amibroker.com/at/at1007beta.exe) (si bien se encuentra en la versión 1.0.7. regularmente se actualiza corrigiendo algunos bugs. Para estar al tanto de nuevas versiones, visitad [http://www.amibroker.com/at/](http://www.amibroker.com/at/)). Se trata un controlador en fase beta si bien lo he estado probando y parece que funciona perfectamente. Una vez descargado lo ejecutamos, seguimos los pasos de instalación y ya tendremos instalado el plugin

2\. Ahora debemos crear un bloque de botones en AmiBroker para disparar las órdenes. Para ello, debemos crear un indicador para lo que iremos a Analysis -> Formula Editor. Ahi debemos copiar y pegar el código que teneís al [final](#code) de este artículo; seguidamente lo guardaremos con el nombre de TWS Trigger

3\. Bien, ya sólo tenemos que ir a la sección Custom dentro de la pestaña Charts y ahi nos aparecerá el indicador. Simplemente debemos insertarlo como un indicador más sobre el gráfico con el que queramos operar. En ese momento la TWS nos pedirá aceptar la conexión entrante; le decimos que sí y nos saltará una ventana sobre el gráfico como la que pueden ver en la siguiente imagen:

![](https://www.x-trader.net/wp-content/uploads/2005/07/001-fit-499x328-1.jpg "Image")

Asimismo, os saltará una ventana con el IB Controller, en la que os aparecerá toda la información acerca de las órdenes que hayais enviado, asi como los errores que se produzcan.

La primera vez que realiceis este proceso tendreís que introducir un código de Unlock (desbloqueo) gratuito en el IB Controller pues de lo contrario no os dejará lanzar las ordenes a la TWS; se trata de un procedimiento que garantiza al autor del programa que no le demandareis cuando perdais 1000 euros por culpa de su software ;-). Para obtenerlo, debeis dirigiros a [http://www.amibroker.com/at/agreement.php](http://www.amibroker.com/at/agreement.php) y en la parte inferior indicar vuestro nombre y e-mail. Eso si, para ahorraros tiempo, podeis probar con el mio que es IB-349-WXP-94-AW

Una vez que tenemos todo configurado, veamos ahora qué hace cada una de las líneas de la ventana de la imagen anterior:

**Place Order**: si hacemos click en Click here to place order nos lanzará la orden que hayamos configurado en las líneas inferiores; por tanto, este es el último botón que debemos pulsar tras verificar que todo es correcto.

**Mode**: permite decidir si queremos modificar una orden existente (Modify existing) o poner una orden nueva (Always place a new order)

**Action**: no creo que necesite mucha descripción. Buy = Compra / Sell = Venta / SShort = venta en descubierto para acciones

**Order Type**: tampoco necesita mucha explicación. MKT = A Mercado / LMT = Limitada / STP = Stop

**Time In Force**: duración de la orden. DAY = hasta el final de la sesión / GTC = Válida hasta su cancelación / IOC = Immediate Or Cancel – Permite que la parte no ejecutada en el momento de introducir la orden se cancele.

**Ticker**: el correspondiente al gráfico sobre el que estemos trabajando, aunque podemos modificarlo

**Number of Shares**: número de contratos o acciones

**Limit Price Offset**: número de ticks que queremos sumar al precio actual para calcular el precio de la orden limitada

**Stop Price Offset**: lo mismo pero para el precio de la orden stop

**Transmit**: este parámetro es quizás el más importante. Si ponemos que no transmita la orden, al lanzarla ésta aparecerá en la TWS pero no será ejecutada lo que puede venir bien para hacer experimentos; por el contrario, si seleccionamos Transmit cualquier orden que lancemos será ejecutada.

**Cancel Order**: para cancelar órdenes

Si en algún momento nos cansaramos de la ventana para cerrar ordenes simplemente debemos cerrar la subventana que le corresponde como indicador; posiblemente esto se vea más claro en la siguiente imagen: al pasar el ratón por la zona sombreada en rojo les aparecerá el menu que les permitirá cerrar el TWS Trigger. De lo contrario, si intentan cerrar la ventana de IB Controller, ésta volverá a aparecer continuamente porque sigue insertando un indicador en el gráfico que lo ejecuta.

![](https://www.x-trader.net/wp-content/uploads/2005/07/002-fit-499x326-1.jpg "Image")

 

A la vuelta de las vacaciones, espero poder contarles cómo lanzar ordenes automatizadas, sin intervención manual, desde AmiBroker y también desde Visual Chart.

Un cordial saludo (y que pasen unas felices vacaciones)
X-Trader

**ARTÍCULOS RELACIONADOS**  [AmiBroker](https://www.x-trader.net/amibroker/) [DT OScillator para AmiBroker](https://www.x-trader.net/dt-oscillator-para-amibroker/)[](https://www.x-trader.net/amibroker/)

<a name="code" title="code"></a>**CÓDIGO PARA TWS TRIGGER**

// Param block 
TriggerOrder= ParamTrigger(«Place order»,«Click here to place order»); 
Mode=ParamToggle(«Mode»,«Modify existing|Always place new order»); 
ACT = ParamList(«Action», «BUY|SELL|SSHORT»); 
OT = ParamList(«Order Type», «MKT|LMT|STP»); 
TIF = ParamList(«Time In Force», «DAY|GTC|IOC»); 
Ticker = ParamStr(«Ticker»,Name()); 
NumShares = Param(«Number of Shares»,10,10,100,10); 
LimitPrice = LastValue(**C**) + Param(«Limit Price offset»,0,-0.1,0.1,0.01); 
StopPrice = LastValue(**C**) + Param(«Stop price offset»,0,-0.1,0.1,0.01); 
Transmit = ParamToggle(«Transmit»,«Do NOT transmit|Transmit»,0); 
TriggerCancel = ParamTrigger(«Cancel Order»,«Click here to Cancel order»);

Msg = «»; // this variable stores error message text

// create instance of trading interface 
ibc = GetTradingInterface(«IB»);

// retrieve orderID from previous run, will be empty if no order was placed before 
OrderID = StaticVarGetText(«OrderID»+Ticker);

**if**( TriggerOrder ) 
{ 
// check if we are connected OK 
**if**( ibc.IsConnected() ) 
{ 
**if**( Mode == 1 ) OrderID = «»; // if mode set to ‘always new’ then clear orderid

// place orders only if we do not have already open position on this symbol 
// place or modify the order – don’t transmit yet 
OrderID = ibc.ModifyOrder( OrderID, Ticker, 
ACT, NumShares, OT, LimitPrice, StopPrice, TIF, Transmit);

// store orderID for next run so we know which order to modify

StaticVarSetText(«OrderID»+Ticker, OrderID);

**if**( Mode == 1 ) 
Msg = «New order has been placed with ID = «; 
**else** 
Msg = «Order placed/modified with ID = «;

Msg = Msg + OrderID + » on « + Now(); 
} 
**else** 
{ 
Msg = «Placing order failed because of no connection to TWS»; 
} 
}

**if**( TriggerCancel ) 
{ 
**if**( OrderId != «» ) 
{ 
**if**( ibc.CancelOrder( OrderId ) ) 
Msg = «Request to cancel order « + OrderID + » sent successfully»; 
**else** 
Msg = «Request to cancel order « + OrderID + » failed.»; 
} 
**else** 
Msg = «Can not cancel order becase OrderID is empty»;

}

// monitoring code 
**Title** = 
Msg + 
«nLast TWS message: «+ ibc.GetLastError(0) + 
«nAvailable funds: « + ibc.GetAccountValue(«AvailableFunds»)+ 
» Gross Pos. Value: « + ibc.GetAccountValue(«GrossPositionValue»)+ 
«nOrderID = «+OrderId+ 
«nTicker = «+Ticker+ 
«nAction = «+ACT+ 
«nShares = «+NumToStr(NumShares,1.0)+ 
«nOrderType = «+OT+ 
«nLimitPrice = «+NumToStr(LimitPrice,1.3)+ 
«nStopPrice = «+NumToStr(StopPrice,1.3)+ 
«nTimeInForce= «+TIF+ 
«nTransmit = «+NumToStr(Transmit,1.0)+«n»+ 
«nGetStatus = «+ibc.GetStatus( OrderID )+ 
«nGetPositionSize = «+ibc.GetPositionSize( Ticker )+ 
«nIsConnected = «+NumToStr(ibc.IsConnected(),1.0);

[ ](https://www.x-trader.net/amibroker/)

## Topics

**Categorías:** [Software y Tecnología](https://www.x-trader.net/wp-content/uploads/wp-mfa-exports/taxonomy/category/software-y-tecnologia.md)

**Etiquetas:** [AmiBroker](https://www.x-trader.net/wp-content/uploads/wp-mfa-exports/taxonomy/post_tag/amibroker.md), [Tutoriales de Trading](https://www.x-trader.net/wp-content/uploads/wp-mfa-exports/taxonomy/post_tag/tutoriales-de-trading.md), [TWS Interactive Brokers](https://www.x-trader.net/wp-content/uploads/wp-mfa-exports/taxonomy/post_tag/tws-interactive-brokers.md)