[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 477

 

demlin:
Еще вопрос: какой функцией можно вытащить стоимость одного пункта инструмента?

https://docs.mql4.com/ru/constants/marketinfo

MarketInfo(Symbol(), MODE_TICKVALUE);
 
LazarevDenis:

Por favor, dígame qué código debe ser escrito en el EA para hacer el comercio EA sólo una vez por hora

Por ejemplo, el EA se ha disparado, se ha abierto una orden (no me interesa más), me gustaría que la orden no se abriera en la barra actual en un marco temporal de una hora

todo se parece:

int hh;
int Hora actual;
HoraActual=HoraTemporal(HoraActual());
si (¡Hora actual!=hh)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=Hora(TimeCurrent());
}

pero tengo innumerables pedidos abiertos

int hh = 0;
debe establecerse antes de start() e init()
 
Chicos, ayúdenme a encontrar un EA para el comercio manual en el probador en la historia. Hay varios en el código base, necesito uno que se controle arrastrando la leyenda en la esquina inferior izquierda del nrafik. Muy simple, no se puede encontrar uno. Pruebas de HistTraining y Visualización. El comercio manual no lo es. Asesor muy fácil, también podría establecer los niveles en los que se detuvo la prueba.
 
demlin:

Hola a todos.

Por favor, dígame qué significa esto:

Orden de compra ...... fallida [Tiempo de espera de la operación]

Me interesa específicamente qué tipo de tiempo de espera es.

https://www.mql5.com/ru/forum/112612
Se trata de una respuesta del servidor que ha expirado, tanto si la operación se ha abierto como si no. Y no hay garantía de que el comercio no se haya abierto.

Por lo tanto, tengo que comprobar si la orden se abre en un minuto y luego continuar el comercio.

 

rlx:


debe establecerse antes de start() e init()


int hh = 0;
int init()
{
return(0);
}
int start()
{
//-------------------------------------------------
int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("no open orders");
}else
{
Alert ("have open orders");
}
int hh;
int CurrentHour;
CurrentHour=TimeHour(TimeCurrent());
if ((CurrentHour!=h)&&(countorder==0))
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}
//-------------------------------------------------
return(0);
}

int deinit()
{
return(0);
}

Hice lo que dijiste, sin efecto, añadí el recuento de órdenes abiertas, ahora abre las órdenes justo después del cierre

Lo he solucionado con OrderCloseTime() - parece que ahora funciona

int countorder;
countorder=OrdersTotal();
if (countorder==0)
{
Alert ("no open orders");
}else
{
Alert ("have open orders");
}
int hh;
int CurrentHour;
int LastOrderCloseTime;
CurrentHour=TimeHour(TimeCurrent());


OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
hh=TimeHour(OrderCloseTime());


if ((¡Hora actual!=hh)&&(countorder==0))
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
}

 
rlx:

https://www.mql5.com/ru/forum/112612
Este es el período de espera para que el servidor responda --- si una operación se ha abierto o no. Y no hay garantía de que el acuerdo no se haya abierto.

Por lo tanto, tal y como recomiendan los desarrolladores, compruebe después de un minuto si se ha abierto una orden y sólo entonces proceda.

Gracias por las respuestas
 
Roger:

Sin embargo, no quiero ser una molestia.

Explíqueme cómo se abrirá una orden si OrderTotal() es cero.

Gracias.


A continuación se muestra la figura con paréntesis que limitan el bloque de código que se ejecuta bajo la condición

if(OrdersTotal()>0&&tral>0&&OrderMagicNumber()==MAGIC&&(OrderType()==OP_SELL||OrderType()==OP_BUY))

Las operaciones de OrderSend() no se ven afectadas por esta condición.

 

cómo conseguir un número de bar, en el "futuro" :)

iBarShift() funciona bien para obtener el número de barra del historial, pero ¿cómo obtendría el número de barra para este código si mueve la línea hacia la derecha - más allá de la barra cero?

static string name_vline = "linescr";
//________________________________________________
int init(){
   DrawLine(name_vline,Time[5],Red);
return(0);
}
//________________________________________________
int deinit() {
return(0);
}
//________________________________________________
int start(){
   datetime X;
   X = ObjectGet(name_vline,OBJPROP_TIME1);
   Comment("Координата X = ",iBarShift(NULL,0,X),"\n",
           "Время = ",TimeToStr(X));
return(0);
}
//________________________________________________
void DrawLine(string name, datetime tim, color cl){
   ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
}
 
IgorM:

cómo conseguir un número de bar, en el "futuro" :)

iBarShift() funciona bien para obtener el número de barra del historial, pero ¿cómo puedo obtener el número de barra para este código si desplazo la línea hacia la derecha, más allá de la barra cero?

Puede obtener un desplazamiento relativo a la hora[0]

shift = MathRound((Time[0] - X) / (Period()*60));
 
rlx:

Puede obtener un desplazamiento relativo a la hora[0]

Gracias. Ahora todo está bien.

static string name_vline = "linescr";
//________________________________________________
int init(){
   DrawLine(name_vline,Time[5],Red);
return(0);
}
//________________________________________________
int deinit() {
return(0);
}
//________________________________________________
int start(){
   datetime X;
   X = ObjectGet(name_vline,OBJPROP_TIME1);
   if(X<=Time[0])
         Comment("Координата X = ",iBarShift(NULL,0,X),"\n",  "Время = ",TimeToStr(X));
   else
         Comment("Координата X = ",MathRound((Time[0] - X) / (Period()*60)),"\n","Время = ",TimeToStr(X));
return(0);
}
//________________________________________________
void DrawLine(string name, datetime tim, color cl){
   ObjectCreate(name, OBJ_VLINE, 0, tim, Close[0], tim, Close[0]);
   ObjectSet(name, OBJPROP_BACK  , false);
   ObjectSet(name, OBJPROP_COLOR, cl);
   ObjectSet(name, OBJPROP_STYLE, STYLE_SOLID);      
   ObjectSet(name, OBJPROP_WIDTH, 0);
} 
Razón de la queja: