Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 149

 

Buenas tardes.

¿Pueden decirme cómo encontrar la barra correcta por fecha y hora sin tener que recorrer todas las barras una por una?

 
Sergey:

Buenas tardes.

¿Pueden decirme cómo encontrar la barra correcta por fecha y hora sin tener que recorrer todas las barras una por una?


Lea sobre iBarShift
 

int TotalPos=-1;

void start()

{
//el resto del código

//--
if(OrdersTotal()!=TotalPos) { // no torturar cada tick
for(int i=Total de Pedidos()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
Historia();


}
}}} TotalPos=TotalPedidos(); // recuerda la cantidad
//--
}



void Historia() {
string Ticket=(string)OrderTicket();
color col=Rojo;
if(OrderType()==0)col=Azul;
datetime a=OrderOpenTime();
double b=Precio de apertura del pedido();
datetime c=OrderCloseTime();
double d=Precio de cierre del pedido();
double prSep=OrderProfit()+OrderCommission()+OrderSwap();
doble prAll=0;
int cn=0;
cadena hTicket;
for(int i=Total de Pedidos()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
datetime ct=OrderCloseTime();
// 60 segundos de diferencia entre el cierre de la primera y la última orden de la parrilla
if(c<=ct+60 && c>=ct-60) {
prAll+=OrderProfit()+OrderCommission()+OrderSwap();
hTicket=(string)OrderTicket();
cn++;
}
}}}
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);

ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
ObjectSet(Ticket+"Line",OBJPROP_RAY,0);

ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);

Ticket=cn>1?hTicket:Ticket;
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
ObjectSet(Ticket+"Beneficio",OBJPROP_ANCHOR,0);
ObjectSetText(Ticket+"Beneficio",DoubleToString(prAll,2),10, "Arial",White);
ObjectSet(Ticket+"Beneficio",OBJPROP_PRICE1,d);
ObjectSet(Ticket+"Beneficio",OBJPROP_TIME1,c+Periodo()*60*2);
}

qué añadir al código de esta función para dibujar una línea de nivel en estos lugares de las operaciones

coordenada desde las operaciones hasta el borde del gráfico offset

 

Por favor, ayuda con la lectura de un archivo .crv

tiene la siguiente entrada :

2010.03.18 01:35:00;1.37409;1.37119

cómo escribir código para obtener cada valor por separado en una variable

 
missha32:

Por favor, ayuda con la lectura de un archivo .crv

tiene la siguiente entrada :

2010.03.18 01:35:00;1.37409;1.37119

cómo escribir código para obtener cada valor por separado en una variable

Lea/estudie aquí.
Основы программирования на MQL5: Файлы
Основы программирования на MQL5: Файлы
  • 2016.09.28
  • Dmitry Fedoseev
  • www.mql5.com
Статья-практикум по работе с файлами в MQL5. Читайте, выполняйте несложные задания, и к концу статьи вы обретете не только теоретические знания, но и практические навыки по работе с файлами в MQL5.
 
Alexander Antoshkin:

int TotalPos=-1;

void start()

{
//el resto del código

//--
if(OrdersTotal()!=TotalPos) { // no torturar cada tick
for(int i=Total de Pedidos()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
Historia();


}
}}} TotalPos=TotalPedidos(); // recuerda la cantidad
//--
}



void Historia() {
string Ticket=(string)OrderTicket();
color col=Rojo;
if(OrderType()==0)col=Azul;
datetime a=OrderOpenTime();
double b=Precio de apertura del pedido();
datetime c=OrderCloseTime();
double d=Precio de cierre del pedido();
double prSep=OrderProfit()+OrderCommission()+OrderSwap();
doble prAll=0;
int cn=0;
cadena hTicket;
for(int i=Total de Pedidos()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
datetime ct=OrderCloseTime();
// 60 segundos de diferencia entre el cierre de la primera y la última orden de la parrilla
if(c<=ct+60 && c>=ct-60) {
prAll+=OrderProfit()+OrderCommission()+OrderSwap();
hTicket=(string)OrderTicket();
cn++;
}
}}}
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);

ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
ObjectSet(Ticket+"Line",OBJPROP_RAY,0);

ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);

Ticket=cn>1?hTicket:Ticket;
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
ObjectSet(Ticket+"Beneficio",OBJPROP_ANCHOR,0);
ObjectSetText(Ticket+"Beneficio",DoubleToString(prAll,2),10, "Arial",White);
ObjectSet(Ticket+"Beneficio",OBJPROP_PRICE1,d);
ObjectSet(Ticket+"Beneficio",OBJPROP_TIME1,c+Periodo()*60*2);
}

qué añadir al código de esta función para dibujar una línea de nivel en estos lugares de las operaciones

coordenada desde las operaciones hasta el borde del gráfico offset

algo así:

string level="Level"+IntegerToString(iTime(_Symbol,iBarShift(OrderCloseTime())); // ид.уровня - по времени бара (!! не по тикету)

if (ObjectFind(level)‌==-1) {

  // гор.вектора нет - видимо первый ордер из закрытых на баре

  // сделать горизонтальную линию‌

  ObjectCreate(0,level,OBJ_TREND,0,OrderCloseTime(),OrderClosePrice(),OrderCloseTime()+PeriodSeconds(_Period)*3,OrderClosePrice);

 // указывающую только вправо‌

  ObjectSetInteger(level,‌OBJPROP_RAY,1);

  ObjectSetInteger(level,OBJPROP_RAYLEFT,0);

‌ // украсить её как-то :-)

 ObjectSetInteger(level,OBJPROP_‌COLOR,....)

 ....‌

} else {

  // гор.уровень есть - значит были ордера закрытые на этом баре

  // по фантазии - обновить метки/корректировать уровень/etc‌

}‌

 

¡Buenas tardes!

¿Qué razones hay para que el terminal no vea un robot? fue escrito por un programador local. Los otros robots son en parte visibles y en parte no.

 
Serg_72:

¡Buenas tardes!

¿Qué razones hay para que el terminal no vea un robot? fue escrito por un programador local. Los otros robots son en parte visibles y en parte no.

¿Y el "programador local" no puede decirte por qué no puedes hacer funcionar su robot?
 

¡Buenas noches!

Por favor, ayúdame a escribir este código, siento que no puedo hacerlo yo mismo:

Cuando ejecuto un EA en EURUSD debería colocar dos órdenes pendientes si no tengo ninguna orden abierta/pendiente en este par,

Si una de ellas se dispara, otra no se muestra, es decir, la suma total de todas las órdenes pendientes en el par no debe exceder de 2 y no debe tener en cuenta las órdenes pendientes/abiertas ya mostradas en otros pares.

Ya me he devanado los sesos, no coloca nada de nada, luego cada tic que coloca.

Estoy muy agradecido por ello.

Se lo agradeceré mucho.

 
Serg_72:

¡Buenas tardes!

¿Qué razones hay para que el terminal no vea un robot? fue escrito por un programador local. Los otros robots son en parte visibles y en parte no.

El robot debe estar ubicado en la carpeta "expertos" y tener el formato *.ex4 (*.ex5 para el 5).
En el terminal - menú "Archivo/Abrir carpeta de datos" y luego "MQL4/Experts".

Y el código fuente *.mq4 *.mq5 no se iniciará - necesita ser compilado.

Y mientras tanto, arráncale la cabeza al programador que no te dijo cómo usar su producto

Razón de la queja: