¿Cómo codificar? - página 110

 

Hola.

Estoy deseando aprender tus trucos y enseñarte los míos.

 
CodeMuncher:
Hola. Estoy deseando aprender tus trucos y enseñarte los míos.

En este foro encontrarás muchas cosas buenas.

¡¡¡Lee y utiliza la función de búsqueda sin ninguna restricción!!!

Siéntase libre de preguntar cualquier cosa ... Un montón de grandes colaboradores/ayudantes aquí.

FerruFx

 
fireslayer26:
En este código, tiene el trailing stop establecido para 45 pips. Pero el trailing stop no parece activarse hasta que se mueve 45 pips. ¿Cómo tendría que cambiarlo para que el trailing stop se active cuando se coloque la operación?

extern string Remark1 = "== Main Settings ==";

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = true;

extern double Lots = 4;

extern int Slippage = 2;

extern bool UseStopLoss = false;

extern int StopLoss = 100;

extern bool UseTakeProfit = false;

extern int TakeProfit = 15;

extern bool UseTrailingStop = true;

extern int TrailingStop = 45;

extern bool MoveStopOnce = False;

extern int MoveStopWhenPrice = 50;

extern int MoveStopTo = 1;

extern int MaxConcurrentTrades = 2;

//Version 2.01

int BarCount;

int Current;

bool TickCheck = False;

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

//| expert initialization function |

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

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

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

//| expert deinitialization function |

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

int deinit() {

return(0);

}

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

//| expert start function |

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

int start()

{

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

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

Total = OrdersTotal();

Order = SIGNAL_NONE;

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

//| Variable Begin |

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

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

//| Variable End |

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

//Check position

bool IsTrade = False;

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

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

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

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

//| Signal End(Exit Buy) |

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

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;

continue;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {

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

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

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

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

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

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell) |

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

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

//| Signal End(Exit Sell) |

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

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;

continue;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

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

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

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

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

Cambiado en rojo

 

Hice los cambios en rojo, pero ahora el EA no parece querer funcionar. Voy a publicar el EA completo para que le eches un vistazo. Gracias.

Archivos adjuntos:
williams_ea.mq4  12 kb
 

Asegúrate de poner () después de ordertoploss

 

Genial, ¡eso lo hizo!

¿Qué tal este indicador? ....

¿Podría modificarse para que los precios muestren diferentes colores dependiendo de cómo se abran? Por ejemplo, si abre más alto que la barra anterior, el precio sería verde, si es más bajo, entonces rojo, y si es parejo, entonces amarillo. ¿Con estos colores seleccionables? Además, ¿podría ampliarlo para que muestre 10 aperturas en lugar de sólo 6?

También en el EA que acabamos de arreglar, ¿Cómo podría poner una configuración de entrada como, "Pips para activar Trailing Stop". Tengo esto en otro EA pero no estoy seguro de cómo codificarlo.

Archivos adjuntos:
period_open.mq4  23 kb
 

PedidoComentario()

PedidoTicket()

OrdenarLotes()

OrdenStopLoss()

OrdenTakeProfit()

OrderOpenTime()

Todas estas son herramientas potenciales de filtrado de órdenes.

¿Qué más hay en esas operaciones específicas que las hace únicas?

 
Ronald Raygun:
OrdenComentario()

PedidoTicket()

OrdenarLotes()

OrdenStopLoss()

OrderTakeProfit()

OrderOpenTime()

Todas estas son herramientas potenciales de filtrado de órdenes.

¿Qué más hay en esos oficios específicos que los hace únicos?

Dos de las más importantes para filtrar órdenes son OrderSymbol() y OrderMagicNumber(). Otra herramienta importante es OrderComment().

La mejor idea es introducir una de ellas en el Metaeditor, luego hacer clic en la palabra asnd y después pulsar F1. Haciendo esto se mostrará la ayuda y se listarán todas las funciones de orden.

Feliz programación,

Hiachiever

 

Uso de OrderComment

Tenga cuidado al utilizar OrderComment() para identificar las operaciones. A veces el broker añade caracteres al comentario.

Es mejor utilizar

if (StringFind(OrderComment(), UserComment, 0) > 0)

{

// orden identificada por UserComment encontrada en OrderComment

}

en lugar de

if (OrderComment() == UserComment)

{

// la orden puede ser identificada por UserComment

// si OrderComment no fue modificado por el corredor

}

Robert

 

Cerrar operaciones en beakeven

..............