¿Cómo codificar? - página 132

 

Añadir posición en este EA

Hola,

primero debo pedir disculpas porque el inglés no es mi lengua materna.

¿Cómo puedo modificar este EA para decirle que añada una posición (comprar 0,1 lotes) al cierre de la barra siempre que el RSI esté por encima de 67, y que venda siempre que el RSI esté por debajo de 33?

Por ejemplo

tiempo cierre RSI

17:31 1,3855 69,3 ---> comprar 0,1

17:32 1.3858 70.5 ---> comprar 0.1

17:33 1.3849 66.8 ---> ninguna acción

17:34 1.3856 68.4 ---> comprar 0.1

Posición total +0,03

Lo mismo para vender en corto.

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

//| Este MQL es generado por el Expert Advisor Builder.

//| Expert Advisor Builder para MetaTrader 4 ||

//| |

//| En ningún caso el autor será responsable de ningún daño. |

//| Utilice bajo su propio riesgo.

//| |

//+------------------- NO ELIMINE ESTA CABECERA --------------------+

#define SEÑAL_NADA 0

#define SEÑAL_BUY 1

#define SEÑAL_VENTA 2

#define SEÑAL_CLOSEBUY 3

#define SEÑAL_CLOSESELL 4

#propiedad copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int NúmeroMágico = 0;

extern bool SignalMail = False;

extern bool EachTickMode = False

extern double Lots = 0.1

extern int Slippage = 3;

extern bool UseStopLoss = False

extern int StopLoss = 30;

extern bool UseTakeProfit = False

extern int TakeProfit = 60

extern bool UseTrailingStop = False

extern int TrailingStop = 30

int BarCount;

int Actual;

bool TickCheck = False;

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

//| función de inicialización de expertos ||.

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

int init() {

BarCount = Bars;

si (EachTickMode) Current = 0; si no, Current = 1;

return(0);

}

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

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

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

int deinit() {

return(0);

}

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

//| función de inicio experta |

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

int inicio() {

int Orden = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Orden = SIGNAL_NONE;

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

//| Comienzo de la variable |++

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

double Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

double Compra1_2 = 67;

double Sell1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

double Venta1_2 = 33;

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

//| Fin de la variable

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

//Comprobar posición

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Cerrar

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

//| Señal Inicio(Salida Compra) || /Cerrar

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

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

//| Señal de Fin(Salir de la 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 = False;

continuar;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

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

if (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

} else {

//Cerrar

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

//| Señal de inicio (salida de la venta)

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

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

//| Señal Fin(Salir de la venta) ||||++ //++

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

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 = False;

continuar;

}

/Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

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

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

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

if (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

}

}

}

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

//| Señal Begin(Entry) |

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

si (Compra1_1 > Compra1_2) Orden = SEÑAL_BUY;

si (Venta1_1 < Venta1_2) Orden = SEÑAL_VENTA;

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

//| Fin de la señal

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

//Compra

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Comprobar el margen libre

if (AccountFreeMargin() < (1000 * Lots)) {

Print("No tenemos dinero. Margen libre = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; si no, StopLossLevel = 0.0;

si (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; si no, TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Orden de COMPRA abierta : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error al abrir la orden de COMPRA : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

/Vender

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Comprobar el margen libre

if (AccountFreeMargin() < (1000 * Lots)) {

Print("No tenemos dinero. Margen libre = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; si no, StopLossLevel = 0.0;

si (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; si no, TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("Orden de venta abierta : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error al abrir una orden de VENTA : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

Muchas gracias por tu ayuda

Panurgo

 

¿Cómo detener las operaciones después de las ganancias obtenidas en el día actual?

Hola.

Tengo un problema. Voy a codificar un EA.

Cuando un beneficio de 20 PIP del día se toma por lo que la EA no debe abrir cualquier orden hasta el día siguiente.

Por favor, ayúdenme.

Gracias

fxbeginner

 
fxbeginner:
Hola.

Tengo un problema. Voy a codificar un EA.

Cuando se toma un beneficio de 20 PIP del día por lo que el EA no debe abrir ninguna orden hasta el día siguiente.

Por favor, ayúdame.

Una idea sería no permitir el comercio después de la primera orden del día. Después de la función ordersend(), coloque un "trade = false;"

Luego restablecer la concesión de comercio cada nuevo día:

if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- Este es un nuevo día

timeprev = iTime(Symbol(),PERIOD_D1,0);

trade = true; }

Entonces, cuando compruebe su señal

if(trade) { su condición de negociación aquí }

Sólo un ejemplo ...

FerruFx

 

Órdenes ocultas

¿Cómo puedo codificar un EA para ocultar todas las órdenes de Buy o Sell Stop de las miradas indiscretas de los Brokers? El EA actual tiene órdenes pendientes de Buy Stops y Sell Stops.

Gracias

LF

 
LazyForex:
¿Cómo puedo codificar un EA para ocultar todas las órdenes de Buy o Sell Stop de las miradas indiscretas de los Brokers? El EA actual tiene órdenes pendientes de Buy Stops y Sell Stops.

Gracias

LF

Registrar el valor de buystop y sellstop dentro del EA, una vez que el precio cruza el nivel de buystop, enviar una orden de compra, viceversa para sellstop.

 
Devil2000:
Registra el valor de buystop y sellstop dentro del EA, una vez que el precio cruza el nivel de buystop, envía una orden de compra, viceversa para sellstop.

Gracias. Te envié un PM

 

Decirle a EA que deje de trabajar

Hola a todos,

Casi he terminado mi primer EA después de casi 7 días de prueba y error y cortar y pegar y horas de investigación....

El problema es que no se puede hacer un seguimiento de los resultados de las operaciones.

Quiero que el EA elimine todas las operaciones actuales y pendientes y salga después de alcanzar 10.000 en la equidad. Abajo está esa parte del código hasta ahora:

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

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

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

Como puede ver, el EA mira la Equidad y luego establece el valor bool de la variable StopTrade a true. El EA entonces reconoce el comando y no procesa nada bajo el StopTrade != true durante un ciclo, pero luego el valor bool del StopTrade se restablece supongo y las operaciones continúan.

En primer lugar, ¿hay alguna forma de conseguir que esto haga lo que necesito en la forma en que lo estoy haciendo?

En segundo lugar, ¿hay alguna función que pueda utilizar para simplemente decirle al EA que salga?

Toda la ayuda es muy apreciada.

 

¿Qué pasa con este código?

Puede alguien decirme por qué estoy generando un error con este comando en mi EA?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

Mover mi post no ayudó.

No puedo usar el número mágico porque estoy ejecutando el mismo EA en 8 pares diferentes. ¿Dónde está mi puesto original para que pueda seguirlo?

 

¿Qué pasa con este código?

¿Puede alguien decirme por qué estoy generando un error con este comando en mi EA?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);

Mi orden pendiente se coloca y devuelve el número de billete asignado a bTicket, pero luego bTicket no funciona en mi OrderSelect(). Me devuelve un error 0. Intenté referenciar por SELECT_BY_POS y asignar el número de ticket devuelto a bTicket y funcionó bien, pero no hay manera de saber cuál será el número de posición de todas mis órdenes sólo estar ejecutando el script. Cualquier ayuda es muy apreciada.