A continuación hay una copia del código de mi EA. Cada vez que lo adjunto a un gráfico, simplemente permanece allí, no abre ni cierra ninguna operación. Está configurado para vivir el comercio sin confirmación manual.

¿Alguna idea?







Cita Iniciado por ;
# define SIGNAL_NONE 0
# define SIGNAL_BUY 1
# define SIGNAL_SELL 2
# define SIGNAL_CLOSEBUY 3
# define SIGNAL_CLOSESELL 4
#property copyright USTED
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
Lotes dobles externos = 5.0;
extern int Slippage = 0;
extern bool StopLossMode = False;
extern int StopLoss = 0;
extern bool TakeProfitMode = False;
extern int TakeProfit = 0;
extern bool TrailingStopMode = False;
extern int TrailingStop = 0;
int BarCount;
Int Corriente;
bool TickCheck = False;
// ----------------------------------------------- -------------------
//| función de inicialización experta |
// ----------------------------------------------- -------------------
int init () {
BarCount = Bars;
if (EachTickMode) Actual = 0; else Current = 1;
retorno (0);
}
// ----------------------------------------------- -------------------
//| función de desinicialización experta |
// ----------------------------------------------- -------------------
int deinit () {
retorno (0);
}
// ----------------------------------------------- -------------------
//| función de inicio experto |
// ----------------------------------------------- -------------------
int start () {
orden de int = SIGNAL_NONE;
int total, boleto;
doble StopLossLevel, TakeProfitLevel;

if (EachTickMode Bars! = BarCount) TickCheck = False;
Total = OrdersTotal ();
Orden = SIGNAL_NONE;
// ----------------------------------------------- -------------------
//| Inicio variable |
// ----------------------------------------------- -------------------
doble Var1 = iMACD (NULL, 0, 8, 17, 9, PRICE_CLOSE, MODE_SIGNAL, Current 0);
doble Var2 = iMACD (NULL, 0, 8, 17, 9, PRICE_CLOSE, MODE_MAIN, Current 0);
doble Var3 = iMACD (NULL, 0, 8, 17, 9, PRICE_CLOSE, MODE_SIGNAL, Current 1);
doble Var4 = iMACD (NULL, 0, 8, 17, 9, PRICE_CLOSE, MODE_MAIN, Current 1);
doble Buy1_1 = Var1 lt; Var2;
doble Buy2_1 = Var3 gt; Var4;
Doble Sell1_1 = Var1 gt; Var2;
Doble Sell2_1 = Var3 lt; Var4;
doble CloseBuy1_1 = Var1 gt; Var2;
doble CloseBuy2_1 = Var3 lt; Var4;
doble CloseSell1_1 = Var1 lt; Var2;
doble CloseSell2_1 = Var3 gt; Var4;

// ----------------------------------------------- -------------------
//| Final variable |
// ----------------------------------------------- -------------------
//comprobar posición
bool IsTrade = Falso;
para (int i = 0; i lt; Total; i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
if (OrderType () lt; = OP_SELL OrderSymbol () == Symbol ()) {
IsTrade = Verdadero;
if (OrderType () == OP_BUY) {
//Cerrar
// ----------------------------------------------- -------------------
//| Inicio de señal (salida de compra) |
// ----------------------------------------------- -------------------
si (Falso Falso) Orden = SIGNAL_CLOSEBUY;

// ----------------------------------------------- -------------------
//| Fin de Señal (Salir de Compra) |
// ----------------------------------------------- -------------------
if (Order == SIGNAL_CLOSEBUY ((EachTickMode! TickCheck) || (! EachTickMode (Bars! = BarCount)))) {
OrderClose (OrderTicket (), OrderLots (), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Bid, Digits) Close Buy);
if (! EachTickMode) BarCount = Bars;
IsTrade = Falso;
continuar;
}
//parada final
if (TrailingStopMode TrailingStop gt; 0) {
if (Bid - OrderOpenPrice () gt; Point * TrailingStop) {
if (OrderStopLoss () lt; Bid - Point * TrailingStop) {
OrderModify (OrderTicket (), OrderOpenPrice (), Bid - Point * TrailingStop, OrderTakeProfit (), 0, MediumSeaGreen);
if (! EachTickMode) BarCount = Bars;
continuar;
}
}
}
} else {
//Cerrar
// ----------------------------------------------- -------------------
//| Inicio de Señal (Salir de Venta) |
// ----------------------------------------------- -------------------
si (Falso Falso) Orden = SIGNAL_CLOSESELL;

// ----------------------------------------------- -------------------
//| Señal de fin (venta de salida) |
// ----------------------------------------------- -------------------
if (Order == SIGNAL_CLOSESELL ((EachTickMode! TickCheck) || (! EachTickMode (Bars! = BarCount)))) {
OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Ask, Digits) Close Sell);
if (! EachTickMode) BarCount = Bars;
IsTrade = Falso;
continuar;
}
//parada final
if (TrailingStopMode TrailingStop gt; 0) {
if ((OrderOpenPrice () - Ask) gt; (Point * TrailingStop)) {
if ((OrderStopLoss () gt; (Ask Point * TrailingStop)) || (OrderStopLoss () == 0)) {
OrderModify (OrderTicket (), OrderOpenPrice (), Ask Point * TrailingStop, OrderTakeProfit (), 0, DarkOrange);
if (! EachTickMode) BarCount = Bars;
continuar;
}
}
}
}
}
}
// ----------------------------------------------- -------------------
//| Inicio de Señal (Entrada) |
// ----------------------------------------------- -------------------
si (Falso Falso) Orden = SE??AL_BUY;
si (Falso Falso) Orden = SIGNAL_SELL;

// ----------------------------------------------- -------------------
//| Señal de fin |
// ----------------------------------------------- -------------------
//Comprar
if (Order == SIGNAL_BUY ((EachTickMode! TickCheck) || (! EachTickMode (Bars! = BarCount)))) {
si (! IsTrade) {
//Marcar margen libre
if (AccountFreeMargin () lt; (1)) {
Imprimir (No tenemos dinero. Margen libre =, AccountFreeMargin ());
retorno (0);
}
if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; de lo contrario, StopLossLevel = 0.0;
if (TakeProfitMode) TakeProfitLevel = Ask TakeProfit * Point; de lo contrario TakeProfitLevel = 0.0;
Ticket = OrderSend (Symbol (), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy (# MagicNumber ), MagicNumber, 0, DodgerBlue);
si (Ticket gt; 0) {
if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Imprimir (COMPRAR orden abierto:, OrderOpenPrice ());
SetIndexStyle (3, DRAW_ARROW, EMPTY, 2, Green);
if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Ask, Digits) Open Buy);
} else {
Imprimir (Error al abrir la orden de COMPRA:, GetLastError ());
}
}
if (EachTickMode) TickCheck = True;
if (! EachTickMode) BarCount = Bars;
retorno (0);
}
}
//Vender
if (Order == SIGNAL_SELL ((EachTickMode! TickCheck) || (! EachTickMode (Bars! = BarCount)))) {
si (! IsTrade) {
//Marcar margen libre
if (AccountFreeMargin () lt; (1)) {
Imprimir (No tenemos dinero. Margen libre =, AccountFreeMargin ());
retorno (0);
}
if (StopLossMode) StopLossLevel = Bid ?????? StopLoss * Point; de lo contrario, StopLossLevel = 0.0;
if (TakeProfitMode) TakeProfitLevel = Bid ??????- TakeProfit * Point; de lo contrario TakeProfitLevel = 0.0;
Ticket = OrderSend (Symbol (), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, Sell (# MagicNumber ), MagicNumber, 0, DeepPink);
si (Ticket gt; 0) {
if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Imprimir (Orden de VENTA abierta:, OrderOpenPrice ());
SetIndexStyle (3, DRAW_ARROW, EMPTY, 2, Red);
if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Bid, Digits) Open Sell);
} else {
Imprimir (Error al abrir la orden de VENTA:, GetLastError ());
}
}
if (EachTickMode) TickCheck = True;
if (! EachTickMode) BarCount = Bars;
retorno (0);
}
}
if (! EachTickMode) BarCount = Bars;
retorno (0);
}
// ----------------------------------------------- -------------------
Cita Iniciado por ;
# define SIGNAL_NONE 0
# define SIGNAL_BUY 1
# define SIGNAL_SELL 2
# define SIGNAL_CLOSEBUY 3
# define SIGNAL_CLOSESELL 4
#property copyright USTED
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
Lotes dobles externos = 5.0;
extern int Slippage = 0;
extern bool StopLossMode = False;
extern int StopLoss = 0;
extern bool TakeProfitMode = False;
extern int TakeProfit = 0;
extern bool TrailingStopMode = False;
extern int TrailingStop = 0;
int BarCount;
Int Corriente;
bool TickCheck = False;
// ----------------------------------------------- -------------------
//| función de inicialización experta |
// ----------------------------------------------- -------------------
int init () {
BarCount = Bars;
if (EachTickMode) Actual = 0; else Current = 1;
retorno (0);
}
// ----------------------------------------------- -------------------
//| función de desinicialización experta |
// ----------------------------------------------- -------------------
int deinit () {
retorno (0);
}
// ----------------------------------------------- -------------------
//| función de inicio experto |
// ----------------------------------------------- -------------------
int start () {
orden de int = SIGNAL_NONE;
int total, boleto;
doble StopLossLevel, TakeProfitLevel;

if (EachTickMode Bars! = BarCount) TickCheck = False;
Total = OrdersTotal ();
Orden = SIGNAL_NONE;
// ----------------------------------------------- -------------------
//| Inicio variable |
// ----------------------------------------------- -------------------
doble Var1 = iMACD (NULL, 0, 8, 17, 9, PRICE_CLOSE, MODE_SIGNAL, Current 0);
doble Var2 = iMACD (NULL, 0, 8, 17, 9, PRICE_CLOSE, MODE_MAIN, Current 0);
doble Var3 = iMACD (NULL, 0, 8, 17, 9, PRICE_CLOSE, MODE_SIGNAL, Current 1);
doble Var4 = iMACD (NULL, 0, 8, 17, 9, PRICE_CLOSE, MODE_MAIN, Current 1);
doble Buy1_1 = Var1 lt; Var2;
doble Buy2_1 = Var3 gt; Var4;
Doble Sell1_1 = Var1 gt; Var2;
Doble Sell2_1 = Var3 lt; Var4;
doble CloseBuy1_1 = Var1 gt; Var2;
doble CloseBuy2_1 = Var3 lt; Var4;
doble CloseSell1_1 = Var1 lt; Var2;
doble CloseSell2_1 = Var3 gt; Var4;

// ----------------------------------------------- -------------------
//| Final variable |
// ----------------------------------------------- -------------------
//comprobar posición
bool IsTrade = Falso;
para (int i = 0; i lt; Total; i ) {
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
if (OrderType () lt; = OP_SELL OrderSymbol () == Symbol ()) {
IsTrade = Verdadero;
if (OrderType () == OP_BUY) {
//Cerrar
// ----------------------------------------------- -------------------
//| Inicio de señal (salida de compra) |
// ----------------------------------------------- -------------------
si (Falso Falso) Orden = SIGNAL_CLOSEBUY;

// ----------------------------------------------- -------------------
//| Fin de Señal (Salir de Compra) |
// ----------------------------------------------- -------------------
if (Order == SIGNAL_CLOSEBUY ((EachTickMode! TickCheck) || (! EachTickMode (Bars! = BarCount)))) {
OrderClose (OrderTicket (), OrderLots (), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Bid, Digits) Close Buy);
if (! EachTickMode) BarCount = Bars;
IsTrade = Falso;
continuar;
}
//parada final
if (TrailingStopMode TrailingStop gt; 0) {
if (Bid - OrderOpenPrice () gt; Point * TrailingStop) {
if (OrderStopLoss () lt; Bid - Point * TrailingStop) {
OrderModify (OrderTicket (), OrderOpenPrice (), Bid - Point * TrailingStop, OrderTakeProfit (), 0, MediumSeaGreen);
if (! EachTickMode) BarCount = Bars;
continuar;
}
}
}
} else {
//Cerrar
// ----------------------------------------------- -------------------
//| Inicio de Señal (Salir de Venta) |
// ----------------------------------------------- -------------------
si (Falso Falso) Orden = SIGNAL_CLOSESELL;

// ----------------------------------------------- -------------------
//| Señal de fin (venta de salida) |
// ----------------------------------------------- -------------------
if (Order == SIGNAL_CLOSESELL ((EachTickMode! TickCheck) || (! EachTickMode (Bars! = BarCount)))) {
OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Ask, Digits) Close Sell);
if (! EachTickMode) BarCount = Bars;
IsTrade = Falso;
continuar;
}
//parada final
if (TrailingStopMode TrailingStop gt; 0) {
if ((OrderOpenPrice () - Ask) gt; (Point * TrailingStop)) {
if ((OrderStopLoss () gt; (Ask Point * TrailingStop)) || (OrderStopLoss () == 0)) {
OrderModify (OrderTicket (), OrderOpenPrice (), Ask Point * TrailingStop, OrderTakeProfit (), 0, DarkOrange);
if (! EachTickMode) BarCount = Bars;
continuar;
}
}
}
}
}
}
// ----------------------------------------------- -------------------
//| Inicio de Señal (Entrada) |
// ----------------------------------------------- -------------------
si (Falso Falso) Orden = SE??AL_BUY;
si (Falso Falso) Orden = SIGNAL_SELL;

// ----------------------------------------------- -------------------
//| Señal de fin |
// ----------------------------------------------- -------------------
//Comprar
if (Order == SIGNAL_BUY ((EachTickMode! TickCheck) || (! EachTickMode (Bars! = BarCount)))) {
si (! IsTrade) {
//Marcar margen libre
if (AccountFreeMargin () lt; (1)) {
Imprimir (No tenemos dinero. Margen libre =, AccountFreeMargin ());
retorno (0);
}
if (StopLossMode) StopLossLevel = Ask - StopLoss * Point; de lo contrario, StopLossLevel = 0.0;
if (TakeProfitMode) TakeProfitLevel = Ask TakeProfit * Point; de lo contrario TakeProfitLevel = 0.0;
Ticket = OrderSend (Symbol (), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy (# MagicNumber ), MagicNumber, 0, DodgerBlue);
si (Ticket gt; 0) {
if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Imprimir (COMPRAR orden abierto:, OrderOpenPrice ());
SetIndexStyle (3, DRAW_ARROW, EMPTY, 2, Green);
if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Ask, Digits) Open Buy);
} else {
Imprimir (Error al abrir la orden de COMPRA:, GetLastError ());
}
}
if (EachTickMode) TickCheck = True;
if (! EachTickMode) BarCount = Bars;
retorno (0);
}
}
//Vender
if (Order == SIGNAL_SELL ((EachTickMode! TickCheck) || (! EachTickMode (Bars! = BarCount)))) {
si (! IsTrade) {
//Marcar margen libre
if (AccountFreeMargin () lt; (1)) {
Imprimir (No tenemos dinero. Margen libre =, AccountFreeMargin ());
retorno (0);
}
if (StopLossMode) StopLossLevel = Bid ?????? StopLoss * Point; de lo contrario, StopLossLevel = 0.0;
if (TakeProfitMode) TakeProfitLevel = Bid ??????- TakeProfit * Point; de lo contrario TakeProfitLevel = 0.0;
Ticket = OrderSend (Symbol (), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, Sell (# MagicNumber ), MagicNumber, 0, DeepPink);
si (Ticket gt; 0) {
if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Imprimir (Orden de VENTA abierta:, OrderOpenPrice ());
SetIndexStyle (3, DRAW_ARROW, EMPTY, 2, Red);
if (SignalMail) SendMail ([Signal Alert], [ Symbol () ] DoubleToStr (Bid, Digits) Open Sell);
} else {
Imprimir (Error al abrir la orden de VENTA:, GetLastError ());
}
}
if (EachTickMode) TickCheck = True;
if (! EachTickMode) BarCount = Bars;
retorno (0);
}
}
if (! EachTickMode) BarCount = Bars;
retorno (0);
}
// ----------------------------------------------- -------------------