¿Cómo codificar? - página 278

 

Lo he probado durante 20 días y parece que he perdido dinero

Voy a backtest para un año, vamos a ver

pero en primer lugar necesito si puedo modificar los tiempos con sólo cambiar el valor en extern string begin y extern string end?

 

También lo que noté es que EA hace operaciones múltiples veces al día. Así que debemos decirle a EA que haga sólo una operación para la primera ruptura de este rango Min-Max -/+ 5 pips. También debemos incorporar trailing stop en lugar de sólo stop loss.

También pregunta sobre los números. ¿No es 300 igual a 300 pips? necesitamos que el stop sea de 30 pips y el take profit de 50 pips. Tambien que significa magis = 123?

la misma pregunta para este if(Bid<=(low-0.005)) 0.005 aquí no es 50 pips?

no es extern double stopLoss = 300.0;

extern doubletakeProfit= 500.0;

extern string Begin="02:00";

extern string End="10:00";

extern double distancia = 80;

bool isECN = true

bool cond = false

bool cond2 = false

double low;

double high;

extern double lotes = 0.1;

int magic = 123

int deslizamiento = 1;

string comment = "";

int billete;

 
Avasys:
También lo que he notado es que EA hace operaciones múltiples veces al día. Así que debemos decirle al EA que haga sólo una operación para la primera ruptura de este rango Min-Max -/+ 5 pips. También debemos incorporar trailing stop en lugar de sólo stop loss.

También pregunta sobre los números. ¿No es 300 igual a 300 pips? necesitamos que el stop sea de 30 pips y el take profit de 50 pips. También ¿qué significa magis = 123?

la misma pregunta para este if(Bid<=(low-0.005)) 0.005 aquí no es 50 pips?

no es extern double stopLoss = 300.0;

extern doubletakeProfit= 500.0;

extern string Begin="02:00";

extern string End="10:00";

extern double distancia = 80;

bool isECN = true

bool cond = false

bool cond2 = false

double low;

double high;

extern double lotes = 0.1;

int magic = 123

int deslizamiento = 1;

string comment = "";

int ticket;

[lang=pl]Tienes razón debería ser 0.0005 en lugar de 0.005. 300 y 500 es porque uso cinco dígitos broker es decir 300 poits así que 30 pips.

Por favor, dígame que tipo de trailing stop necesita, sobre el número mágico. Como puedes ver te cambio la magia si no te gusta 123 [/lang]

Archivos adjuntos:
simple_ea.mq4  4 kb
 
g.pociejewski:
[lang=pl]Tienes razón debería ser 0.0005 en lugar de 0.005. 300 y 500 es porque uso cinco dígitos broker es decir 300 poits así que 30 pips. Por favor, dígame que tipo de trailing stop necesita, sobre el número mágico. Como puedes ver, te cambio la magia si no te gusta 123 [/lang]

Gracias

Así que este EA ahora hace operaciones sólo una vez en un día, por lo que la ruptura de los niveles puede ocurrir varias veces a través del día, pero sólo puede operar una vez.

También con respecto a EURJPY ya que es una moneda de alto valor, sigo utilizando la misma numeración o muevo 00?

y también puedo yo mismo cambiar o modificar los números de stop loss, take profit, tiempos

con respecto al trailing stop. Me gustaría que cuando el beneficio se eleva 35 pips trailing stop debe seguir para bloquear el beneficio.

Entonces, ¿qué pasa si cambio aquí:

extern double stopLoss = 300.0; (Yo uso 4 dígitos broker así, ¿debo modificar esto?)

extern double takeProfit = 500 . 0;

extern string Begin="0:00"; (¿qué pasa si quiero hacer el rango de tiempo 22:00 del día anterior y 06:00 del día actual?)

extern string End="08:15";

extern double distancia=60;

bool isECN = true;

bool cond = false

bool cond2 = false

double low

double high;

extern double lotes = 0.1;

int magic = 123

int deslizamiento = 1;

string comment = "";

int ticket;

también que pasa si cambio esto

if(Oferta<=(baja-0.005))

Puede que no afecte a la funcionalidad del código ¿verdad?

El único problema que tiene cuando trato de backtest conseguí que como si EA ejecutado pocos oficios en un día, por lo que puede manejar en el código para ejecutar sólo un comercio para un par por día

 

Hola de nuevo

OK me di cuenta de que la distancia debe ser no 80 para los pares como GBPUSD que tiene un valor más bajo que los pares JPY por lo que en el caso de los pares JPY distancia debe ser 10X que para los pares de bajo valor.

Y de nuevo, no pude entender una cosa cuando lo backtest en el resultado que establece como si EA negociado varias veces en un día en el mismo par.

Entonces, ¿es posible que si el EA entró en posición esta posición debe ser sólo una ese día?

Gracias

Además, ¿qué significa lo siguiente?

int slippage= 1;

stringcomment = "";

int ticket;

y también ¿podría añadir la secuencia de comandos en la EA y cuando el comercio ejecutado es sms-ed o por correo electrónico a mí?

gracias

 

StopTrading para el día de hoy, si una orden se encuentra en el historial listado

Hola,

tal vez alguien puede guiarme a hacer:

- La orden se ejecuta, se cierra en beneficio o pérdida y aparece en el historial

- ahora quiero deshabilitar el comercio / detener la apertura de nuevas órdenes en este par (símbolo) para todo el día

- al día siguiente, una nueva orden puede ser ejecutada

es como una función"Max Trades Per Bar", pero basada en el historial.

varios fragmentos de código probados fallan, porque me faltan habilidades de codificación extendida

ejemplo:

1 2008.01.07 02:36 vender 1 0.10 1.4730 0.0000 0.0000 0.00 10000.00

2 2008.01.07 03:14 cerrar 1 0.10 1.4714 0.0000 0.0000 16.00 10016.00

3 2008.01.07 03:14 vender 2 0.10 1.4712 0.0000 0.0000 0.00 10016.00

4 2008.01.07 07:54 cerrar 2 0.10 1.4672 0.0000 0.0000 40.00 10056.00

5 2008.01.07 07:54 vender 3 0.10 1.4671 0.0000 0.0000 0.00 10056.00

6 2008.01.09 15:56 cerrar 3 0.10 1.4663 0.0000 0.0000 7.04 10063.04

7 2008.01.10 14:24 comprar 4 0.10 1.4708 0.0000 0.00 10063.04

8 2008.01.10 14:47 cerrar 4 0.10 1.4748 0.0000 0.0000 40.50 10103.54

cualquier ayuda es muy apreciada

saludos

Michael

 
ixbone:
Hola,

tal vez alguien puede guiarme a hacer:

- La orden se ejecuta, se cierra con ganancias o pérdidas y aparece en el historial

- ahora quiero deshabilitar las operaciones/dejar de abrir nuevas órdenes en este par (símbolo) durante todo el día

- al día siguiente, una nueva orden puede ser ejecutada

es como una función "Max Trades Per Bar", pero basada en el historial.

varios fragmentos de código probados fallan, porque me faltan habilidades de codificación extendida

ejemplo:

1 2008.01.07 02:36 vender 1 0.10 1.4730 0.0000 0.0000 0.00 10000.00

2 2008.01.07 03:14 cerrar 1 0.10 1.4714 0.0000 0.0000 16.00 10016.00

3 2008.01.07 03:14 vender 2 0.10 1.4712 0.0000 0.0000 0.00 10016.00

4 2008.01.07 07:54 cerrar 2 0.10 1.4672 0.0000 0.0000 40.00 10056.00

5 2008.01.07 07:54 vender 3 0.10 1.4671 0.0000 0.0000 0.00 10056.00

6 2008.01.09 15:56 cerrar 3 0.10 1.4663 0.0000 0.0000 7.04 10063.04

7 2008.01.10 14:24 comprar 4 0.10 1.4708 0.0000 0.00 10063.04

8 2008.01.10 14:47 cerrar 4 0.10 1.4748 0.0000 0.0000 40.50 10103.54

cualquier ayuda es muy apreciada

saludos

Michael

[lang=pl]Hola Michael,

Una pregunta, ¿es necesario detener la apertura de nuevas posiciones si cualquier posición en el día actual está cerrada, o no permite por ejemplo abrir cortos si cualquier corto

se cierra en la parada? Hay algún ejemplo de cómo hacerlo en el caso de OP_BUY(para otros es similar)

int tiempo;

bool cond = true;

double stopLoss = 50;

double takeProfit = 70;

double lotes = 0.1;

int órdenes = 0;

int magic = 123;

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

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

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

//| función de inicio experto ||

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

int inicio()

