Preguntas de un "tonto" - página 6

 
pusheax:

Algunos CC en cuentas reales asignan todo tipo de prefijos como "." o "FXF" a los nombres de los símbolos.

¿Cómo puedo utilizar estos prefijos?

Lo hice:

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -no funciona

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -tampoco funciona así

todo lo que obtengo es FXF en lugar del requerido AUDCADFXF.

¿Podría decirme cómo implementar esto?


En primer lugar, el llenado de un array con enumeración sólo es posible en el ámbito global, por lo que no funcionará ningún + allí, sólo las constantes de cadena.

En segundo lugar, tienes un array estático que no está distribuido, mientras que un array dinámico no se puede llenar con un enum.

La forma más fácil es escribir una función que distribuya y llene un array dinámico, puede hacer de todo, añadir definiciones a las constantes, etc.

 
Urain:

En primer lugar, rellenar un array con una enumeración sólo es posible en el ámbito global, por lo que allí no funcionará ningún +, sólo las constantes de cadena.

En segundo lugar, no ha distribuido el array estático, y el array dinámico no puede ser llenado por la enumeración.

Lo más fácil es escribir una función que distribuya y llene el array dinámico, puede hacer de todo, añadir definiciones con constantes, etc.

También puede intentar buscar todos los pares de divisas existentes en BC/BROKER y analizar las divisas compuestas en ellos.

A continuación, puede crear una matriz dinámica de pares de divisas teniendo en cuenta la adición de cualquier prefijo.

Que yo recuerde es una de las opciones universales para MT5.

 
Urain:

En primer lugar, rellenar un array con una enumeración sólo es posible en el ámbito global, por lo que allí no funcionará ningún +, sólo las constantes de cadena.

En segundo lugar, no ha distribuido el array estático, y el array dinámico no puede ser llenado por la enumeración.

La forma más sencilla es escribir una función que distribuya y llene el array dinámico, puede hacer de todo, añadir definiciones a las constantes, etc.

En resumen, si te he entendido bien, no puedes crear un array estático de constantes compuestas en el ámbito global, ¿verdad?

 
uncleVic:

Puedes ver el código en el código fuente. Se utilizan dos métodos para encontrar la divergencia:

1. El método bool CSignalMACD::ExtState(int ind) prepara los datos para la búsqueda;

2. El método bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) busca un modelo de mercado con los parámetros especificados.

Si te sirve de ayuda, aquí tienes los comentarios a los métodos en ruso:

Para el método bool CSignalMACD::ExtState(int ind)

Para el método bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)

También tengo una pregunta: ¿cómo especificar la variante de divergencia cuando se crea un Asesor Experto utilizando la señal MACD? Hay varias variantes de la señal en el libro de referencia.
 
strelec:
También tengo una pregunta, ¿cómo especificar la variante de divergencia al crear un Asesor Experto utilizando la señal MACD? Hay varias variantes de señales en el manual.

Como todo el mundo ha notado ya, cualquier señal puede detectar múltiples patrones de mercado. Para controlar el uso de los patrones , llame al método PatternsUsage(int value), donde value es el mapa de bits del uso del patrón (el número de bits y el número del patrón son iguales). El bit es 1 - se utiliza el modelo, el bit es 0 - no se utiliza el modelo (por defecto todos los bits son 1). La numeración de los modelos, así como de los bits, comienza en 0.

Por lo tanto, si desea utilizar sólo la divergencia, debe utilizar PatternsUsage(16);. ¿Por qué 16? 16 es binario 10000b (es decir, el bit 4 es 1, todos los demás bits son 0). Y sólo el modelo 4 "divergencia del oscilador y el precio".

El único "pero", es que tendrás que hacerlo "manualmente".

Una vez completado el asistente, el código fuente se abrirá en el editor. Encuentra un lugar como este en el editor:

//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);

y añadir una línea

filter0.PatternsUsage(16);

lo conseguirás:

//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PatternsUsage(16);
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);

Eso es todo por ahora. Si tiene alguna pregunta, no dude en ponerse en contacto conmigo.

 
uncleVic:

Como todo el mundo ha notado ya, cualquier señal puede detectar múltiples patrones de mercado. Para controlar el uso de los patrones , llame al método PatternsUsage(int value), donde value es el mapa de bits del uso del patrón (el número de bits y el número del patrón son iguales). El bit es 1 - se utiliza el modelo, el bit es 0 - no se utiliza el modelo (por defecto todos los bits son 1). La numeración del modelo, así como los bits, empiezan por 0.

Por lo tanto, si sólo desea utilizar la divergencia, debe utilizar PatternsUsage(16);. ¿Por qué 16? 16 es 10000b en binario (es decir, el bit 4 es 1, los demás bits son 0). Y sólo el modelo 4 "divergencia del oscilador y el precio".

El único "pero", es que tendrás que hacerlo "manualmente".

Una vez completado el asistente, el código fuente se abrirá en el editor. Encuentra un lugar como este en el editor:

y añadir una línea

filter0.PatternsUsage(16);

...lo consigues:

Eso es todo por ahora. Si tiene alguna pregunta, no dude en ponerse en contacto conmigo.

Gracias. Lo tengo. Y hay más preguntas de inmediato. En esta variante de la divergencia, ¿qué intervalo de tiempo entre picos vecinos (valles) se tiene en cuenta?
 
strelec:
Gracias. Ha funcionado. Y hay más preguntas de inmediato. En esta variante de la divergencia, ¿qué intervalo de tiempo entre los máximos (mínimos) vecinos se tiene en cuenta?
El intervalo no se analiza.
 

Tengo un experto con el que intento afrontar los acontecimientos.

string event[10]=
{
"CHARTEVENT_KEYDOWN - событие нажатия клавиатуры, когда окно графика находится в фокусе",
"CHARTEVENT_OBJECT_CREATE — событие создания графического объекта",
"CHARTEVENT_OBJECT_CHANGE — событие изменения свойств объекта через диалог свойств",
"CHARTEVENT_OBJECT_DELETE — событие удаления графического объекта",
"CHARTEVENT_CLICK — cобытие щелчка мыши графике",
"CHARTEVENT_OBJECT_CLICK — событие щелчка мыши на графическом объекте, принадлежащего графику",
"CHARTEVENT_OBJECT_DRAG — событие перемещения графического объекта при помощи мыши",
"CHARTEVENT_OBJECT_ENDEDIT — событие окончания редактирования текста в поле ввода графического объекта LabelEdit",
"CHARTEVENT_CHART_CHANGE  — событие изменения графика",
"CHARTEVENT_CUSTOM+n — идентификатор пользовательского события, где n находится в диапазоне от 0 до 65535"
};
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   Print("id=(",id,") -- ",event[id],"  lparam=",lparam,"   dparam=",dparam,"   sparam=", sparam);
  }
//+------------------------------------------------------------------+

Recibo eventos que no se corresponden con las acciones.

Corresponde exactamente a un clic en el gráfico y a un clic en un botón

Un evento controvertido id=9(CHARTEVENT_CUSTOM), que se genera cuando, por ejemplo, el gráfico se desplaza y hay unos 10 eventos similares.

No se ha comprobado el eventoCHARTEVENT_OBJECT_ENDEDIT.

El resto no está claro. O bien la descripción no coincide con el número de evento, o bien el evento de creación de un objeto se genera incorrectamente al crear un objeto manualmente.

En general, por favor, ayuda.

 
kPVT:

Tengo un experto con el que intento afrontar los acontecimientos.

Recibo eventos que no se corresponden con las acciones.

Coincide exactamente con un clic en el gráfico y un clic en un botón

Un evento controvertido id=9(CHARTEVENT_CUSTOM), que se genera cuando, por ejemplo, el gráfico se desplaza y hay unos 10 eventos similares.

No se ha comprobado el eventoCHARTEVENT_OBJECT_ENDEDIT.

El resto no está claro. O bien la descripción no coincide con el número de evento o bien el evento de creación de un objeto se genera incorrectamente al crear el objeto manualmente.

En definitiva, por favor, ayuda.

Inicialmente se asignan correspondencias numéricas a las constantes numéricas ya asignadas CHARTEVENT_XXXXXX...

el problema es este:

event[id]

que necesitas:

//--- нажатие мышкой на графическом объекте
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
     }
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
 
kPVT:

Los demás no están claros. O bien la descripción no coincide con el número de evento, o bien el evento de, por ejemplo, la creación de un objeto no se genera correctamente cuando el objeto se crea manualmente.

Lamentablemente, su pregunta no es clara. ¿Qué está fallando exactamente?