Preguntas de un "tonto" - página 244

 
paladin800:
Estoy escribiendo un Asesor Experto multidivisa donde en los parámetros de entrada establezco el nombre del instrumento, como la cadena Symbol0="EURUSD". Si escribo el nombre equivocado, el comercio no va. Mi pregunta es: ¿Existe una función de este tipo, que compare los nombres de los instrumentos con los instrumentos ofrecidos por el corredor?
No. Debería comprobarlo usted mismo.
 
paladin800: Pregunta: ¿existe una función que compare el nombre del instrumento con los instrumentos proporcionados por el corredor?
La cuestión es qué quieres ver en la salida. Básicamente, cualquier función estándar que utilice un nombre simbólico de un instrumento como uno de sus parámetros, "compara" el nombre especificado por el usuario con los nombres de los instrumentos del corredor. E incluso existe un error ERR_MARKET_UNKNOWN_SYMBOL (4301) para dichas funciones.
 
Yedelkin:
La cuestión es qué quieres ver en la salida. Básicamente, cualquier función estándar que utilice un nombre simbólico de instrumento como uno de sus parámetros, "compara" el nombre especificado por el usuario con los nombres de instrumentos del corredor. E incluso existe un error ERR_MARKET_UNKNOWN_SYMBOL (4301) para dichas funciones.
Básicamente, sí, cuando se busca en el mango del indicador un símbolo que no existe, se genera el error. Generalmente, en este punto puedo emitir un mensaje de error en los parámetros de entrada de la alerta.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
paladin800 Básicamente sí, cuando se busca en el mango del indicador un símbolo que no existe, se genera un error. En general, en este punto puedo emitir un mensaje de error en los parámetros de entrada de la alerta.
Puede escribir su propia mini-función, que comprobará la corrección de los parámetros de la cadena. Utilice algo como SymbolSelect(...,true) o SymbolInfoString(...,SYMBOL_DESCRIPTION, ...) con comprobación de errores. Es decir, implantar un control "independiente", como dijo Carlson.
 
Buenas tardes a todos.

Estoy intentando hacer un indicador de recogida de ticks para su posterior procesamiento y visualización. MT5 AlpariUK Versión 5.0 Build 756
El indicador de prueba imprime los valores actuales BID, ASK, LAST, VOLUME, tick_volume al procesar onCalculate.

//+------------------------------------------------------------------+
//|                                                TickCollector.mq5 |
//|                                             Copyright 2013, MZen |
//|                                             http://www.almex.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MZen"
#property link      "http://www.almex.net"
#property version   "1.00"
#property indicator_chart_window


string   time_toprint, tick_bid, tick_ask, tick_last, tick_vol;
string   par1, par2, par3;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 &spread[])
  {
//---

            time_toprint = TimeToString(SymbolInfoInteger(_Symbol,SYMBOL_TIME),TIME_DATE|TIME_SECONDS);
            tick_bid = DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
            tick_ask = DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);            
            tick_last = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_LAST)); 
            tick_vol = IntegerToString(SymbolInfoInteger(_Symbol,SYMBOL_VOLUME));
            
            par1 = IntegerToString(tick_volume[(rates_total-1)]);
            
            Print("Server Time=",time_toprint,"   ","Bid=",tick_bid,"   ","Ask=",tick_ask,"   Price=",tick_last,"  Volume=",tick_vol,"  Tick volume=",par1);
           
//--- return value of prev_calculated for next call
   return(rates_total);
  }

//+------------------------------------------------------------------+

Resultado:

2013.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.680 Ask=93.689 Price=93.680000 Volume=1000000 Tick volume=5
2013.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Oferta=93,680 Demanda=93,689 Precio=93,680000 Volumen=1000000 Volumen de ticks=4
2013.03.03 03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.681 Ask=93.691 Price=93.68100000 Volume=3000000 Tick volume=4
2013.03.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.681 Ask=93.691 Price=93.68100000 Volume=3000000 Tick volume=4
2013.03.03 19:45:58 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:02 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=2000000 Tick volume=3
2013.03.03 19:45:58 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:02 Oferta=93,682 Demanda=93,691 Precio=93,68200000 Volumen=2000000 Volumen de ticks=3
201303.03.03 19:45:57 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:01 Bid=93.683 Ask=93.693 Price=93.68300000 Volume=1000000 Tick volume=2
2013.03.03 19:45:57 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:01 Oferta=93,683 Demanda=93,693 Precio=93,68300000 Volumen=1000000 Volumen de ticks=1
2013.03.03 03 19:45:56 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:00 Bid=93.689 Ask=93.696 Price=93.68900000 Volume=570000 Tick volume=1
2013.03.03.03 19:45:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:00 Bid=93.689 Ask=93.696 Price=93.68900000 Volume=570000 Tick volume=1
2013.03.03 19:45:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:59 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1800000 Tick volume=53
2013.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Oferta=93,685 Demanda=93,695 Precio=93,68500000 Volumen=1700000 Volumen de ticks=52
201303.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1500000 Tick volume=51
2013.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1500000 Tick volume=51
2013.03.03 19:45:53 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:57 Oferta=93,685 Pregunta=93,693 Precio=93,68500000 Volumen=500000 Volumen de ticks=50
201303.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=400000 Tick volume=49
2013.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=200000 Tick volume=48
2013.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Oferta=93,685 Pregunta=93,693 Precio=93,68500000 Volumen=200000 Volumen de ticks=48
201303.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=200000 Tick volume=47
2013.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=1000000 Tick volume=46
2013.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Oferta=93,685 Pregunta=93,691 Precio=93,68500000 Volumen=1000000 Volumen de ticks=46
201303.03.03 19:45:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:54 Bid=93.680 Ask=93.691 Price=93.68000000 Volume=1000000 Tick volume=45
2013.03.03 19:45:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:54 Oferta=93,680 Demanda=93,691 Precio=93,680000 Volumen=1000000 Volumen de ticks=45
2013.0303 19:45:48 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:52 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=1000000 Tick volume=44

