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

 

¿Es correcta la siguiente construcción abreviada en el código: a < b && ( c > d1 || c >d2 || c > d3) ?

Esto es para evitar escribir: (a < b && c > d1) || (a < b && c > d2) etc. muchas veces.

 
HeAic:

¿Es correcta la siguiente construcción abreviada en el código: a < b && ( c > d1 || c >d2 || c > d3) ?

Esto es para evitar escribir: (a < b && c > d1) || (a < b && c > d2) y así muchas veces.

Por supuesto que sí. Lo único que yo haría al escribir construcciones tan grandes es especificar explícitamente los paréntesis de prioridad:

(a < b)  && ( c > d1 || c >d2 || c > d3)

En el caso de los compiladores de MT4/5, podemos hacerlo sin los paréntesis especificados, ya que las prioridades existentes no nos permitirán calcular el resultado de la expresión de forma diferente. Pero estos paréntesis tienen dos ventajas:

  1. La expresión es más fácil de entender visualmente sin ninguna pregunta sobre las prioridades (no recuerde las prioridades de cada compilador).
  2. Si el código se traslada a otro compilador, que puede tener diferentes prioridades, el código funcionará igual que en el compilador actual.
 
Alexey Viktorov:

Gracias, si

S_sk= SymbolInfoInteger("EURUSD",SYMBOL_SELECT);

devuelve el falce, no hay ningún símbolo en Market Watch, ¿cómo lo añado allí?

 
lil_lil:

Gracias, si

devuelve el falce, no hay ningún símbolo en Market Watch, ¿cómo lo añado allí?

SymbolSelect()

Todo está en la ayuda. Cursor en el nombre de la función y F1

 
Artyom Trishkin:

SymbolSelect()

Todo está en la ayuda. Cursor sobre el nombre de la función y F1

Gracias.

 

¿Cuál es la razón de esto? Escribí un script que establece órdenes limitadas en MT5. Cuando lo envío al gráfico en el terminal las órdenes no se establecen, aunque el result.retcode devuelve 10009(orden ejecutada)

 
iv1986:

¿Cuál es la razón de esto? Escribí un script que establece órdenes limitadas en MT5. Cuando lo envío al gráfico en el terminal las órdenes no se establecen, aunque el result.retcode devuelve 10009 (orden ejecutada)

  1. Código.
  2. Registro.
  3. Declaraciones.
¿Dónde está todo?

 
Ihor Herasko:

  1. Código.
  2. Cuaderno de bitácora.
  3. Declaración.
¿Dónde está todo?

{MqlTradeRequest request={0};
MqlTradeResult result={0};
double Oferta=SymbolInfoDouble(Symbol(),SYMBOL_BID);
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double p=NormalizeDouble(ChartPriceOnDropped(),digits);
if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
{p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
}
int V=75;
si (p<Ask)
{
request.action =TRADE_ACTION_PENDING; // tipo de operación comercial
request.symbol =Symbol(); // símbolo
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
SymbolInfoDouble(_Símbolo,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Símbolo,SYMBOL_TRADE_TICK_VALUE));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
}
request.type =ORDER_TYPE_BUY_LIMIT; // tipo de pedido
request.price =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // precio de apertura
request.deviation=50; // desviación permitida del precio
request.sl =p; // Posición de Stop Loss
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits); // Posición Take Profit
request.type_filling=ORDER_FILLING_IOC;
request.type_time=ORDER_TIME_DAY;
request.stoplimit=Preguntar;
OrderSend(request,result);
}
si (p>Bid)
{
request.action =TRADE_ACTION_PENDING; // tipo de operación comercial
request.symbol =Symbol(); // símbolo
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
SymbolInfoDouble(_Símbolo,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Símbolo,SYMBOL_TRADE_TICK_VALUE));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
} // volumen
request.type =ORDER_TYPE_SELL_LIMIT; // tipo de pedido
request.price =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // precio de apertura
request.deviation=50; // desviación permitida del precio
request.sl =p; // Posición de Stop Loss
request.tp =NormalizeDouble(Bid-(p-Bid)*3,digits); // Posición de Take Profit
request.type_time=ORDER_TIME_DAY;
request.type_filling=ORDER_FILLING_IOC;
request.stoplimit=Bid;
OrderSend(request,result);

}

el registro dice: 2018.05.14 10:12:38.187 Trades '992940': sell limit 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution

 
iv1986:

El registro dice: 2018.05.14 10:12:38.187 Trades '992940': sell limit 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution

Esto está escrito en el registro general. ¿Y qué hay en el registro de "Expertos"? Y no sólo una línea, sino todo el registro. No hay mucho que ver a través del ojo de la cerradura.

Además, en el código citado no se comprueban los códigos de retorno. Así que no está claro en qué se basa la conclusión sobre el código de error.

Para aconsejar algo, hay que tener pasos claramente reproducibles (para ver lo que se ve), y aquí no los hay. Corta la parte problemática del código, ejecútalo tú mismo y luego muestra exactamente lo que está fallando.

P. S. Para insertar el código, utilice el icono "</>" o Alt+S.

 

Al final del código tambiénAlert(result.retcode);

en el registro general:

2018.05.14 12:08:16.984 Scripts script LIMIT (Si-6.18,M15) cargado con éxito

2018.05.14 12:08:17.187 Operaciones '992940': compra límite 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 Operaciones '992940': aceptado límite de compra 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 Operaciones '992940': límite de compra 3,00 Si-6,18 a 62091 (62092) sl: 61821 tp: 62905 colocado para su ejecución

2018.05.14 12:08:17.546 Operaciones '992940': orden #13235300 compra límite 3.00 / 3.00 Si-6.18 a 62091 realizada en 337.532 ms

2018.05.14 12:08:17.578 Scripts script LIMIT (Si-6.18,M15) eliminado


En la columna de expertos: 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) Alerta: 10009, nada más