por pataboli » 12 May 2017, 02:14
buenas, soy relativamente nuevo en esto de programar EA, estoy en etapa de aprendizaje, y para eso estoy con un EA de prueba, no me interesa que sea rentable aun porque solo estoy aprendiendo las funciones y operadores, el tema es así arme un EA que tras unas condiciones opere en buy o sell, el problema es que cuando se cumple la condición me abre muchas operaciones una tras otra, y yo busco que solo me abra una operación y hasta que no se cierre esa operación ya sea por stoploss o takeprofit no abra otra.
-
pataboli
-
- Mensajes: 2
- Registrado: 12 May 2017, 02:08
- Karma: 0
por Xakalin » 12 May 2017, 09:25
Pon esto antes de tu codigo para ver si abre etc.. - Código: Seleccionar todo
if(TotalOrdersCount()==0){
tochaco }
y después de la funcion start, tick o la que tengas para que te vea todo - Código: Seleccionar todo
int TotalOrdersCount() { int result=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS ,MODE_TRADES); if (OrderMagicNumber()==MagicNumber) result++;
} return (result); }
asi te mirará que sea este EA el que ha abierto alguna (y podrás abrir tu una manual, o otro ea podrá abrir otra siempre que el magic number sea distinto) las abiertas manualmente su magic number es 0
-
Xakalin
-
- Mensajes: 291
- Registrado: 05 Jul 2016, 17:57
- Karma: 4
por pataboli » 12 May 2017, 14:14
hola, muchas gracias por responder! te dejo mi codigo para ver si entendi como colocar el totalorderscount - Código: Seleccionar todo
//+------------------------------------------------------------------+ //| stoploss.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict
input int P=3; input int Magic=23; input double Lots=0.01; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Print ("ha iniciado el experto"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (TotalOrdersCount()==0){ if (CondicionCompra())Compra(); if (CondicionVenta())Venta(); } } //+------------------------------------------------------------------+ bool CondicionCompra() { if (Close[3]>Open[3] && Close[2]>Open[2]&& Close[1]<Open[1]) { return true; } return false; } bool CondicionVenta() { if (Close[3]<Open[3] && Close[2]<Open[2]&& Close[1]>Open[1]) { return true; } return false; } int TotalOrdersCount() { int result=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i,SELECT_BY_POS ,MODE_TRADES); if (OrderMagicNumber()==Magic) result++;
} return (result); } void Compra() { OrderSend (Symbol(),OP_SELL, Lots, Bid, 30,Ask+30*Point,Bid-60*Point,Magic,clrNONE); } void Venta() { OrderSend (Symbol(),OP_BUY, Lots, Ask, 30,Bid-30*Point,Ask+60*Point,Magic,clrNONE); }
podrias marcarme donde esta mi error, ya que me sigue abriendo muchas operaciones a la vez , desde ya muchas gracias!
-
pataboli
-
- Mensajes: 2
- Registrado: 12 May 2017, 02:08
- Karma: 0
por Xakalin » 13 May 2017, 12:27
cambia
OrderSend (Symbol(),OP_BUY, Lots, Ask, 30,Bid-30*Point,Ask+60*Point,Magic,clrNONE);
por OrderSend (Symbol(),OP_BUY, Lots, Ask, 30,Bid-30*Point,Ask+60*Point,'abrir orden',Magic,clrNONE);
-
Xakalin
-
- Mensajes: 291
- Registrado: 05 Jul 2016, 17:57
- Karma: 4
|
|