Novato muy Novato en MQ4

Todo sobre el trading en los mercados financieros: funcionamiento, dudas, noticias, etc.
Responder
ropero
Mensajes: 4
Registrado: 13 Jun 2008 19:59

Novato muy Novato en MQ4

Mensaje por ropero »

Hola buenas, estoy intentando hacer un programilla muy basico, basandome en alguno que he visto por ahi de ejemplo.

A decir verdad uso el que pone en otdos lados que usando dos emas, ve si esta en ascendente o descendente la tendencia y a partir de ahi hace compra o venta.

La cosa es que me gustaria poder poner, que se abriera la compra, no cuando detecta una tendencia, pues mientras se forma una vela, las emas se cruzan varias veces y la tendencia la puede cambiar 5 o 6 veces durante la formacion, sino cuando a superado en 10 puntos por encima o por debajo el valor en donde se definio la tendencia, es decir el cruce de emas.

Asi pues, antes de la ordensend, pongo un if, que me compruebe esto.

Mi gran problema es que soi tan novato, que no se que variable es la que me dice el precio actual de la vela, para poder guararla en el momento de cruce, y comparar ese valor guardado con los siguientes valores actuales.
O al menos creo que ahi tengo el problema..

Mi if seria este, pero no me funciona.

(declarando antes valoranterior como double)

valorAnterior= PRICE_MEDIAN
if (valor anterior+10 ) <PRICE_MEDIAN> aki empieza la ordensend etc..

Pues eso, basicamente, que me digais que tengo que poner en puesto de PRICE_MEDIAN para coger el valor actual de mercado.

Gracias
Avatar de Usuario
ledzep
Mensajes: 410
Registrado: 25 Sep 2006 03:19
Ubicación: Colombia

Mensaje por ledzep »

El precio que ves en los gráficos puede ser el precio de compra (ask), precio de venta (bid) o un promedio de los dos. En la mayor parte de los brokers MT4 puedes ver el precio Bid en los gráficos. Este precio puedes conseguirlo en el lenguaje MQL4 con el "Bid", por ejemplo si quieres saber cuando el precio instantaneo ha superado una media podrias escribir:

MediaSimple=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
if(Bid>MediaSimple)..............

Bid siempre sera la ultima cotización suministrada por el broker.

recuerda que PRICE_MEDIAN es una constante del tipo de precio que simplemente indica con que valor se calculará el indicador en cuestion. En este caso para la ema puede usarse el valor PRICE_OPEN, PRICE_HIGH, PRICE_LOW........... etc.

debes tener especial cuidado con el último parámetro de la media o de cualquier indicador que uses (indice), si usas un "0" siempre estará cambiando con cada tick, si usas un 1 usará los datos hasta la barra anterior.

Espero te sea de utilidad.

s2.
ropero
Mensajes: 4
Registrado: 13 Jun 2008 19:59

Mensaje por ropero »

Muchas gracias.

A ver si consigo hacerlo funcionar..

Una cosa mas, hay alguna manera de depurar el programa? es decir, alguna herramienta, que te vaya indicando paso a paso por que linea del programa va?
O la unica forma de ver esto, es poniendo impresiones por pantalla en el programa?

Gracias
Avatar de Usuario
ledzep
Mensajes: 410
Registrado: 25 Sep 2006 03:19
Ubicación: Colombia

Mensaje por ledzep »

Desafortunadamente no es posible. Puedes enviar información al mundo exterior mediante tres instrucciones:

Alert
Comment
Print


No olvides "visual mode", una herramienta muy valiosa para depuración.

s2.
ropero
Mensajes: 4
Registrado: 13 Jun 2008 19:59

Mensaje por ropero »

Hola de nuevo.

Ya estoy avanzando en esto de la programacion MQ4, gracias por ayudarme en mis primeros pasos, he echo algun programilla que funciona bien, pero todos con una sola operacion al mismo tiempo.
Ahora llega mi duda, cuando tienes varias operaciones abiertas al mismo tiempo, como se hace para elegir cual cierras?
Yo hasta ahora cerraba poniendo esto que saque de otro programa ejemplo
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)
Supongo que le tendre que pone algo en OrderTicket(XXX)
Pero ¿como recupero yo el numero de ticket cada vez que hago una operacion y luego le digo que era esa la que quiero cerrar?
Creo que me he explicado mas o menos, si no me entendeis decidmelo y lo intento de nuevo.

Muchas gracias

ropero
Mensajes: 4
Registrado: 13 Jun 2008 19:59

Mensaje por ropero »

Bueno, y otra duda que tengo..

Se podria usar el indicador Fibonacci Pivots en un programa? Si es asi, conforme se va simulando el programa van actualizandose los valores del indicador al igual que los demas indicadores? es que al se un indicador, que a decir verdad, nunca lo he visto cambiar en directo, sino que cada dia tiene unos valores que duran bastante, pues surgio esa duda, supongo que si, pero para asegurarme.

Gracias
Avatar de Usuario
ledzep
Mensajes: 410
Registrado: 25 Sep 2006 03:19
Ubicación: Colombia

Mensaje por ledzep »

ropero escribió:Hola de nuevo.

Ya estoy avanzando en esto de la programacion MQ4, gracias por ayudarme en mis primeros pasos, he echo algun programilla que funciona bien, pero todos con una sola operacion al mismo tiempo.
Ahora llega mi duda, cuando tienes varias operaciones abiertas al mismo tiempo, como se hace para elegir cual cierras?
Yo hasta ahora cerraba poniendo esto que saque de otro programa ejemplo
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)
Supongo que le tendre que pone algo en OrderTicket(XXX)
Pero ¿como recupero yo el numero de ticket cada vez que hago una operacion y luego le digo que era esa la que quiero cerrar?
Creo que me he explicado mas o menos, si no me entendeis decidmelo y lo intento de nuevo.

Muchas gracias


Puedes usar

OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)

el ticket debe tenerlo previamente al enviar la orden, por ejemplo:
ticket=OrderSend(Symbol(), OP_BUYLIMIT, ............................. )

si no tienes el ticket debes primero usar:

OrderSelect( int index, int select, int pool=MODE_TRADES)

index:

Puede ser un numero consecutivo de acuerdo con el numero de ordenes o el "ticket". El ticket lo puede opetener cuando abres la orden, por ejemplo : ticket=OrderSend(Symbol(), OP_BUYLIMIT, ................. )

select:

puedes usar una de estas dos constantes:
SELECT_BY_POS - si empleas el consecutivo de las ordenes abiertas y pendientes, o cerradas y canceladas según el tercer parámetro.
SELECT_BY_TICKET - si empleas el "ticket" retornado por tu broker


pool :

este parametro solo se usa si se se activa la opcion "SELECT_BY_POS" en el parametro anterior. Puede tener uno de estos dos valores:
MODE_TRADES (default)- selecciona de la pila de ordenes abiertas y pendientes.
MODE_HISTORY - selecciona de la pila del historico (ordenes cerradas y canceladas)


Recuerda que si usas varios EA, simultaneamente, la única forma de distinguir las diferentes ordenes es mediante el parámetro "MAGIC" en OrderSend

Unas vez seleccionada la orden mediante orderselect, puedes obtener cualquiera de los datos de la orden incluido su ticket mediante:

order=OrderTicket();

espero te sirva. S2.
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Trading en General”