¿Cómo codificar? - página 310

 

...

Para la propagación en tiempo de ejecución (s) utilizar este :

double currentSpread = MarketInfo(Symbol().MODE_SPREAD);
Premeus:
Quiero mostrar el código de la propagación en tiempo real dentro de EA. Cualquier por favor me dan algunos consejos.
 

Gracias malden. Pero sé que el código PHP para el servidor web . No sé para codificar en el lado EA. O es de pie para los demás.

Por favor, dígame más específico. Lo siento, yo sólo nuevo en la programación MQL4.

Y no estoy seguro de cómo y qué parte del programa se ejecuta cuando el nuevo precio que viene en.

Todo el programa o en el lado init() o dentro de start().

Quiero obtener información de la garrapata y mostrar como pido este hilo.

 

Premeus

Ese es el código de Metatrader MQl 4 que obtiene el spread para el símbolo actual. Sólo tienes que copiarlo en tu código y tendrás la información del spread recuperada de esa manera

Esa línea de código debería estar en start() para comprobar el spread en cada tick (ya que puede cambiar en cada tick). Una vez que hayas llamado a la función MarketInfo() y se haya asignado el valor a la variable currentSpread, utiliza el currentSpread para cualquier prueba o procesamiento posterior que necesites

Premeus:
Gracias malden. Pero sé que el código PHP para el servidor web. No sé al código en el lado EA. O es el soporte para los demás.

Por favor, dígame más específicamente. Lo siento, soy nuevo en la programación de MQL4.

Y no estoy seguro de cómo y qué parte del programa se ejecuta cuando entra un nuevo precio.

Todo el programa o en el lado init() o dentro de start().

Quiero obtener información de la garrapata y mostrar como pido este hilo .
 

MartingailExpert_v1.0_Stochastic, ¿cómo?

¡Hola!

¿Alguien puede decirme por qué no puedo insertar el Stoploss en el ticket de envío de la orden?

Cuando lo inserto, el EA no funciona.

¡Gracias!

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

//| aaa.mq4 |

//| Copyright Š 2007, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

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

#property copyright "Copyright Š 2007, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

extern double step=25;

extern int StepMode=0;

// Ĺńëč StepMode = 0, ňî řŕă ěĺćäó îđäĺđŕěč ôčęńčđîâŕííűé č đŕâĺí step

// Ĺńëč StepMode = 1, ňî řŕă ďîńňĺďĺííî óâĺëč÷čâŕĺňń˙

extern double proffactor=10;

extern double mult=1,5;

extern double lotbuy=0,01;

extern double lotssell=0,01;

extern double per_K=200;

extern double per_D=20

extern double slow=20;

extern double zoneBUY=20

extern double zoneSELL=80

extern double Magicbuy=555;

extern double Magicsell=556;

double openpricebuy,openpricesell,lotsbuy2,lotssell2,lastlotbuy,lastlotsell,tpb,tps,cnt,smbuy,smsell,lotstep

ticketbuy,ticketsell,maxLot,free,balance,lotsell,lotbuy,dig,sig_buy,sig_sell,ask,bid;

int OrdersTotalMagicbuy(int Magicbuy)

{

int j=0;

int r;

for (r=0;r<OrdersTotal();r++)

{

if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES))

{

if (OrderMagicNumber()==Magicbuy) j++;

}

}

return(j);

}

int PedidosTotalMagia(int MagiaVenta)

{

int d=0;

int n

for (n=0;n<OrdersTotal();n++)

{

if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES))

{

if (OrderMagicNumber()==Magicsell) d++;

}

}

return(d);

}

int orderclosebuy(int ticketbuy)

{

string symbol = Symbol();

int cnt;

for(cnt = OrdersTotal(); cnt >= 0; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == symbol && OrderMagicNumber()==Magicbuy)

{

ticketbuy=OrderTicket();OrderSelect(ticketbuy, SELECT_BY_TICKET, MODE_TRADES);lotsbuy2=OrderLots() ;

double bid = MarketInfo(symbol,MODE_BID);

RefreshRates();

OrderClose(ticketbuy,lotsbuy2,bid,3,Magenta);

}

}

lotescompra2=lotescompra;return(0);

}

int pedidocierreventa(int boletocompra)

{

string symbol = Symbol();

int cnt;

for(cnt = OrdersTotal(); cnt >= 0; cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() == symbol && OrderMagicNumber()==Magicsell)

{

ticketsell=OrderTicket();OrderSelect(ticketsell, SELECT_BY_TICKET, MODE_TRADES);lotssell2=OrderLots() ;

double ask = MarketInfo(símbolo,MODE_ASK);

RefreshRates();

OrderClose(ticketsell,lotssell2,ask,3, Lime);

}

}

lotssell2=lotssell;return(0);

}

int inicio()

