Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Hola codificadores,
¿Cómo codificar algunas líneas de codificación extra para que un Experto se detenga después de una operación ganadora?
Los pips están en la bolsa, y luego hacer las paradas de Expertos ...
Muchas gracias
Tomcat98Mira abajo si tienes algo de experiencia en codificación. Si no, consiga un codificador.
1) después de cada cierre de la operación, hacer un bucle en OrdersHistoryTotal() para comprobar las operaciones.
2) comprobar el último cierre de la operación ( OrderCloseTime() ) .
3) si el último comercio, comprobar OrderProfit() == beneficio.
Si en profit == true, establecer EndDayTrade == true && LastTradeDay == DayofYear().
Si en profit == false, establecer EndDayTrade == false.
4) Cuando el programa pasa por start(), tendrá que insertar ==> si EndDayTrade == false antes de iniciar cualquier nueva operación. Ya que es verdadero, entonces no activará nuevas operaciones.
5) usted necesitará una función de temporizador para comprobar el nuevo día. (asumiendo que el nuevo día es lo que usted quiere para desencadenar nuevas operaciones)
La forma más sencilla sería if (LastDay != DayofYear() ).
6) dentro de la función de temporizador anterior, establecer LastDay = DayofYear().
if ( LastTradeDay != DayofYear() && EndDayTrade == true)
establece EndDayTrade == false, con lo que todo vuelve a empezar.
variables definidas por el usuario
bool EndDayTrade = false;
int LastTradeDay = 9999999;
int LastDay = 999999;
Espero que esta explicación sea lo suficientemente clara.
Hola,
Estoy tratando de fusionar estos dos códigos pero tengo problemas con ellos.
Necesito que cuando una orden pendiente se llene la otra debe ser cancelada.
Gracias por su disponibilidad
int pending =0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() !=Symbol()) continue;
if(OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
opened++;
else pending++;
}
if (opened>0 && pending>0)
{
for(i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() !=Symbol()) continue;
if(OrderMagicNumber()!=Magic) continue;
if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)
OrderDelete(OrderTicket());
}
} [/PHP]
[PHP] extern int Magic = 68415;
extern int Orario_Inizio = 0;
extern int Orario_Fine = 6;
extern int Buffer = 0;
extern double Lotti = 0.1;
extern int TakeProfit = 10;
extern int StopLoss = 50;
double Massimo;
double Minimo;
int BarCount;
int BarStart;
int BarShift;
double MinLot;
double LotSize;
int i;
int ticket;
string Status;
string BuyStatus1;
string SellStatus1;
double Range;
string CommentoRange;
double pipMultiplier = 1;
int init()
{
}
int start()
{
if (Digits==3 || Digits==5)
{pipMultiplier = 10;}
else {pipMultiplier = 1; }
double TakeProfit1 = TakeProfit*Point*pipMultiplier;
double StopLoss1 = StopLoss*Point*pipMultiplier;
double Buffer1 = Buffer*Point*pipMultiplier;
double StopLossPrice = NormalizeDouble(StopLoss1,Digits);
double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);
double BufferPrice = NormalizeDouble(Buffer1,Digits);
//CALCOLA LE BARRE DEL RANGE
if(Orario_Inizio>Orario_Fine)
{
BarCount=24+Orario_Fine-Orario_Inizio;
}
if(Orario_Inizio<Orario_Fine)
{
BarCount=Orario_Fine-Orario_Inizio;
}
//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE
if(Hour()>=Orario_Fine)
{
BarStart=Hour()-Orario_Fine;
BarShift=BarStart+BarCount;
Minimo=iLow(NULL,PERIOD_H1,BarStart);
Massimo=0;
for(i=BarStart;i<=BarShift;i++)
{
Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));
Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));
Range=(Massimo-Minimo)/Point;
}
}
else
{
Massimo=0;
Minimo=0;
return(0);
}
//CONTROLLA SE E' L'ORARIO PER POTER TRADARE
if(Hour()==Orario_Fine && OrdersTotal()<2)
{
//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY
double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);
//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL
double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);
if (ticket != -1)
return(0);
}
}¿Alguien puede ayudar?
dasio
Intenta colocar todo ese código al principio del procedimiento start(). Probablemente tendrás que filtrar algo más en el camino cuando estés abriendo órdenes pendientes, pero si colocas ese código al principio limpiará las órdenes pendientes si alguna de las órdenes pendientes abiertas anteriormente se convierte en una orden "normal".
¿Alguien puede ayudar?
Hola,
Estoy aprendiendo mucho de este hilo es por eso que sigo haciendo preguntas.
Ahora. Intento hacerlo solo pero no tengo éxito.
Premisa quiero usar este indicador en un gráfico renko offline.
Mi propósito es trazar por encima o por debajo de la vela ¿Cuánto tiempo hizo la construcción.
Así que sé que en la especificación de la vela no es el momento en que se abrió. Así que si hago el tiempo de la vela actual menos la vela de la anterior tengo lo que necesito.
Entonces, ¿cómo puedo codificarla?
Muchas gracias
No puedo entender por qué este código está tratando de modificar las órdenes cerradas
Añadí el OrderCloseTime() a ambas declaraciones if pensando que pondría fin a esta entrada inválida para el error de la función ordermodify pero de vez en cuando mi EA perderá el control de todas las órdenes y de alguna manera se mezclará en una operación cerrada y continuamente tratará de modificarla una y otra vez haciendo enormes archivos de registro y no continuará operando a menos que reinicie la MT4. No estoy exactamente seguro de cómo está recogiendo una orden cerrada, tal vez mientras que está en el proceso de modificación de todas las órdenes de uno de ellos se cierra en ese corto tiempo y lo tira? Como he dicho esto ocurrirá quizás dos veces de 30-50 operaciones al día.
¿Alguien tiene alguna idea sobre cómo poner fin a esto?
if (flag_s3 == TRUE) {
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {
OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
//===
while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))
{Sleep(1000);RefreshRates();}
//===
NewOrdersPlaced_s3 = FALSE;
}
}Problemas de señalización
mladen
Muchas gracias, el código ya funciona, la alerta ya no se repite, por favor quiero alojar un script que envíe alertas de trading a múltiples destinatarios, como cientos de ellos, como puedo hacer eso... ¿Hay empresas que puedan manejar eso que tú o alguien de este foro conozca?
Mladen Gracias, he mirado de cerca....Im todavía experimentar el code.I será notificar cuando a través de.
...
2 pensamientos :
1. Si vas a enviarlo, creo que la única forma razonable es el envío de correo y en ese caso ¿por qué no utilizas simplemente uno de los programas de envío de correo electrónico que hay en la naturaleza?
2. El envío de señales tiene demasiados problemas (es mi opinión, algunos de los problemas del envío son prácticamente irresolubles). Entonces, ¿por qué no invertir la lógica: en lugar de enviar, hacer un código que va a leer (con el nombre de usuario, pase, y así sucesivamente ...) de un lugar determinado y de esa manera usted tiene casi todos los problemas que el envío no puede resolver, resuelto (incluida la prevención de la utilización de múltiples IPs al mismo tiempo)
Así que, sólo algunas ideas ...
mladen Muchas gracias el código ya funciona.La alerta ya no se repite.Por favor, quiero alojar un scripts que va a enviar alertas de comercio a múltiples destinatarios, como cientos de ellos, ¿cómo puedo hacer eso ... ¿Hay empresas que pueden manejar que usted o alguien en este foro sabe.
Intenta algo como esto :
#define PAUSE_BEFORE_RETRY 1000
#define NumberOfReTries 3
if (NewOrdersPlaced_s3 && flag_s3 == TRUE)
{
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--)
{
if (!OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != MagicNumber_3) continue;
for (int retry=0; retry<NumberOfReTries; retry++)
{
OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
int error = GetLastError();
switch (error)
{
case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
Sleep(PAUSE_BEFORE_RETRY);
continue;
case ERR_PRICE_CHANGED:
case ERR_REQUOTE:
continue;
default:
retry=NumberOfReTries;
}
}
NewOrdersPlaced_s3 = FALSE;
}
}He añadido el OrderCloseTime() a las dos sentencias if pensando que eso pondría fin a esta entrada inválida para el error de la función ordermodify pero de vez en cuando mi EA perderá el control de todas las órdenes y de alguna manera se mezclará en una operación cerrada y continuamente tratará de modificarla una y otra vez haciendo enormes archivos de registro y no seguirá operando a menos que reinicie la MT4. No estoy exactamente seguro de cómo está recogiendo una orden cerrada, tal vez mientras que está en el proceso de modificación de todas las órdenes de uno de ellos se cierra en ese corto tiempo y lo tira? Como he dicho esto ocurrirá quizás dos veces de 30-50 operaciones al día.
¿Alguien tiene alguna idea sobre cómo poner fin a esto?
if (flag_s3 == TRUE) {
for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {
OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);
//===
while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))
{Sleep(1000);RefreshRates();}
//===
NewOrdersPlaced_s3 = FALSE;
}
}Soluciones a las alertas
Creo que necesito más explicaciones sobre esto, ¿puede darme una pista sobre cómo escribir y configurar un código que me ayudará a enviar la alerta a todos mis clientes al mismo tiempo.es mediante el almacenamiento de su dirección de correo electrónico en la base de datos.....pero ¿cómo el lenguaje del servidor, por ejemplo, script php, recoger las alertas de la plataforma mt4 automáticamente? ......Creo que este es el problema, si puede haber una manera, se puede enviar a múltiples teléfonos móviles o dirección de correo electrónico.su consejo, por favor?
2 pensamientos :
1. Si vas a enviarlo, entonces creo que la única manera razonable es el envío de correo y en ese caso ¿por qué no simplemente utilizar uno de los programas de spam de correo electrónico que hay en la naturaleza?
2. El envío de señales tiene demasiados problemas (es mi opinión, algunos de los problemas del envío son prácticamente irresolubles). Entonces, ¿por qué no invertir la lógica : en lugar de enviar, hacer un código que será la lectura (con el nombre de usuario, pase , y así sucesivamente ...) de un lugar determinado y de esa manera usted tiene casi todos los problemas que el envío no puede resolver, resuelto (incluida la prevención de la utilización de múltiples IPs al mismo tiempo)
Por lo tanto, sólo algunos pensamientos ...Mastercash
Intenta buscar en Google "envío de correos electrónicos masivos" y creo que encontrarás una respuesta para eso
En cuanto a la "recogida de alertas": tienes que tener algo que lo"exporte" a algún formato legible que sea reconocido entonces por un software de tu elección que distribuya señales o permita el acceso a esa señal
P.D.: los servicios de señalización son mucho más complejos de lo que parece a primera vista y, si planeas hacer uno, puedes contar con costes sustanciales para que funcione como debería
Creo que necesito más explicaciones sobre esto, ¿puede darme una pista sobre cómo escribir y configurar un código que me ayudará a enviar la alerta a todos mis clientes al mismo tiempo.es mediante el almacenamiento de su dirección de correo electrónico en la base de datos.....pero ¿cómo el lenguaje del servidor, por ejemplo, script php, recoger las alertas de la plataforma mt4 automáticamente? ......Creo que este es el problema, si puede haber una manera, se puede enviar a múltiples teléfonos móviles o dirección de correo electrónico.su consejo, por favor?