Parece que onCalculate se activa dos veces por tic la mayor parte del tiempo, y tick_volume no tiene nada que ver con el volumen de tic. Se restablece a 1 cuando se cambia a un nuevo periodo. El mismo valor puede repetirse 1, 2, 3 veces.

Para comprobarlo, ejecute el EA que imprime ticks y su propio indicador al mismo tiempo.

Resultado:

2013.03.03 19:51:56 Ticks (USDJPY,M1) 2013.03.03 19:51:56 93.684 93.677
2013.03.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.677 Precio de compra=93,684 Precio=93,67700000 Volumen=1000000 Volumen de ticks=2
2013.0303 19:51:56 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.677 Ask=93.684 Precio=93,67700000 Volumen=1000000 Volumen de ticks=2
2013.03.03 19:51:56 Ticks (USDJPY,M1) 2013.03.03.03 19:51:56 93.683 93.674
2013.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=1
2013.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=201303.04 02:52:00 Oferta=93,674 Pregunta=93,683 Precio=93,67400000 Volumen=3000000 Volumen de ticks=1
201303.03.03 19:51:55 Ticks (USDJPY,M1) 2013.03.03 19:51:55 93. 682 93.674
2013.03.03 19:51:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:59 Oferta=93,674 Demanda=93,682 Precio=93,67400000 Volumen=3000000 Volumen de ticks=37
2013.03.03 19:51:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:59 Bid=93.674 Ask=93.682 Precio=93,67400000 Volumen=3000000 Volumen de ticks=37
2013.03.03 19:51:51:51 Ticks (USDJPY,M1) 2013.03.03.03 19:51:51 93.680 93.670
2013.03.03 19:51:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:55 Oferta=93,670 Pregunta=93,680 Precio=93.67000000 Volume=1000000 Tick volume=36
2013.03.03 19:51:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:55 Bid=93.670 Ask=93.680 Price=93.67000000 Volume=1000000 Tick volume=36
2013.03.03 19:51:50 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:50 93.678 93.669
2013.03.03 19:51:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:54 Oferta=93,669 Pregunta=93,678 Precio=93,66900000 Volumen=3500000 Volumen de ticks=35
201303.03.03 19:51:49 Ticks (USDJPY,M1) 2013.03.03 19:51:49 93. 678 93.669
2013.03.03 19:51:49 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:53 Bid=93,669 Ask=93,678 Price=93,66900000 Volume=3000000 Tick volume=34
2013.03.03 19:51:49 PM TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:53 Bid=93.669 Ask=93.678 Precio=93,66900000 Volumen=3000000 Volumen de ticks=34
2013.03.03 19:51:46 Ticks (USDJPY,M1) 2013.03.03.03 19:51:46 93.680 93.672
2013.03.03 19:51:46 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:50 Oferta=93,672 Demanda=93,680 Precio=93.67200000 Volume=1000000 Tick volume=33
2013.03.03 19:51:46 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:50 Oferta=93,672 Demanda=93,680 Precio=93,67200000 Volumen=1000000 Volumen de ticks=33
201303.03.03 19:51:44 Ticks (USDJPY,M1) 2013.03.03 19:51:44 93.681 93.672
2013.03.03 19:51:44 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.672 Ask=93.681 Precio=93.67200000 Volumen=1000000 Volumen de ticks=32
2013.03 03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.672 Ask=93.681 Price=93.67200000 Volume=1000000 Tick volume=32
2013.03.03 19:51:44 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:44 93.683 93.673
2013.03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.03.04 02:51:48 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=31
2013.03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Oferta=93,673 Demanda=93,683 Precio=93,67300000 Volumen=1000000 Volumen de ticks=30
2013.03.03.03 19:51:42 Ticks (USDJPY,M1) 2013.03.03 19:51:42 93.683 93.674
2013.03.0303 19:51:42 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:46 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=30
2013.03.03 19:51:42 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:46 Bid=93.674 Ask=93.683 Precio=93,67400000 Volumen=3000000 Volumen de ticks=30
2013.03.03 19:51:41 Ticks (USDJPY,M1) 2013.03.03.03 19:51:41 93.683 93.673
2013.03.03 19:51:41 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:45 Oferta=93,673 Demanda=93,683 Precio=93,67300000 Volumen=1000000 Volumen de ticks=29
201303.03.03 19:51:41 GMT TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:45 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=29
2013.03.0303 03 19:51:40 Ticks (USDJPY,M1) 2013.03.03 19:51:40 93.682 93.673
2013.03.03 19:51:40 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:44 Bid=93.673 Ask=93.682 Price=93.67300000 Volume=1000000 Tick volume=28
2013.03.03 19:51:40 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:44 Bid=93.673 Ask=93.682 Price=93.67300000 Volume=1000000 Tick volume=28
2013.03.03 19:51:39 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:39 93.681 93.671
2013.03.03 19:51:39 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:43 Oferta=93,671 Demanda=93,681 Precio=93,67100000 Volumen=40000 Volumen de ticks=27
201303.03.03 19:51:38 Ticks (USDJPY,M1) 2013.03.03 19:51:38 93. 681 93.671
2013.03.03 19:51:38 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:42 Oferta=93,671 Demanda=93,681 Precio=93,67100000 Volumen=6000000 Volumen de ticks=26
2013.03.03 19:51:38 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:42 Bid=93.671 Ask=93.681 Precio=93,67100000 Volumen=60000 Volumen de ticks=26
2013.03.03 19:51:37 Ticks (USDJPY,M1) 2013.03.03.03 19:51:37 93.682 93.674
2013.03.03 19:51:37 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:41 Oferta=93,674 Demanda=93,682 Precio=93.67400000 Volume=1000000 Tick volume=25
2013.03.03 19:51:37 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:41 Oferta=93,674 Demanda=93,682 Precio=93,67400000 Volumen=1000000 Volumen de ticks=24

Pregunta: ¿por qué se duplica la garrapata y cómo puedo deshacerme de ella?

Si onCalculate se activa no sólo por un cambio de precio, sino también por otras razones, ¿cómo podemos determinar la razón del cambio a opCalculate? ¿Y dónde están todos los motivos de activación de onCalculate?

¿Qué estoy haciendo mal con el volumen del Tick?

¿Me estoy perdiendo algo?

Una pregunta más: la hora de mi ordenador se retrasa bastante. La diferencia en dos días fue de 4 segundos. ¿En qué dirección buscar una solución?

Gracias a todos.

 

Otra pregunta para el estimado público:


En la documentación de https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

estados:

SYMBOL_BID Oferta - mejor oferta de venta

SYMBOL_ASK Preguntar - mejor oferta de compra


A mi modo de ver, Bid es la mejor oferta decompra y Ask es la mejor oferta de venta.

Esto es lo que respondió ServiceDesk
Equipo de apoyo 2013.03.04 07:39


Esto significa que


SYMBOL_BID Oferta - la mejor oferta para vender (el mejor precio al que se puede vender)

SYMBOL_ASK Ask - best buy offer (el mejor precio que se puede conseguir en este momento)




Aquí hay una discusión: ¿quién tiene razón?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
MZen:

Otra pregunta para el estimado público:


En la documentación de https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

estados:

SYMBOL_BID Oferta - mejor oferta de venta

SYMBOL_ASK Preguntar - mejor oferta de compra


A mi modo de ver, Bid es la mejor oferta decompra y Ask es la mejor oferta de venta.

Esto es lo que ha respondido el ServiceDesk
Equipo de apoyo 2013.03.04 07:39
Significa

MZen

SYMBOL_BID Oferta - la mejor oferta para vender (el mejor precio al que se puede vender)

SYMBOL_ASK Ask - la mejor oferta de compra (el mejor precio que se puede conseguir en este momento)




Estoy debatiendo: ¿quién tiene razón?

Juego de palabras: en ambas situaciones hay un comprador, en ambas situaciones hay un vendedor, según la posición que se mire
 
lazarev-d-m:
Juego de palabras - ambas situaciones tienen un comprador, ambas situaciones tienen un vendedor, dependiendo de la posición que se mire

Ahhhh, ¡lo tengo!

Cuando pido "Cómprame" es una oferta de compra.

Y cuando digo "véndeme", es una oferta de venta.

¡LOL!

 

Estoy empezando a aprender OOP. Pregunta para los expertos - es posible poner la clase al final del código del Asesor Experto (así como las funciones),

int OnInit()
  {
   return(0);
  }
//---
void OnTick()
  {
   ...
  }
//---
void OnDeinit(const int reason)
  {
   ...
  }
//---
   class CName 
     {
      ...
     };

y no conectar la clase con el código como:

#include <Trade\Trade.mqh>
 
paladin800:

Estoy empezando a aprender OOP. Pregunta para los expertos - es posible poner la clase al final del código del Asesor Experto (así como las funciones),

y no conectar la clase con el código como:

No será una clase sino sólo una función, movida fuera del código del programa (por cierto, lo uso en lugar de OOP, lo encuentro más conveniente).
Razón de la queja: