¿Cómo codificar? - página 279

 
g.pociejewski:
[lang=pl]Una pregunta más, ¿tu hora es GMT o no? Si no es GMT voy a hacer pocos cambios en este EA.

Acabo de hacer que por favor, compruebe que me PM si todo está bien.

Distancia beetwen baja y alta stopLoss y TP hice como variabels externos.

Saludos Grzesiek.[/lang]

Estimado Grzesiek

He pegado este indicador en la carpeta de expertos y hoy he supervisado para aprender cómo funciona. El problema que tiene es que una vez que hace la primera operación y cierra la orden, ya sea en la parada o t / p, entonces inmediatamente EA comienza de nuevo el comercio en el precio que cerró la orden reciente. ¿Cómo puedo detenerlo en el código?

 

¿Alguien puede ayudarme con esto?

Hola Foro

este código tiene un problema, cuando ejecuta la operación está bien pero cuando cierra la orden de nuevo EA abre una nueva operación al precio y en el momento en que se cerró la orden anterior. No he visto ningún error en el código. Quien escribió esto está muy ocupado y no está conectado. ¿Puede alguien sugerir cuál es el problema?

extern double stopLoss = 35.0;

extern double takeProfit = 50.0;

extern string Begin="00:00";

extern string End="08:00";

extern double distancia = 5;

bool isECN = true

bool cond = false

bool cond2 = false

double low;

double high;

extern double lotes = 1;

int magic = 123

int deslizamiento = 1;

string comment = "test";

int billete;

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

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

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

//| función de inicio experto ||

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

int inicio()

{

//----

if(isGoodTime(Begin,End))

{

if(!cond)

{

bajo = Oferta;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

if(Ask > high) high = Ask;

}

if((alto - bajo)*1000>distancia)

{

cond2 = true;

}

if(!isGoodTime(Begin,End))

{

cond = false;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0010))

{

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.0010)

{

if(isECN==false)

{

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

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true);

}

return(false);

}

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));

}

 

Hola Avasys,

Por lo que veo no hay nada malo en el código, basándome en tu descripción hace exactamente lo que está programado para hacer (comprar cuando el Ask es mayor que el high y vender cuando el bid es menor que el low) básicamente sigue comprando y vendiendo a medida que el high y el low se rompen, respectivamente.

Saludos,

 
Avasys:
Gracias por su comentario

¿Hay alguna manera de decirle al código que el comercio sólo una vez en el día y sólo la primera ruptura.

El autor de este código es un hombre muy ocupado que no pudo aportar mucho tiempo como parece

se agradece la ayuda

[lang=pl]//+------------------------------------------------------------------+

//| simple EA.mq4 ||||||||||||||||||||

//| Copyright © 2011, luktom.biz

/ /| www.luktom.biz/en

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

#property copyright "Copyright © 2011, luktom.biz."

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="2:00";

extern string End="10:00";

extern double distancia=60;

bool isECN = true

bool cond = false

bool cond2 = false

double low;

double high;

extern double lotes = 0.1;

int magic = 1232344524285020;

int deslizamiento = 1;

string comment = "";

int billete;

int short = 0

int long = 0;

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

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

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

Print(countOrders(magic,OP_BUY));

//----

return(0);

}

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

//| función de inicio de experto ||

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

int inicio()

{

Print(CuentaDivisa());

//----

if(isGoodTime(Begin,End))

{

short = 0;

long = 0;

if(!cond)

{

low = Oferta;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

if(Ask > high) high = Ask;

}

if((alto - bajo)*1000>distancia)

{

cond2 = true;

}

if(!isGoodTime(Begin,End))

{

cond = false;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Oferta<=(low-0.0005) && short == 0)

{

short++;

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.005 && long ==0)

{

long++;

if(isECN==false)

{

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

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true);

}

return(false);

}

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));

}

Ahora EA abre sólo una posición por día. Refiriéndose a su pregunta acerca de los correos electrónicos, en algún lugar en el foro existe mi puesto en este ellos:)

Hazme saber si lo encuentras.

Saludos,

Grzesiek[/lang]

 
Pip:
Hola Avasys,

Por lo que puedo decir no hay nada malo con el código, basado en su descripción hace exactamente lo que está programado para hacer (comprar cuando Ask es más alto que el alto y vender cuando la oferta es más baja que el bajo) básicamente sigue comprando y vendiendo cuando el alto y el bajo se rompen, respectivamente.

Saludos,

Gracias por tu comentario

¿Hay alguna forma de decirle al código que opere sólo una vez en el día y sólo en la primera ruptura?

El autor de este código es un hombre muy ocupado que no podía contribuir mucho tiempo como parece

y lo que he notado es que el sistema ejecuta operaciones a pesar de que el rango entre los tiempos indicados en el código es de más de 60 pips el sistema sigue operando, solo opera si el rango entre los tiempos específicos (indicados en el código, ver tiempos de inicio y fin) es de menos de 60 pips entonces opera.

se agradece la ayuda

 
g.pociejewski:
[lang=pl]//+------------------------------------------------------------------+

//| simple EA.mq4 |

//| Copyright © 2011, luktom.biz

/ /| www.luktom.biz/en

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

#property copyright "Copyright © 2011, luktom.biz."

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="2:00";

extern string End="10:00";

extern double distancia=60;

bool isECN = true

bool cond = false

bool cond2 = false

double low;

double high;

extern double lotes = 0.1;

int magic = 1232344524285020;

int deslizamiento = 1;

string comment = "";

int billete;

int short = 0

int long = 0;

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

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

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

Print(countOrders(magic,OP_BUY));

//----

return(0);

}

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

//| función de inicio de experto ||

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

int inicio()

{

Print(CuentaDivisa());

//----

if(isGoodTime(Begin,End))

{

short = 0;

long = 0;

if(!cond)

{

low = Oferta;

high = Ask;

}

cond = true;

if(Bid < low) low = Bid;

if(Ask > high) high = Ask;

}

if((alto - bajo)*1000>distancia)

{

cond2 = true;

}

if(!isGoodTime(Begin,End))

{

cond = false;

}

if(!isGoodTime(Begin,End) && cond2)

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Oferta<=(low-0.0005) && short == 0)

{

short++;

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic);

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point,takeProfit),0);

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.005 && long ==0)

{

long++;

if(isECN==false)

{

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

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point,takeProfit),0);

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) {

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true);

}

return(false);

}

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));

}

Ahora EA abre sólo una posición por día. Refiriéndose a su pregunta acerca de los correos electrónicos, en algún lugar en el foro existe mi puesto en este ellos:)

Hazme saber si lo encuentras.

Saludos,

Grzesiek[/lang]

gracias hombre,

He copiado todo el código aquí y pegado en el archivo mq4, pero cuando lo copié a la carpeta de expertos no funcionó, no creó el archivo ex4 y no está en el manu de asesores de expertos. Así que por favor puede subir como archivo mq4 o hay alguna cosa en el código, porque he intentado varias veces

 

Detectar las posiciones de los clics del ratón en el gráfico

¿Es posible detectar la posición de un clic del ratón en MT4? No me refiero a WindowOnDrop. Si conozco las coordenadas x,y de la pantalla, ¿puedo convertirlas en el Precio/Hora correspondiente?

Gracias por su ayuda.

Saludos cordiales,

Tiffany

 

Estimado amigo

Hoy lunes el código (antiguo que funcionaba el jueves y el viernes) no ha funcionado en absoluto

He introducido manualmente las operaciones,

 

Sistema sencillo: Necesita muy poca recomendación de EA

Esta es la lógica

Comercio cuando el rango entre GMT 02:00 y 10:00 es menos de 60 pips entonces Abrir vender si el precio rompe mínimo - 5pips línea o comprar si el precio rompe máximo + 5 pips línea. Y EJECUTE SOLO UNA OPERACIÓN POR DÍA, NO IMPORTA QUE LA OPERACIÓN SE CANCELE, SE CIERRE CON EL STOP O SE TOME EL BENEFICIO, SOLO UNA ORDEN POR DÍA.

AQUÍ ESTÁ EL CÓDIGO PERO NO FUNCIONA, EN EL MANU DEL EA DE MT4 tiene el icono de inactivo y no hay ningún archivo ex4 en la carpeta de expertos, no pude entender lo que está mal

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin = "2: 00";

extern string End = "10: 00";

extern double distancia = 60;

bool isECN = true

bool cond = false

bool cond2 = false

double low;

double high;

extern double lotes = 0.1;

int magic = 1232344524285020;

int deslizamiento = 1;

string comment = "";

int billete;

int short = 0;

long int = 0;

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

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

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

int init()

{

//----

//----

(0) return;

}

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

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

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

int deinit ()

{

//----

Imprimir (countOrders (magic, OP_BUY));

//----

(0) return;

}

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

//| función de inicio de experto ||

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

int inicio()

{

Imprimir (AccountCurrency ());

//----

if (isGoodTime (Begin, End))

{

short = 0;

long = 0;

si (! cond)

{

low = Oferta;

high = Ask;

}

cond = true;

si (Oferta < baja) baja = Oferta;

si (Ask > high) high = Ask;

}

si ((alto-bajo) * 1000 > distancia)

{

cond2 = true;

}

if (! isGoodTime (Begin, End))

{

cond = false;

}

if (! isGoodTime (Begin, End) & & cond2)

{

if (countOrders (magic, OP_SELL) == 0)

{

if (Oferta ≪ = (CRL-0.0005) & & short == 0)

{

corto + +;

si (isECN == false)

{

OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Ask-takeProfit * Point, takeProfit), comment, magic);

}

si (isECN)

{

ticket = OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, 0,0, comment, magic);

OrderSelect (ticket, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Bid-takeProfit * Point, takeProfit), 0);

}

}

}

if (countOrders (magic, OP_BUY) == 0)

{

if ((Ask-high) > = 0.005 & & long = = 0)

{

largo + +;

si (isECN == false)

{

OrderSend (Symbol (), OP_BUY, lotes, Ask, slippage, sltpValue (Ask-stopLoss * Point, stopLoss), sltpValue (Bid + takeProfit * Point, takeProfit), comment, magic);

}

si (isECN)

{

ticket = OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, 0,0, comment, magic);

OrderSelect (ticket, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Bid-stopLoss * Point, stopLoss), sltpValue (Ask + takeProfit * Point, takeProfit), 0);

}

}

}

}

//----

(0) return;

}

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

bool isGoodTime (string, string, Begin, End) {

if (TimeCurrent () > Localtime (Begin) & & TimeCurrent < Localtime () (End)) {

return (true);

}

return (false);

}

int countOrders (int, int oMagic oType) {

int count = 0;

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

if (OrderSelect (i, SELECT_BY_POS)) {

if (OrderMagicNumber () == oMagic) {

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

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

cuenta ++;

}

}

}

}

}

return (count);

}

double sltpValue (double, int w1 w2)

{

si (w2 = = 0)

return (0);

return (NormalizeDouble (w1, Digits));

}

 

Forex.com EAs

Soy un idiota. He publicado esto en el foro equivocado... y no sé cómo moverlo al foro de programación. Me disculpo por las molestias; el error fue involuntario.

He estado operando en forex al contado durante 3 años y he desarrollado 2 EAs. Estos EAs funcionan bien en Glocap, FXCM y Alpari (soy residente de los Estados Unidos, así que mi elección de corredores es algo limitada). Además, quiero una cuenta MT4 con la comisión incorporada en el spread (preferencia personal).

Recientemente probé estos EAs en una cuenta demo de Forex.com (Gain Capital). Ambos EAs funcionaron bien y operaron de acuerdo con las reglas programadas. Sin embargo, cuando abrí una cuenta real con Forex.com, el EA #1 ya no funciona correctamente, pero el EA #2 funciona bien. El EA #1 funciona bien en el probador de estrategias de Forex.com, pero sé que eso no cuenta mucho. Todo esto es muy extraño para mí, porque ambos EAs utilizan el mismo código para abrir las operaciones (el error en el EA # 1 viene al tratar de abrir las operaciones), establecer el tamaño del lote, supervisar las operaciones y cerrar las operaciones. Aquí hay un poco de información sobre ambos EAs:

EA #1 EUR/JPY Utiliza el indicador Ichimoku

EA #2 EUR/USD Utiliza 3 medias móviles y MACD

Como dije antes, el EA #2 opera bien; trabaja de acuerdo a las reglas programadas. Cuando el EA #1 intenta abrir algunas operaciones, recibo el siguiente mensaje de error: 2011.11.21 17:00:02 Ichimoku_1700Eastern EURJPYpro,H1: Ichimoku_Open EA for EURJPYpro: Error al abrir la orden de COMPRA : (133) la operación está desactivada /// para 103.7210

Además, cuando el EA #2 intenta colocar una operación, el registro de Expertos siempre muestra que el std.lib se carga inmediatamente antes de las operaciones que arrojan un error (esto no sucede en el EA #1):2011.11.21 17:00:02 stdlib EURJPYpro,H1: cargado con éxito

Aquí está la pieza final de este rompecabezas: EA # 2 se abrirá operaciones, pero no a las 17:00 del este. Todos los errores arrojados han ocurrido en operaciones que intentan abrirse a las 1700 Eastern (esto puede ser una coincidencia).

He desmontado el EA; he vuelto a escribir el código desde cero; he copiado el código del EA #1 en el EA #2 y nada parece solucionar el problema. Forex.com no quiere ayudar ya que consideran que esto es "soporte de EA" que no ofrecen. En lo que puedo encontrar en Internet sobre este error, significa que a) el corredor no permite el comercio de EA (que sé que no es cierto) o b) el comercio está enviando paradas y / o límites que no funciona con un corredor de ejecución instantánea (el comercio NO está enviando paradas o límites). Forex.com ha dicho que NO suspende las operaciones en ningún momento durante el día de negociación.

Mis preguntas para este grupo son las siguientes

1. ¿Alguien se ha encontrado con este problema?

2. Si es así, ¿qué hizo para resolverlo?

3. Si nunca has visto este problema, ¿qué crees que puede estar causándolo?

Estoy seguro de que es algo simple que no estoy viendo. Cualquier comentario, experiencia o idea desde la izquierda será muy apreciada.

Razón de la queja: