Ayuda a la codificación - página 507

 
tristantsh:
Gracias mntiwana y malden. pero ¿por qué tengo que volver a comprar? Pueden enviar estos indicadores en mensajes

Envíe el correo electrónico original con el enlace que recibió cuando compró ese indicador a support@forex-tsd.com y, si todo es correcto, recibirá una versión actualizada.

 

Bien mlanden. pero el indicador antes de nmc parece interesante que después de nmc . ¿Son sólo mis sensaciones?

 
tristantsh:
Ok mlanden. pero el indicador antes de nmc parece interesante que después de nmc . ¿Son solo mis sensaciones?

Los resultados de la versión "nmc" no cambian en absoluto en comparación con la versión "pre-nmc". "nmc" significa "new metatrader compatible"

todo lo mejor

 

¿Por qué?

Mladen,

Por favor, ¿puede darme la razón de por qué este ea no funciona.

//----------------------- EA PARÁMETRO

cadena externa

Expert_Name = "---------- Pending Order EA v1",

Expert_Name2 = "---------- Para el precio actual establecer EntryLevel = 0";

extern double

EntryLevel = 1.8600,

Distance = 100,

StopLoss = 50,

TakeProfit = 50,

TrailingStop = 50;

cadena externa

Order_Setting = "---------- Order Setting";

extern int

NumberOfTries = 5,

Slippage = 5,

MagicNumber = 1234;

cadena externa

MM_Parameters = "---------- Money Management";

extern double

Lotes =0,01

extern bool

MM = false, //Utilizar o no la Gestión Monetaria

AccountIsMicro = true; //Utilizar microcuenta o no

extern int

Riesgo = 0; /10%.

extern string

Testing_Parameters= "---------- Back Test Parameter";

extern bool

Show_Settings = true;

//----------------------- VARIABLE GLOBAL

static int

TimeFrame = 0;

cadena

TicketComment = "PendingOrderEA v2",

LastTrade

bool

TradeAllow = true,

EntryAllow = true;

//+------------------------------------------------------------------+

//| función de inicialización del experto ||

//+------------------------------------------------------------------+

int init()

{

//----------------------- GENERAR EL NÚMERO MÁGICO Y EL COMENTARIO DEL TICKET

//----------------------- FUENTE : PENGIE

MagicNumber = subGenerateMagicNumber(MagicNumber, Symbol(), Period());

TicketComment = StringConcatenate(TicketComment, "-", Symbol(), "-", Period());

//----------------------- MOSTRAR LA CONFIGURACIÓN DE EA EN EL GRÁFICO

//----------------------- FUENTE : CODERSGURU

if(Show_Settings) subPrintDetails();

si no Comentar("");

return(0);

}

//+------------------------------------------------------------------+

//| función de desinicialización experta ||.

//+------------------------------------------------------------------+

int deinit()

{

//----------------------- PREVENIR EL RECUENTO MIENTRAS EL USUARIO CAMBIA EL MARCO DE TIEMPO

//----------------------- FUENTE : CODERSGURU

TimeFrame=Periodo();

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int inicio()

{

doble

// BuyLevel,

SellLevel;

int

cnt,

ticket

total;

//----------------------- Fijar el precio de compra y de venta

if(EntryLevel==0) EntryLevel = Bid;

// BuyLevel = EntryLevel + Distance*Point;

SellLevel = EntryLevel - Distance*Point;

// if((BuyLevel-Ask)<10*Point || (Bid-SellLevel)<10*Point)

// {

// Comentario("Precio de entrada o distancia no válidos");

// return(0);

// }

//----------------------- AJUSTAR LOS LOTES SI SE UTILIZA LA GESTIÓN MONETARIA

if(MM) Lotes = subLotSize();

//----------------------- ENTRY

//----------------------- TOTAL DE LA ORDEN EN BASE AL NÚMERO MÁGICO Y AL SÍMBOLO

total = subTotalTrade();

//----------------------- ESTABLECER LA ORDEN SÓLO 1 VEZ

if(TradeAllow)

{

//----------------------- IF NO TRADE

if(total<1 && EntryAllow)

{

ticket = OrderSend(Symbol(),OP_SELLSTOP,Lots,SellLevel,Slippage,SellLevel+StopLoss*Point,SellLevel-TakeProfit*Point,TicketComment,MagicNumber,0,Red);

// ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyLevel,Slippage,BuyLevel-StopLoss*Point,BuyLevel+TakeProfit*Point,TicketComment,MagicNumber,0,Green);

EntryAllow = false;

return(0);

}

if(total==1)

{

subDeleteOrder();

TradeAllow = false;

}

}

//----------------------- SECCIÓN DE TRAILING STOP

if(TrailingStop>0 && subTotalTrade()>0)

{

total = OrdersTotal();

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL &&

OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber)

{

subTrailingStop(OrderType());

return(0);

}

}

}

return(0);

}

//----------------------- END PROGRAM

//+------------------------------------------------------------------+

//| DEFINICIONES DE FUNCIONES

//+------------------------------------------------------------------+

//----------------------- FUNCIÓN DE GESTIÓN DEL DINERO

//----------------------- FUENTE : CODERSGURU

double subLotSize()

{

double lotMM = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;

if(AccountIsMicro==false) //cuenta normal

{

if(lotMM < 0.1) lotMM = Lotes;

if((lotMM > 0.5) && (lotMM < 1)) lotMM = 0.5;

if(lotMM > 1.0) lotMM = MathCeil(lotMM);

if(lotMM > 100) lotMM = 100;

}

else //microcuenta

{

if(lotMM < 0.01) lotMM = Lots;

if(lotMM > 1.0) lotMM = MathCeil(lotMM);

if(lotMM > 100) lotMM = 100;

}

return (lotMM);

}

//----------------------- NÚMERO DE ORDEN BASADO EN EL SÍMBOLO Y LA FUNCIÓN MAGICNUMBER

int subTotalTrade()

{

int

cnt,

total = 0;

for(cnt=0;cnt<TotalOrdenes();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderType()<=OP_SELL &&

OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber) total++;

}

return(total);

}

//----------------------- FUNCIÓN DE BORRADO DE PEDIDOS

void subDeleteOrder()

{

int

cnt,

total = 0;

total = OrdersTotal();

for(cnt=total-1;cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber)

{

switch(OrderType())

{

// caso OP_BUYLIMIT :

// case OP_BUYSTOP :

case OP_SELLLIMIT:

case OP_SELLSTOP :

OrderDelete(OrderTicket());

}

}

}

}

//----------------------- FUNCIÓN TRAILING STOP

//----------------------- FUENTE : CODERSGURU

//----------------------- MODIFICADO : FIREDAVE

void subTrailingStop(int Tipo)

{

if(Type==OP_BUY) // se abre la posición de compra

{

if(Bid-OrderOpenPrice()>Punto*TrailingStop &&

OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

if(Type==OP_SELL) // se abre la posición de venta

{

if(OrderOpenPrice()-Ask>Point*TrailingStop)

{

if(OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

//----------------------- GENERAR EL NÚMERO MÁGICO EN BASE AL SÍMBOLO Y A LA FUNCIÓN TEMPORAL

//----------------------- FUENTE : PENGIE

//----------------------- MODIFICADO : FIREDAVE

int subGenerateMagicNumber(int MagicNumber, string symbol, int timeFrame)

{

int isymbol = 0;

if (symbol == "EURUSD") isymbol = 1;

else if (symbol == "GBPUSD") isymbol = 2;

else if (symbol == "USDJPY") isymbol = 3;

else if (symbol == "AUDCAD") isymbol = 4;

else if (symbol == "AUDUSD") isymbol = 5;

else if (symbol == "USDCAD") isymbol = 6;

else if (symbol == "EURGBP") isymbol = 7

else if (symbol == "EURJPY") isymbol = 8

else if (symbol == "EURCHF") isymbol = 9

else if (symbol == "EURAUD") isymbol = 10;

else if (symbol == "EURCAD") isymbol = 11

else if (symbol == "GBPUSD") isymbol = 12

else if (symbol == "GBPJPY") isymbol = 13

else if (symbol == "GBPCHF") isymbol = 14;

else if (symbol == "GBPAUD") isymbol = 15

else if (symbol == "GBPCAD") isymbol = 16;

si no, isymbol = 17;

if(isymbol<10) MagicNumber = MagicNumber * 10;

return (StrToInteger(StringConcatenate(MagicNumber, isymbol, timeFrame));

}

//----------------------- FUNCIÓN DE COMENTARIO DE IMPRESIÓN

//----------------------- FUENTE : CODERSGURU

void subPrintDetails()

{

string sComment = "";

string sp = "----------------------------------------\n";

string NL = "\n";

sComment = sp;

sComment = sComment + "TakeProfit=" + DoubleToStr(TakeProfit,0) + " | ";

sComment = sComment + "TrailingStop=" + DoubleToStr(TrailingStop,0) + " | ";

sComment = sComment + "StopLoss=" + DoubleToStr(StopLoss,0) + NL;

sComment = sComment + sp;

sComment = sComment + "Lots=" + DoubleToStr(Lots,2) + " | ";

sComment = sComment + "MM=" + subBoolToStr(MM) + " | ";

sComment = sComment + "Risk=" + DoubleToStr(Risk,0) + "%" + NL;

sComment = sComment + sp;

Comment(sComment);

}

//----------------------- FUNCIÓN DE VARIABLE BOOLEN A CADENA

//----------------------- FUENTE : CODERSGURU

string subBoolToStr ( valor bool)

{

if(valor) devuelve ("True");

else return ("False");

}

//----------------------- FIN DE LA FUNCIÓN

Gracias de antemano.

Jo

 

mladen,

Espero que estés bien. El siguiente tiene dos errores de compilación.

Archivos adjuntos:
 
candyman752:
mladen, espero que estés bien. lo de abajo tiene dos errores al compilar. amablemente ayuda

candyman752

Pruebe ahora : rstochalert-4tf_1.mq4

Archivos adjuntos:
 

Estimado MLADEN,

(mis preguntas son siempre sobre la reparación de ayuda más que la ayuda de codificación)

Tengo una solicitud para entender..... ver en 2 imágenes que he añadido, 1 ª es con 1 error y 2 advertencias relativas a la línea 70 y 72....como se puede ver en la imagen 2 ª, he sustituido y 1 error y 1 advertencia eliminado......mi pregunta es ... es correcto hacer esta manera....y la segunda pregunta sobre la segunda advertencia que todavía está detrás de la línea 80 ... si se deja como es, no hay problema en el funcionamiento?

saludos

mntiwana

Archivos adjuntos:
 
mntiwana:
Estimado MLADEN,

(mis preguntas son siempre sobre la reparación de ayuda más que la ayuda de codificación)

Tengo una solicitud para entender.....ver en 2 imágenes que he añadido, 1 ª es con 1 error y 2 advertencias relativas a la línea 70 y 72....como se puede ver en la imagen 2 ª, he sustituido y 1 error y 1 advertencia eliminado......mi pregunta es ... es correcto hacer de esta manera....y la segunda pregunta sobre la segunda advertencia que todavía está detrás de la línea 80 ... si se deja como es, no hay problema en el funcionamiento?

saludos

mntiwana

mntiwana

asi todo esta bien. hiciste los cambios bien

 
mladen:
mntiwana así todo está bien. hiciste los cambios OK

muchas gracias gran jefe por animar a un estudiante curioso.

mis saludos

 
Jovager:
Mladen,

Por favor, puede darme la razón por la que este ea no funciona.

//----------------------- EA PARÁMETRO

cadena externa

Expert_Name = "---------- Pending Order EA v1",

Expert_Name2 = "---------- Para el precio actual establecer EntryLevel = 0";

extern double

EntryLevel = 1.8600,

Distance = 100,

StopLoss = 50,

TakeProfit = 50,

TrailingStop = 50;

cadena externa

Order_Setting = "---------- Order Setting";

extern int

NumberOfTries = 5,

Slippage = 5,

MagicNumber = 1234;

cadena externa

MM_Parameters = "---------- Money Management";

extern double

Lotes =0,01

extern bool

MM = false, //Utilizar o no la Gestión Monetaria

AccountIsMicro = true; //Usar microcuenta o no

extern int

Riesgo = 0; /10%.

extern string

Testing_Parameters= "---------- Back Test Parameter";

extern bool

Show_Settings = true;

//----------------------- VARIABLE GLOBAL

static int

TimeFrame = 0;

cadena

TicketComment = "PendingOrderEA v2",

LastTrade

bool

TradeAllow = true,

EntryAllow = true;

//+------------------------------------------------------------------+

//| función de inicialización del experto ||

//+------------------------------------------------------------------+

int init()

{

//----------------------- GENERAR EL NÚMERO MÁGICO Y EL COMENTARIO DEL TICKET

//----------------------- FUENTE : PENGIE

MagicNumber = subGenerateMagicNumber(MagicNumber, Symbol(), Period());

TicketComment = StringConcatenate(TicketComment, "-", Symbol(), "-", Period());

//----------------------- MOSTRAR LA CONFIGURACIÓN DE EA EN EL GRÁFICO

//----------------------- FUENTE : CODERSGURU

if(Show_Settings) subPrintDetails();

si no Comentar("");

return(0);

}

//+------------------------------------------------------------------+

//| función de desinicialización experta ||.

//+------------------------------------------------------------------+

int deinit()

{

//----------------------- PREVENIR EL RECUENTO MIENTRAS EL USUARIO CAMBIA EL MARCO DE TIEMPO

//----------------------- FUENTE : CODERSGURU

TimeFrame=Periodo();

return(0);

}

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int inicio()

{

doble

// BuyLevel,

SellLevel;

int

cnt,

ticket

total;

//----------------------- Fijar el precio de compra y de venta

if(EntryLevel==0) EntryLevel = Bid;

// BuyLevel = EntryLevel + Distance*Point;

SellLevel = EntryLevel - Distance*Point;

// if((BuyLevel-Ask)<10*Point || (Bid-SellLevel)<10*Point)

// {

// Comentario("Precio de entrada o distancia no válidos");

// return(0);

// }

//----------------------- AJUSTAR LOS LOTES SI SE UTILIZA LA GESTIÓN MONETARIA

if(MM) Lotes = subLotSize();

//----------------------- ENTRY

//----------------------- TOTAL DE LA ORDEN EN BASE AL NÚMERO MÁGICO Y AL SÍMBOLO

total = subTotalTrade();

//----------------------- ESTABLECER LA ORDEN SÓLO 1 VEZ

if(TradeAllow)

{

//----------------------- IF NO TRADE

if(total<1 && EntryAllow)

{

ticket = OrderSend(Symbol(),OP_SELLSTOP,Lots,SellLevel,Slippage,SellLevel+StopLoss*Point,SellLevel-TakeProfit*Point,TicketComment,MagicNumber,0,Red);

// ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyLevel,Slippage,BuyLevel-StopLoss*Point,BuyLevel+TakeProfit*Point,TicketComment,MagicNumber,0,Green);

EntryAllow = false;

return(0);

}

if(total==1)

{

subDeleteOrder();

TradeAllow = false;

}

}

//----------------------- SECCIÓN DE TRAILING STOP

if(TrailingStop>0 && subTotalTrade()>0)

{

total = OrdersTotal();

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL &&

OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber)

{

subTrailingStop(OrderType());

return(0);

}

}

}

return(0);

}

//----------------------- END PROGRAM

//+------------------------------------------------------------------+

//| DEFINICIONES DE FUNCIONES

//+------------------------------------------------------------------+

//----------------------- FUNCIÓN DE GESTIÓN DEL DINERO

//----------------------- FUENTE : CODERSGURU

double subLotSize()

{

double lotMM = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;

if(AccountIsMicro==false) //cuenta normal

{

if(lotMM < 0.1) lotMM = Lotes;

if((lotMM > 0.5) && (lotMM < 1)) lotMM = 0.5;

if(lotMM > 1.0) lotMM = MathCeil(lotMM);

if(lotMM > 100) lotMM = 100;

}

else //microcuenta

{

if(lotMM < 0.01) lotMM = Lots;

if(lotMM > 1.0) lotMM = MathCeil(lotMM);

if(lotMM > 100) lotMM = 100;

}

return (lotMM);

}

//----------------------- NÚMERO DE ORDEN BASADO EN EL SÍMBOLO Y LA FUNCIÓN MAGICNUMBER

int subTotalTrade()

{

int

cnt,

total = 0;

for(cnt=0;cnt<TotalOrdenes();cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderType()<=OP_SELL &&

OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber) total++;

}

return(total);

}

//----------------------- FUNCIÓN DE BORRADO DE PEDIDOS

void subDeleteOrder()

{

int

cnt,

total = 0;

total = OrdersTotal();

for(cnt=total-1;cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber()==MagicNumber)

{

switch(OrderType())

{

// caso OP_BUYLIMIT :

// case OP_BUYSTOP :

case OP_SELLLIMIT:

case OP_SELLSTOP :

OrderDelete(OrderTicket());

}

}

}

}

//----------------------- FUNCIÓN TRAILING STOP

//----------------------- FUENTE : CODERSGURU

//----------------------- MODIFICADO : FIREDAVE

void subTrailingStop(int Tipo)

{

if(Type==OP_BUY) // se abre la posición de compra

{

if(Bid-OrderOpenPrice()>Punto*TrailingStop &&

OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

if(Type==OP_SELL) // se abre la posición de venta

{

if(OrderOpenPrice()-Ask>Point*TrailingStop)

{

if(OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

//----------------------- GENERAR EL NÚMERO MÁGICO EN BASE AL SÍMBOLO Y A LA FUNCIÓN TEMPORAL

//----------------------- FUENTE : PENGIE

//----------------------- MODIFICADO : FIREDAVE

int subGenerateMagicNumber(int MagicNumber, string symbol, int timeFrame)

{

int isymbol = 0;

if (symbol == "EURUSD") isymbol = 1;

else if (symbol == "GBPUSD") isymbol = 2;

else if (symbol == "USDJPY") isymbol = 3;

else if (symbol == "AUDCAD") isymbol = 4;

else if (symbol == "AUDUSD") isymbol = 5;

else if (symbol == "USDCAD") isymbol = 6;

else if (symbol == "EURGBP") isymbol = 7

else if (symbol == "EURJPY") isymbol = 8

else if (symbol == "EURCHF") isymbol = 9

else if (symbol == "EURAUD") isymbol = 10;

else if (symbol == "EURCAD") isymbol = 11

else if (symbol == "GBPUSD") isymbol = 12

else if (symbol == "GBPJPY") isymbol = 13

else if (symbol == "GBPCHF") isymbol = 14;

else if (symbol == "GBPAUD") isymbol = 15

else if (symbol == "GBPCAD") isymbol = 16;

si no, isymbol = 17;

if(isymbol<10) MagicNumber = MagicNumber * 10;

return (StrToInteger(StringConcatenate(MagicNumber, isymbol, timeFrame));

}

//----------------------- FUNCIÓN DE COMENTARIO DE IMPRESIÓN

//----------------------- FUENTE : CODERSGURU

void subPrintDetails()

{

string sComment = "";

string sp = "----------------------------------------\n";

string NL = "\n";

sComment = sp;

sComment = sComment + "TakeProfit=" + DoubleToStr(TakeProfit,0) + " | ";

sComment = sComment + "TrailingStop=" + DoubleToStr(TrailingStop,0) + " | ";

sComment = sComment + "StopLoss=" + DoubleToStr(StopLoss,0) + NL;

sComment = sComment + sp;

sComment = sComment + "Lots=" + DoubleToStr(Lots,2) + " | ";

sComment = sComment + "MM=" + subBoolToStr(MM) + " | ";

sComment = sComment + "Risk=" + DoubleToStr(Risk,0) + "%" + NL;

sComment = sComment + sp;

Comment(sComment);

}

//----------------------- FUNCIÓN DE VARIABLE BOOLEN A CADENA

//----------------------- FUENTE : CODERSGURU

string subBoolToStr ( valor bool)

{

if(valor) devuelve ("True");

else return ("False");

}

//----------------------- FIN DE LA FUNCIÓN

Gracias de antemano.

Jo

Jo,

¿Puedes adjuntar el archivo mq4? Es muy difícil probarlo de esta manera