{

//----

double profitbuy=0;double profitsell=0;

string símbolo = OrderSymbol();

double spread = MarketInfo(symbol,MODE_SPREAD);

double minLot = MarketInfo(symbol,MODE_MINLOT);

si (minLot==0,01){dig=2;maxLot=MarketInfo(símbolo,MODE_MAXLOT);}

si (minLot==0.1){dig=1;maxLot=((AccountBalance()/2)/1000);}

if(OrdersTotalMagicbuy(Magicbuy)>0)

{

doble smbuy;

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

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magicbuy)

{

ticketbuy = OrderTicket();OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES);

smbuy = smbuy+OrderLots();openpricebuy = OrderOpenPrice();lastlotbuy = OrderLots();

}

}

{

if (smbuy+(NormalizeDouble((lastlotbuy*mult),dig))<maxLot)

{

if(StepMode==0)

{

if(Ask<=openpricebuy-step*Point)

{

lotbuy2=lastlotbuy*mult;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy2,dig),Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

}

if(StepMode==1)

{

if(Ask<=openpricebuy-(step+OrdersTotalMagicbuy(Magicbuy)+OrdersTotalMagicbuy(Magicbuy)-2)*Point)

{

lotsbuy2=lastlotbuy*mult;

RefreshRates();ticketbuy=OrderSend(Symbol(),OP_BUY,NormalizeDouble(lotsbuy2,dig),Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

}

}

}

}

if(OrdersTotalMagicsell(Magicsell)>0)

{

doble smsell;

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

{

OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(ticketsell,SELECT_BY_TICKET, MODE_TRADES);

smsell = smsell + OrderLots();openpricesell = OrderOpenPrice();lastlotsell = OrderLots();

}

}

{

if (smsell+(NormalizeDouble((lastlotsell*mult),dig))<maxLot)

{

if(StepMode==0)

{

if(Oferta>=precios abiertos de venta+punto*punto)

{

lotssell2=lastlotsell*mult;

RefreshRates();ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

}

if(StepMode==1)

{

if(Oferta>=preciosabiertosventa+(paso+OrdenesTotalMagicell(Magicsell)+OrdenesTotalMagicsell(Magicsell)-2)*Punto)

{

lotssell2=lastlotsell*mult;

RefreshRates();ticketsell=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lotssell2,dig),Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

}

}

}

}

//xm7 modificación para cambiar la forma en que se genera la señal. El código antiguo está al final

double Stoch_0 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,0);

double Stoch_1 = iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1);

if(OrdersTotalMagicbuy(Magicbuy)<1)

{

if(Stoch_0 > zoneBUY && Stoch_1 <= zoneBUY)

ticketbuy = OrderSend(Symbol(),OP_BUY,lotsbuy,Ask,3,0,0, "MartingailExpert",Magicbuy,0,Blue);

}

if(OrdersTotalMagicsell(Magicsell)<1)

{

if(Stoch_0 = zoneSELL)

ticketsell = OrderSend(Symbol(),OP_SELL,lotssell,Bid,3,0,0, "MartingailExpert",Magicsell,0,Red);

}

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

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy)

{

ticketbuy = OrderTicket();OrderSelect(ticketbuy,SELECT_BY_TICKET, MODE_TRADES);profitbuy = profitbuy+OrderProfit() ;

openpricebuy = OrderOpenPrice();

}

}

tpb = (OrdersTotalMagicbuy(Magicbuy)*proffactor*Point)+openpricebuy;

double bid = MarketInfo(Symbol(),MODE_BID);

if (profitbuy>0)

{

if (Bid>=tpb) orderclosebuy(ticketbuy);

}

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

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magicsell)

{

ticketsell = OrderTicket();OrderSelect(ticketsell,SELECT_BY_TICKET, MODE_TRADES);profitsell = profitsell+OrderProfit();

openpricesell = OrderOpenPrice();

}

}

tps = openpricesell-(OrdersTotalMagicsell(Magicsell)*proffactor*Point);

double ask = MarketInfo(Symbol(),MODE_ASK);

if (profitsell>0)

{

if (Ask<=tps)orderclosesell(ticketsell);

}

free = AccountFreeMargin();balance = AccountBalance();

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

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicbuy) ticketbuy = OrderTicket();

if (OrderSymbol()==Symbol() && OrderMagicNumber () == Magicsell) ticketsell = OrderTicket();

}

if (OrdersTotalMagicbuy(Magicbuy)==0)

{

profitbuy=0;ticketbuy=0;tpb=0;

}

if (OrdersTotalMagicsell(Magicsell)==0)

{

profitsell=0;ticketsell=0;tps=0;

}

Comment("MargenLibre = ",NormalizarDoble(libre,0)," Saldo = ",NormalizarDoble(saldo,0)," LoteMáximo = ",NormalizarDoble(loteMáximo,dig),"\n

"Totalbuy = ",OrdersTotalMagicbuy(Magicbuy)," Lote = ",smbuy," Totalsellell = ",OrdersTotalMagicsell(Magicsell)," Lote = ",smsell,"\n",

"---------------------------------------------------------------","\n","Profitbuy = ",profitbuy,"\n",

"Profitsell = ",profitsell);

//----

for(int ii=0; ii<2; ii+=2)

{

ObjectDelete("rect "+ii);

ObjectCreate("rect "+ii,OBJ_HLINE, 0, 0,tps);

ObjectSet("rect "+ii, OBJPROP_COLOR, Red);

ObjectSet("rect "+ii, OBJPROP_WIDTH, 1);

ObjectSet("rect "+ii, OBJPROP_RAY, False);

}

for(int rr=0; rr<2; rr+=2)

{

ObjectDelete("rect1"+rr);

ObjectCreate("rect1"+rr,OBJ_HLINE, 0, 0,tpb);

ObjectSet("rect1"+rr, OBJPROP_COLOR, Blue);

ObjectSet("rect1"+rr, OBJPROP_WIDTH, 1);

ObjectSet("rect1"+rr, OBJPROP_RAY, False);

}

return(0);

}
 

...

Puede ser un par de razones, pero los más comunes son :

- el stop loss y/o el take profit están demasiado cerca del precio actual

- tu broker es de tipo ECN/STP en cuyo caso primero tienes que colocar una orden con stop loss y take profit puestos a 0 y solo cuando se abre una orden puedes modificar el stop loss y/o take profit a los valores deseados (respetando el punto anterior por supuesto)

pearl1:
¡Hola!

¿Alguien puede decirme por qué no puedo insertar el Stoploss en el ticket de envío de la orden?

Cuando lo inserto, el EA no funciona.

¡Gracias!
 

Hola a todos, me gustaría comprobar cómo puedo obtener el último precio actual en el gráfico? Sé que es un novato, pero no puedo encontrar la respuesta. Por favor, ayuda. Gracias.

Saludos

Terrance

 

...

Depende de cuál sea :

- el precio actual de la oferta es la oferta

- el precio actual es Ask

- cualquier otro precio: utilice el índice cero para el precio actual, así que Close[0] es el cierre actual, Open[0] es la apertura actual y así sucesivamente

tkuan77:
Hola a todos, me gustaría comprobar cómo puedo obtener el último precio actual en el gráfico? Sé que es un noob, pero no puedo encontrar la respuesta. Por favor, ayuda. Gracias.

Saludos

Terrance
 

Hola Mladen, Lo que estoy tratando de hacer es un control. Por ejemplo, si el precio actual está por encima de, digamos, la SMA 100, voy a hacer un zoom hacia abajo a un marco de tiempo inferior y sólo miraré la señal de compra. Pero si utilizo Bid o Ask, el sistema no puede decidir si estoy buscando en largo o en corto ya que Bid debería estar buscando en largo y viceversa para Ask (corrígeme si me equivoco aquí).

El concepto que tenía en mente es algo similar al sistema de comercio de 3 patos en la parte de comprobación. Por favor, aconséjeme aquí. Gracias.

Saludos

Terrance

mladen:
Depende de cuál:
- el precio actual de la oferta es Bid

- el precio actual de la demanda es Ask

- cualquier otro precio: usa el índice cero para el precio actual, así que Close[0] es el cierre actual, Open[0] es la apertura actual y así sucesivamente

 

...

Terrance

Usa Close[0] en ese caso. Casi todos los EAs usan close para ese propósito, así que creo que también te funcionará

tkuan77:
Hola Mladen, Lo que estoy tratando de hacer es un cheque. Por ejemplo, si el precio actual está por encima de, por ejemplo, la SMA 100, me acercaré a un marco de tiempo inferior y sólo miraré la señal de compra. Pero si utilizo Bid o Ask, el sistema no puede decidir si estoy buscando en largo o en corto ya que Bid debería estar buscando en largo y viceversa para Ask (corrígeme si me equivoco aquí).

El concepto que tenía en mente es algo similar al sistema de comercio de 3 patos en la parte de verificación. Por favor, aconséjeme aquí. Gracias.

Saludos

Terrance
 

EA no se ejecuta entre el precio en movimiento

Me di cuenta de que mi EA no se ejecuta entre el precio que se mueve en el marco de tiempo M1. Sé que el EA se ejecuta cada tick que entra.

Pero vi que se ejecutaba cada vez que se iniciaba una nueva barra.

¿Estoy entendiendo mal?

¿Existe la manera de forzar la activación del EA cada vez que entra un tick?

Trato de controlar mis ganancias y perdidas usando ganancias y perdidas no en pips. Cuando el pico sucede EA no cerrar la orden cuando llegar a la configuración de los beneficios o la pérdida hasta que la nueva barra se producen.

Cualquiera que me ayude a resolver este problema.

Soy nuevo en la codificación de EA.

Gracias de antemano.