{

Print(countOrders(magic, OP_BUY));

if(orders !=countOrders(magic,OP_BUY)) cond = false;

if(time != DayOfWeek()) cond = true;

if(cond) {

OrderSend(Symbol(),OP_BUY,lots,Ask, 1,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),"",magic);

}

orders = countOrders(magic,OP_BUY);

time = DayOfWeek();

//----

return(0);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2){

if(w2 == 0)

return(0);

return (NormalizeDouble(w1, Digits));

}

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

Espero que quede claro. En el caso de cualquier duda contactad conmigo por favor.

Saludos,

Grzesiek[/lang]

 

Hola Grzesiek,

sí, sólo se permite la apertura de nuevas posiciones en el día actual, no importa si se trata de compra, venta, pendiente o cancelada:

- si una orden se cierra en beneficio, pérdida, cancelada o pendiente borrada y anotada en el historial - no se permiten nuevas operaciones de ningún tipo para este símbolo() en el día actual

- si tenemos un nuevo día, se pueden ejecutar todo tipo de nuevas órdenes.

lo que he hecho, no funciona:

extern bool Only1OrderPerDay=true;

if(Only1OrderPerDay==true){

CountHistoryOrders();

}

void ContarPedidosDeLaHistoria(){

for(int d=0;d<TotalPedidosHistoria();d++){

OrderSelect(d,SELECT_BY_POS,MODE_HISTORY);{

if(OrderSymbol()==Symbol() && (OrderMagicNumber()==Magic || Magic==0))d++;

Print("HistoriaOrdenes "+DoubleToStr(d,0));

{

if(d>0 ....time?...){

retorna;

}}}}}

gracias por la ayuda

Michael

g.pociejewski:
[lang=pl]Hola Michael,

Una pregunta, ¿es necesario detener la apertura de nuevas posiciones si cualquier posición en el día actual está cerrada, o no permite por ejemplo abrir cortos si cualquier corto

se cierra en la parada? Hay algún ejemplo de cómo hacerlo en el caso de OP_BUY(para otros es similar)

int tiempo;

bool cond = true;

double stopLoss = 50;

double takeProfit = 70;

double lotes = 0.1;

int órdenes = 0;

int magic = 123;

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

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

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

//| función de inicio experto ||

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

int inicio()

{

Print(countOrders(magic, OP_BUY));

if(orders !=countOrders(magic,OP_BUY)) cond = false;

if(time != DayOfWeek()) cond = true;

if(cond) {

OrderSend(Symbol(),OP_BUY,lots,Ask, 1,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),"",magic);

}

orders = countOrders(magic,OP_BUY);

time = DayOfWeek();

//----

return(0);

}

int countOrders(int oMagic,int oType) {

int count=0;

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2){

if(w2 == 0)

return(0);

return (NormalizeDouble(w1, Digits));

}

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

Espero que quede claro. En el caso de cualquier duda contactad conmigo por favor.

Saludos,

Grzesiek[/lang]
 

Arrastrar y soltar Stop Loss

Hola

Tengo Drag and Drop Stop loss script, y un amor para usarlo. Pero con mi broker no funciona para 2 ordenes en un mismo scart solo establece 1 orden. Quiero establecer el stop loss para 2 órdenes en el mismo lugar.

¿Cuál es el problema? Funciona bien con otros brokers.

Por favor, ayuda

int inicio()

{

//----

int digits = MarketInfo(Symbol(),MODE_DIGITS);

double value = NormalizeDouble(WindowPriceOnDropped(),digits);

for(int i=TotalOrdenes()-1;i>=0;i--)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

continuar;

if(OrderSymbol()!=Symbol())

continuar;

RefrescarTarifas();

if(OrderType()==OP_BUY)

if(value<Bid)

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if(OrderType()==OP_SELL)

if(value>Ask)

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if((OrderType()==OP_BUYSTOP) || (OrderType()==OP_BUYLIMIT))

if(value<OrderOpenPrice())

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

if((OrderType()==OP_SELLSTOP) || (OrderType()==OP_SELLLIMIT))

if(value>OrderOpenPrice())

OrderModify(OrderTicket(),OrderOpenPrice(),value, OrderTakeProfit(),OrderExpiration(),White);

}

return(0);

}

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

 

¿Cómo puedo encontrar la posición de la coordenada X Y de dos indicadores diferentes en un EA para comprar y vender donde se cruzan

digamos un Macd y otro indicador en la misma sub-ventana?

Razón de la queja: