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

 
Alexey Viktorov:
Lo reconozco. Pero cuesta mucho esfuerzo darse cuenta de que se trata de la ventana "Trading" y no de la ventana "Account History". La falta de atención y la pereza, sin forzar los músculos de la cabeza, me llevaron a creer que era la ventana del Historial de Cuentas.

Eso sucede. Perdonable.

 

Desactivado la línea de oferta estándar en el gráfico debido a la inconveniencia de la lectura de cinco dígitos, hizo que la salida de 4 dígitos en la esquina superior, pero a veces el precio baja, que de nuevo causa molestias :-)

Quiero hacer que el objeto Label se mueva con el precio, la etiqueta de precio derechoOBJ_ARROW_RIGHT_PRICE no me gusta por el marco.

Pero por alguna razón el posicionamiento por precio de oferta no funciona, la etiqueta se muestra en la esquina superior izquierda


//+------------------------------------------------------------------+
//|                                              CandleTimeStationary|
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property strict

//---- input parameters
input color Clock_Color = clrCrimson;

string objname="Bid";


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
        ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
        
    

        return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) { ObjectDelete(0, objname); } 

//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spreads[])
{

        ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));     
        ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits-1));
        ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, objname, OBJPROP_COLOR, Clock_Color);
        ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");
        
        return(rates_total);
}
 
psyman:

Desactivado la línea de oferta estándar en el gráfico debido a la inconveniencia de la lectura de cinco dígitos, hizo que la salida de 4 dígitos en la esquina superior, pero a veces el precio baja, que de nuevo causa molestias :-)

Quiero hacer que el objeto Label se mueva con el precio, la etiqueta de precio derechoOBJ_ARROW_RIGHT_PRICE no me gusta por el marco.

Pero por alguna razón el posicionamiento por precio de oferta no funciona, la etiqueta se muestra en la esquina superior izquierda


ParaOBJ_LABEL el informe de posición se especifica en píxeles.

ChartTimePriceToXY(0, 0, TimeCurrent(), Bid, x, y); // x, y добавьте в переменные, тип int
ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, ulong(y)); //если на эту строчку будет предупреждение в компиляторе то, значит ulong ненужен
//ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));
ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid, _Digits-1));
 
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

double Znomer()
{
zn=0; // z-число
psd=0; // кол. положительных сделок
usd=0; // количество отрицательных сделок 
ww=0; // боол переменная 
nn=0; // боол переменная
C=0; // C = количество чередований между отрицательными и положительными сделками
index=OrdersHistoryTotal(); 
if(OrdersHistoryTotal()>302) index=301; // берём не более 301 сделки
if(index<30) return(1); // берём не менее 30
count=OrdersHistoryTotal(); // считаем от скольки 
prom=count-index; // выделяем только последние сделки
if (prom<0) prom=0; // исключаем ошибки

for( i=count;i>prom;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)== true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{// далее магия
pribul=OrderProfit(); 
if (ww==0&&pribul>1){C++;ww=1;nn=0;}// подсчитываем смену тенденции
if (nn==0&&pribul<1){C++;ww=0;nn=1;}// подсчитываем смену тенденции 
if (pribul>1){psd++;}//прибыльные сделки
if (pribul<1){usd++;}// убыточные сделки

}
}
}
/*/*
Величина Z = (A * (C — 0.5) — B)/ ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
*/
zn = (index*(C-0.5)-(2*psd*usd))/
((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*0.5));



return(zn);
}

He decidido escribir un código sencillo para calcular la tendencia a perder una cuenta. Para ello tomé una simple fórmula de la cuenta Z y traté de transferirla al código mq4.
Todo parece estar correcto, pero cuando ejecuto la salida simple usando Print el EA no funciona de inmediato. No obtengo ningún error al compilar.
Ya me he devanado los sesos con un código sencillo.

¡Gracias si puede ayudar!

 
Aliaksei Karalkou:

He decidido escribir un código sencillo para calcular la tendencia a perder una cuenta. Para ello tomé una fórmula simple de la cuenta Z y traté de usarla en el código mq4.
Todo parece estar correcto, pero cuando ejecuto la salida simple usando Print el EA no funciona de inmediato. No obtengo ningún error al compilar.
Ya me he devanado los sesos con un código sencillo.

¡Gracias si puede ayudar!

Comprueba el permiso de trabajo de la EA. ¿Y en qué parte de la impresión? Esta pieza de código debe devolver algo, si no hay errores, entonces el problema está fuera de esta pieza de código. Excepto que la división por 0 puede ocurrir en este bloque.

 
Ilya Prozumentov:

ParaOBJ_LABEL el informe de posición se especifica en píxeles.

Ilya, gracias, ha funcionado.

Sólo cuando se pasa a la siguiente etapa - que tiene en cuenta el cambio de tamaño de la ventana - el compilador da una advertencia sobre la conversión del tipo de datos:

int width = ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);

posible pérdida de datos debido a la conversión del tipo 4digit+.mq5 36 14


Aunque la función devuelve el tipo int.


 
psyman:

Ilya, gracias, ha funcionado.

Sólo cuando se pasa a la siguiente etapa - que tiene en cuenta el cambio de tamaño de la ventana - el compilador da una advertencia sobre la conversión del tipo de datos:

posible pérdida de datos debido a la conversión del tipo 4digit+.mq5 36 14


Aunque la función devuelve el tipo int.


La función devuelve el tipo long
 
novichok2018:

¿De verdad? ¿Y dónde aparece que el pedido se ha cerrado?

Un TP verde en la ventana "trade" significa que el precio actual está dentro de -100 pips del TP, o, para ser más correctos, dentro de 100 pips del TP.

Gracias.
 
Artyom Trishkin:
La función devuelve el tipo largo

¿Qué debo hacer en estos casos, cambiar el tipo de la variable o dejarla como está?

 
psyman:

¿Qué se recomienda hacer en estos casos, cambiar el tipo de variable o dejarla como está?

int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);