[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 292

 

Hola.

Por favor, ayúdenme a saber qué estoy haciendo mal.

Condicionalmente: Ask = 1.3000

PriceAsk = 1,3055 (incl. cuando Step=50 y Srpead=3)

bool BuyOrder=1 ,

if (Ask-PriceAsk+Step-Spread<=0 && BuyOrder==0) ¿por qué es verdadera esta condición?
 
ed3sss:

Inmediatamente antes de la sentencia if, imprime los valores de todas las variables de la condición

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Es probable que algunos valores de las variables sean diferentes de los que imaginó.
 
Hola, en mi terminal mt4, cuando hago clic en uno de los pares de divisas que están directamente bajo el terminal, por ejemplo (eurusd) para abrir una ventana de terminal con sólo este parNecesito abrir una ventana pequeña y luego expandirla a la esquina superior derecha, esto nunca había sucedido antes, por favor dígame por qué sucede esto y cómo solucionarlo?
 
GaryKa:

Inmediatamente antes de la sentencia if, registre los valores de todas las variables de la condición

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Es probable que algunos valores de las variables sean diferentes de los que imaginó.

Compruébelo, gracias)
 
a hoz : Primero, un poco de teoría.


Y ahora la conclusión

hoz:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Quiero entender cómo funciona. Por eso he preguntado.
La expresiónsubrayada devuelve el logaritmo decimal (logaritmo en base 10) de bd_LOTSTEP, que es la potencia de 10 para obtener bd_LOTSTEP.
 

GaryKa:

Inmediatamente antes de la sentencia if, registre los valores de todas las variables de la condición

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Seguramente algunos de los valores de las variables no serán los que usted imaginaba.


ed3sss:


Compruébelo, gracias)

Gracias, encontré un error lógico en el programa, ahora todo funciona.
 

Hola.

Cómo puedo mostrar en el gráfico la inscripción en el instrumento actual Ganancias/pérdidas de las órdenes abiertas.

Es difícil comprobar en el Asesor Experto si ha abierto posiciones o no (terminal on/off) y recoger el volumen del último lote antes de cerrar el terminal.

Gracias.

 
hoz:

Acabo de encontrar una función aquí:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Quiero entender cómo funciona. Por eso he preguntado.

Si me equivoco, pido disculpas. MathLog(x) es ln(x) (logaritmo natural). La fórmula de conversión es log_a(b)=ln(b)/ln(a), en este caso obtenemos ln(x)/ln(10)=lg(x)(logaritmo decimal). La parte entera del logaritmo decimal lg(1...9) es 0, lg(10...99) es 1, lg(100...999) es 2, lg(1000...9999) es 3 y así sucesivamente, es decir, el logaritmo de un número mayor que uno es igual al número de dígitos de ese número(antes del punto decimal, no se cuenta después) menos uno. Si x es de 0 a uno, entonces la parte entera de lg(0,1...0,9) es igual a -1, lg(0,01...0,09) es igual a -2, lg(0,001...0,009) es igual a -3 y así sucesivamente, es decir, si no se mira el menos, el logaritmo decimal del número de 0 a uno es igual al número total de ceros antes del primer dígito significativo. No sé cómo funciona MathCeil, pero si devuelve la parte entera de un número, se supone que esta función devuelve el número de dígitos del número antes del punto decimal menos uno si el número es mayor que 1, y el número de ceros del número antes del primer dígito significativo si el número es de 0 a uno. El mínimo de esta función está en el rango x igual a 1...9. A partir de aquí, para 10...99 y 0,1...0,9 la función es igual a 1, para 100...999 y 0,01...0,09 es igual a 2, y así sucesivamente. La idea es...
 

Buenas tardes, hay un error en el programa, ya me he devanado los sesos, por favor, señalen qué es lo que falla. Sólo quiero saber por qué la condición de modifi no funciona. Aunque la condición no sea verdadera, se satisface y, por lo tanto, al modificar los errores o 1, o 130. Gracias a todos.

//--------------- modificar las órdenes en TP-------------------
for (i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
if (OrderType() = OP_BUY) {
if (OrderTakeProfit() == 0 || OrderTakeProfit() > OprTPB(TP)){
RefreshRates();
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPB(TP),0,CLR_NONE);
}
}
if ((OrderType() = OP_SELL)) {
if(OrderTakeProfit() == 0 || OrderTakeProfit() < OprTPS(TP)){
RefreshRates();
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPS(TP),0,CLR_NONE);
}
}
}
}
return(0);
}

double LastOpPrBuy(double va=0)
{
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (va == 0) va = OrderOpenPrice();
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() == OP_BUY && OrderOpenPrice()<va) va = OrderOpenPrice()
}
volver (va);
}
//----------------------------------------------------------------------------------
double LastOpPrSell(double va=0)
{
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (va == 0) va = OrderOpenPrice();
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() == OP_SELL && OrderOpenPrice()>va) va = OrderOpenPrice()
}
volver (va);
}
//----------------------------------------------------------------------------------
double OprTPB(int TP)
{
int j=0;
doble TPB=0;
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() = OP_BUY)
{
TPB+=Precio de apertura del pedido();
j++;
}
}
si (j==0) {
j++;
TPB = Preguntar;
}
TPB=(TPB/j)+TP*Punto;
retorno (TPB);
}
//----------------------------------------------------------------------------------
double OprTPS(int TP)
{
int j=0;
doble TPS=0;
for (i = OrdersTotal() - 1; i>= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
if (OrderType() = OP_SELL)
{
TPS+=Precio de apertura del pedido();
j++;
}
}
si (j==0) {
j++;
TPS = Oferta;
}
TPS=(TPS/j)-TP*Punto;
retorno (TPS);
}
//----------------------------

 
borilunad:
Aquí todos somos novatos. ¡No veas que no sabemos cosas sencillas! ¡Dónde si no vamos a enterarnos! ¡Por lo menos queremos saber, no como piensan algunos que sólo piden poner el código e inmediatamente bombean el dinero!


))) Desde el humor de un comerciante:

- ¿Dónde puedo conseguir un Asesor Experto rentable?

- Mira en algún lugar más arriba en el hilo, publicaron un robot llamado @MOZG@v4.12.

Razón de la queja: