Re: Expert Advisor que abra 1 sola operación por vela
Aquí dejo el scrip de lo que estoy trabajando, no va mal pero necesita depuraciones; a ver donde debo meter los comandos indicados.
extern int MagicNumber=10033;
extern double Lots =0.2;
extern double StopLoss=25;
extern double TakeProfit=50;
extern int TrailingStop=1;
extern int InicioTrailing=5;
extern int Slippage=3;
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if((Ask>iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0))&&
(Bid<iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0))&&
(iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1)>iMA(NULL, 0,120,0,MODE_SMA,PRICE_CLOSE,1))&&
(Close[1]<iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1))||
(iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1)<iMA(NULL, 0,120,0,MODE_SMA,PRICE_CLOSE,1))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0)>iMA(NULL,0, 120,0,MODE_SMA,PRICE_CLOSE,0))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,1)<iMA(NULL,0, 120,0,MODE_SMA,PRICE_CLOSE,1))&&
(iMACD(NULL,0,3,5,2,PRICE_CLOSE,MODE_MAIN,1)>0)&&
(Ask>iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0))&&
(Bid<iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0))||
(iRSI(NULL,0,11,PRICE_OPEN,1)<40)&&
(iRSI(NULL,0,11,PRICE_OPEN,0)>40)&&
(iRSI(NULL,0,11,PRICE_OPEN,1)>(iRSI(NULL,0,11,PRIC E_OPEN,2)))&&
(iRSI(NULL,0,11,PRICE_OPEN,0)>(iRSI(NULL,0,11,PRIC E_OPEN,1)))&&
(Ask>iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,0))&&
(Bid<iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,0))||
(iRSI(NULL,0,11,PRICE_OPEN,1)<30)&&
(iRSI(NULL,0,11,PRICE_OPEN,1)>(iRSI(NULL,0,11,PRIC E_OPEN,2)))&&
(iRSI(NULL,0,11,PRICE_OPEN,0)>(iRSI(NULL,0,11,PRIC E_OPEN,1)))||
(iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,0)>iMA(NULL,0, 50,0,MODE_EMA,PRICE_CLOSE,0))&&
(Ask>iMA(NULL,0,20,0,MODE_SMA,PRICE_HIGH,0))&&
(Bid<iMA(NULL,0,20,0,MODE_SMA,PRICE_HIGH,0))||
(iRSI(NULL,0,11,PRICE_OPEN,0)<50)&&
(iRSI(NULL,0,11,PRICE_OPEN,0)>(iRSI(NULL,0,11,PRIC E_OPEN,1)))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0)>iMA(NULL,0, 20,0,MODE_EMA,PRICE_HIGH,0))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0)>iMA(NULL,0, 5,0,MODE_EMA,PRICE_HIGH,1))||
(Close[3]<iMA(NULL,0,20,0,MODE_SMA,PRICE_HIGH,3))&&
(Close[2]<iMA(NULL,0,20,0,MODE_SMA,PRICE_HIGH,2))&&
(Close[1]>iMA(NULL,0,20,0,MODE_SMA,PRICE_HIGH,1))&&
(iRSI(NULL,0,11,PRICE_OPEN,0)>(iRSI(NULL,0,11,PRIC E_OPEN,1))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0)>iMA(NULL,0, 5,0,MODE_SMA,PRICE_HIGH,1))))
// Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
if((Ask>iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0))&&
(Bid<iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0))&&
(iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1)<iMA(NULL, 0,120,0,MODE_SMA,PRICE_CLOSE,1))&&
(Close[1]>iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1))||
(iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1)>iMA(NULL, 0,120,0,MODE_SMA,PRICE_CLOSE,1))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_LOW,0)<iMA(NULL,0,1 20,0,MODE_SMA,PRICE_CLOSE,0))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_LOW,1)>iMA(NULL,0,1 20,0,MODE_SMA,PRICE_CLOSE,1))&&
(iMACD(NULL,0,3,5,2,PRICE_CLOSE,MODE_MAIN,1)<0)&&
(Ask>iMA(NULL,0,5,0,MODE_SMA,PRICE_LOW,0))&&
(Bid<iMA(NULL,0,5,0,MODE_SMA,PRICE_LOW,0))||
(iRSI(NULL,0,11,PRICE_OPEN,1)>60)&&
(iRSI(NULL,0,11,PRICE_OPEN,0)<60)&&
(iRSI(NULL,0,11,PRICE_OPEN,1)<(iRSI(NULL,0,11,PRIC E_OPEN,2)))&&
(iRSI(NULL,0,11,PRICE_OPEN,0)<(iRSI(NULL,0,11,PRIC E_OPEN,1)))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_LOW,0)<iMA(NULL,0,2 0,0,MODE_SMA,PRICE_HIGH,0))&&
(Ask>iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,0))&&
(Bid<iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,0))||
(iRSI(NULL,0,11,PRICE_OPEN,1)>70)&&
(iRSI(NULL,0,11,PRICE_OPEN,1)<(iRSI(NULL,0,11,PRIC E_OPEN,2)))&&
(iRSI(NULL,0,11,PRICE_OPEN,0)<(iRSI(NULL,0,11,PRIC E_OPEN,1)))||
(iMA(NULL,0,20,0,MODE_SMA,PRICE_HIGH,0)<iMA(NULL,0 ,50,0,MODE_EMA,PRICE_CLOSE,0))&&
(Ask>iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,0))&&
(Bid<iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,0))||
(iRSI(NULL,0,11,PRICE_OPEN,0)>50)&&
(iRSI(NULL,0,11,PRICE_OPEN,0)<(iRSI(NULL,0,11,PRIC E_OPEN,1)))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0)<iMA(NULL,0, 20,0,MODE_EMA,PRICE_LOW,0))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0)<iMA(NULL,0, 5,0,MODE_EMA,PRICE_HIGH,1))||
(Close[3]>iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,3))&&
(Close[2]>iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,2))&&
(Close[1]<iMA(NULL,0,20,0,MODE_SMA,PRICE_LOW,1))&&
(iRSI(NULL,0,11,PRICE_OPEN,0)<(iRSI(NULL,0,11,PRIC E_OPEN,1)))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,0)<iMA(NULL,0, 5,0,MODE_SMA,PRICE_HIGH,1)))
// Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
}
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)
{
if(OrderType()==OP_BUY)
{
if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1)<iMA(NU LL,0,50,0,MODE_SMA,PRICE_CLOSE,1))&&
(iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,2)>iMA(NULL, 0,50,0,MODE_SMA,PRICE_CLOSE,2))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_HIGH,1)<iMA(NULL,0, 120,0,MODE_SMA,PRICE_CLOSE,1)))
//here is your close buy rule
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),Slippage,Red);
}
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*InicioTrailing)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if((iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,1)>iMA(NU LL,0,50,0,MODE_SMA,PRICE_CLOSE,1))&&
(iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,2)<iMA(NULL, 0,50,0,MODE_SMA,PRICE_CLOSE,2))&&
(iMA(NULL,0,5,0,MODE_SMA,PRICE_LOW,1)>iMA(NULL,0,1 20,0,MODE_SMA,PRICE_CLOSE,1)))// here is your close sell rule
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),Slippage,Red);
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*InicioTrailing))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
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);
}
Cita:
Iniciado por
tivag
Para ello se debe contabilizar el beneficio obtenido , se guarda en una variable y cuando esa variable sea mayor que tu objetivo ponemos una variable de tipo bool a true , esa variable la introduces en donde se manda las ordenes cuando sea false y asi solo se ejecutara cuando el beneficio sea inferior a lo esperado.
double profit=0;
int historico= OrdersHistoryTotal();
for (int i=0;i<historico;i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
profit += OrderProfit();
}
if (profit>ganancia)
{
stop=true;
}
else
stop=false;
Re: Expert Advisor que abra 1 sola operación por vela
perfecto, en cuanto tenga un rato me pongo con ello.
Muchísimas gracias
Cita:
Iniciado por
tivag
Para ello se debe contabilizar el beneficio obtenido , se guarda en una variable y cuando esa variable sea mayor que tu objetivo ponemos una variable de tipo bool a true , esa variable la introduces en donde se manda las ordenes cuando sea false y asi solo se ejecutara cuando el beneficio sea inferior a lo esperado.
double profit=0;
int historico= OrdersHistoryTotal();
for (int i=0;i<historico;i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
profit += OrderProfit();
}
if (profit>ganancia)
{
stop=true;
}
else
stop=false;
Re: Expert Advisor que abra 1 sola operación por vela
Cita:
Iniciado por
tivag
hola tranquilo , es normal si estas empezando ;) , cuando puse orden buy o sell (); hacia referencia a tu parte de codigo para que supieras que podria ir hay, esa linea quitala, tal y como se ve en la imagen parece que esta al principio del todo luego todo el ea te ira vela a vela , lo puedes hacer asi o bien poner eso antes de donde se lanza la orden de compra o venta y asi solo se hara cada vela solo la orden , cuestion de como lo quieras.
saludos
Perfect. Me pongo con ello en cuanto pueda. Y te cuento.
Muchas gracias
Re: Expert Advisor que abra 1 sola operación por vela
Cita:
Iniciado por
tivag
Buenas, si el Ea lo estas ejecuntado en 1h no deberia darte problemas y tan solo deberia abrirte una operacion por cada hora, en donde estas poniendo el codigo? has puesto el condicional antes de mandar la orden?
saludos
Buenos días/tardes.
Yo tengo un problema similar, lo que me ocurre es que dentro de la misma vela se hacen tropecientas operaciones y me gustaría que sólo se hiciese una.
Para ser más exactos, en ocasiones en una vela con rango de 60 pibs , si tengo un TP de 10 y un SL de 15 , puedo tener hasta 4 pérdidas en la misma vela... , un negocio horrible... .
También me ocurre que se dan a la vez situaciones en la misma vela en la que se encuentran el patrón de compra y de venta, y me hace tropecientasmil operaciones que me dejan la cuenta con unos mordiscos bastante grandes.
Ahora estoy con el móvil, cuando llegue a casa hago captura de pantalla y muestro imágenes de varios problemas.
Muchas gracias por su ayuda.
1 Archivos adjunto(s)
Re: Expert Advisor que abra 1 sola operación por vela
Cita:
Iniciado por
CICLIC_VA
Buenos días/tardes.
Yo tengo un problema similar, lo que me ocurre es que dentro de la misma vela se hacen tropecientas operaciones y me gustaría que sólo se hiciese una.
Para ser más exactos, en ocasiones en una vela con rango de 60 pibs , si tengo un TP de 10 y un SL de 15 , puedo tener hasta 4 pérdidas en la misma vela... , un negocio horrible... .
También me ocurre que se dan a la vez situaciones en la misma vela en la que se encuentran el patrón de compra y de venta, y me hace tropecientasmil operaciones que me dejan la cuenta con unos mordiscos bastante grandes.
Ahora estoy con el móvil, cuando llegue a casa hago captura de pantalla y muestro imágenes de varios problemas.
Muchas gracias por su ayuda.
Hola , para hacer eso puedes hacerlo por ejemplo comprobando si existe esa orden o no , pero al añadir eso ten en cuenta que si la orden se cierra y se sigue dando las condiciones te abrira otra orden en la misma vela , si quieres evitar eso tendras que ponerle tambien el codigo de que haga una operacion por vela . He creado un Ea para que veas como es el codigo.
saludos
Ea que solo abrira operacion si no existe la misma:
Archivo adjunto 60163
Cita:
Iniciado por
naccant
Buenas, es lo que yo indicaba en la duda, me pasa igual puede ser que se me cierre la orden y dentro de la misma vela se vuela a abrir otra. Mi intención era que hiciese una sola operación y no abrir ninguna más independietemente de que se cerrase la primera dentro de la primera vela.
Por ahora estoy utiliando el cruce del ask y el bid (que se dá en un momento concreto) en ve de el cruce de medias (que se da durante toda la vela).
hola te lo puse arriba el codigo pero te adjunto Ea para que lo veas mejor , puedes seguir usando el cruce del ask y bid si asi se te ha solucionado el problema pero seria mejor usar lo otro pues ya lo tendras para futuros Eas.
saludos
Ea que abrira operacion por cada vela nueva , independientemente si existe o no esa orden anteriormente:
Archivo adjunto 60163
Re: Expert Advisor que abra 1 sola operación por vela
Cita:
Iniciado por
tivag
hola , de nada para eso estamos ;), ahora te entendi lo que querias , si para ello jugamos con el tiempo de las barras y un condicional para que solo haga lo que queramos por cada vela nueva:
datetime Timebarra = 0; // definimos en las variables generales
if (Timebarra < Time[0])
{
Timebarra = Time[0];
Orden buy o sell();
}
saludos
Buenas, conseguí que funciones lo del trailingstop e inicioTrailing, pero que se haga una sola operación por cada barra sin que al cerrarse la misma vuelva a abrir al darse las mismas condiciones, no encuentro manera.
Gracias
Re: Expert Advisor que abra 1 sola operación por vela
Cita:
Iniciado por
tivag
hola , de nada para eso estamos ;), ahora te entendi lo que querias , si para ello jugamos con el tiempo de las barras y un condicional para que solo haga lo que queramos por cada vela nueva:
datetime Timebarra = 0; // definimos en las variables generales
if (Timebarra < Time[0])
{
Timebarra = Time[0];
Orden buy o sell();
}
saludos
Buenas, de nuevo.
Gracias por lo comentado; con el trailingstop no he encontrado la forma, ya que lo he modificado en los 4 puntos donde me aparece y no realiza lo deseado. te dejo el script completo y me dices si hay un error.
extern int MagicNumber=10001;
extern double Lots =0.1;
extern double StopLoss=10;
extern double TakeProfit=10;
extern int TrailingStop=5;
extern int Slippage=3;
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
double TheStopLoss=0;
double TheTakeProfit=0;
if( TotalOrdersCount()==0 )
{
int result=0;
if((iMA(NULL,0,3,0,MODE_EMA,PRICE_OPEN,1)<iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,1))&&(iMA(NULL,0,3,0,MODE_EMA,PRICE_OPEN,0)>iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,0))) // Here is your open buy rule { result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Ask-StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
if((iMA(NULL,0,3,0,MODE_EMA,PRICE_OPEN,1)>iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,1))&&(iMA(NULL,0,3,0,MODE_EMA,PRICE_OPEN,0)<iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,0))) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,"EA Generator www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=0;
if(TakeProfit>0) TheTakeProfit=Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=Bid+StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
}
return(0);
}
}
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)
{
if(OrderType()==OP_BUY)
{
if((iMA(NULL,0,3,0,MODE_EMA,PRICE_OPEN,0)<iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,0))) //here is your close buy rule
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),Slippage,Red);
}
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<Bid-MyPoint*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if((iMA(NULL,0,3,0,MODE_EMA,PRICE_OPEN,0)>iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,0))) // here is your close sell rule
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),Slippage,Red);
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(Ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+MyP oint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
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);
Re: Expert Advisor que abra 1 sola operación por vela
Cita:
Iniciado por
naccant
Buenas, gracias de antemano. La idea de la primera parte, es que yo tengo indicado varias pautas para darse una operación de entrada, pero el problema que tengo es que si finaliza la compra o venta sin que haya terminado la vela (suelo trabajar en 1h) continuan dandose las pautas y vuelve abrir posición.
Por ello indico que si hay alguna manera para que solo haga una operación por vela.
Lo del trailing stop, me pongo con ello.
Gracias
hola , de nada para eso estamos ;), ahora te entendi lo que querias , si para ello jugamos con el tiempo de las barras y un condicional para que solo haga lo que queramos por cada vela nueva:
datetime Timebarra = 0; // definimos en las variables generales
if (Timebarra < Time[0])
{
Timebarra = Time[0];
Orden buy o sell();
}
saludos
Re: Expert Advisor que abra 1 sola operación por vela
Buenas
Muchas gracias por la aportación, intento ir modificando y viendo que pasa.
Sobre los manuales, estoy a la espera del Expert Advisor Programming for MetaTrader 4: Creating automated ya lo solicité por Amazón y a ver.
Aunque no tengo base de programación, le estoy cogiendo el gusto y a ver si puedo formarme correctamente.
Un saludo
Cita:
Iniciado por
tivag
hola el for no es una variable es un bucle, todo iria dentro del start, las unicas variables que debes definir son las de ganancia y la de stop, que esas van arriba, extern double ganancia= cantidad que quieras; bool stop=false;
luego la variable stop tienes que meterla con las condiciones de la orden y por ultimo tendras que definir reglas para resetear la variable stop para que vuelva a operar cuando quieras sino una vez llegado al tope no te volvera a operar.
Mi humilde consejo antes de seguir tocando el Ea aprende mas de mql a traves de manuales que hay en la red o bien si prefieres seguir usando generadores de codigo usa alguno que te de la posibilidad de meter codigos y asi te sera mas facil hacer lo que quieres
saludos
Re: Expert Advisor que abra 1 sola operación por vela
Cita:
Iniciado por
naccant
Entiendo que:
en la definición de variables esto
double profit=0;
int historico= OrdersHistoryTotal();
for (int i=0;i<historico;i++)
y luego seguido del expert start function
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
profit += OrderProfit();
}
if (profit>ganancia)
{
stop=true;
}
else
stop=false;
hola el for no es una variable es un bucle, todo iria dentro del start, las unicas variables que debes definir son las de ganancia y la de stop, que esas van arriba, extern double ganancia= cantidad que quieras; bool stop=false;
luego la variable stop tienes que meterla con las condiciones de la orden y por ultimo tendras que definir reglas para resetear la variable stop para que vuelva a operar cuando quieras sino una vez llegado al tope no te volvera a operar.
Mi humilde consejo antes de seguir tocando el Ea aprende mas de mql a traves de manuales que hay en la red o bien si prefieres seguir usando generadores de codigo usa alguno que te de la posibilidad de meter codigos y asi te sera mas facil hacer lo que quieres
saludos