[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 651

 
xtonic:

Adivinanzas nocturnas de Metha:

He importado cotizaciones del archivo de cotizaciones, dice en 1 minuto: Base de datos: 0 / 3665972, la ventana está vacía - ¿qué puede significar?

Cuando abro el gráfico EURUSD,M1 independiente - muestra letras grandes: "Actualización pendiente": ¿qué puede significar?

Estoy ejecutando una prueba - TestGenerator: no hay datos históricos 'EURUSD1'.

Recarga el terminal. Si todo se ha hecho correctamente, debería aparecer.

 

donde se puede leer cómo se dibuja un indicador con los siguientes parámetros

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2)

No entiendo por qué unas veces dibuja y otras no - entiendo que si dibujas una línea normal DRAW_LINE - el valor del buffer del indicador fijará el eje y, pero el número del elemento corresponde al número de barras del gráfico

por qué el segmento horizontal en la barra aparece cuando dos búferes de indicadores están en la misma barra, pero cuando uno de los búferes de indicadores es EMPTY_VALUE - nada, y no entiendo la lógica de la coloración

 
ToLik_SRGV:

Recarga el terminal. Si todo se ha hecho correctamente, debería aparecer.


Ya he hecho todo esto, incluso he reiniciado el sistema, esa es la cuestión.

 
xtonic:


Ya he hecho todo eso, incluso he reiniciado el sistema, esa es la cuestión.


¿Ha importado las cotizaciones de dónde?

Si pudieras explicar exactamente lo que estás haciendo, paso a paso, entonces tendrías más posibilidades de recibir ayuda aquí.

 

Buena gente, tened piedad - no consigo: comprar/vender después de otro pico de CCI suavizado.

Intenté declarar el segundo buffer (tiene más sentido para mí), no hay errores, registro - silencioso, impresión, probablemente como una cabra - no entiendo nada.

 // Торговые критерии
   double c1b[];
   ArrayResize(c1b,PeriodB);
   double c1b_1[];
   ArrayResize(c1b_1,AvgB);
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   {
   c1b_1[i]=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   }
   }
   
   double c1s[];
   ArrayResize(c1s,PeriodS);
   double c1s_1[];
   ArrayResize(c1s_1,AvgS);
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   {
   c1s_1[i]=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   }
   }

if (NormalizeDouble(c1b_1[i],4)<NormalizeDouble(c1b_1[i+2],4)&&NormalizeDouble(c1b_1[i+2],4)>NormalizeDouble(c1b_1[i+3],4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1[i],4)>NormalizeDouble(c1s_1[i+2],4)&&NormalizeDouble(c1s_1[i+2],4)<NormalizeDouble(c1s_1[i+3],4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

El anexo contiene el Asesor Experto completo. Después de probar en la visualización, el CCI se dibuja tanto en esta versión como en la antigua (el archivo adjunto está trazado), pero el suavizado no y por lo tanto las operaciones no se abren.

Variante antigua:

// Торговые критерии
   double c1b[];
   for(i=1;i<=PeriodB;i++)
   {
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   }
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,1);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,3);
   
   double c1s[];
   for(i=1;i<=PeriodS;i++)
   {
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   }
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,1);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,3);

if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

Entiendo que nadie tiene tiempo para limpiar a los demás, aconséjame al menos dónde insertar exactamente la Impresión y dónde buscar la retroalimentación en el diario o los registros y a qué hay que prestar atención.

Archivos adjuntos:
21.mq4  15 kb
 

¡Buenas tardes!

Tengo una pregunta sobre el cierre parcial, porque cada empresa de corretaje tiene sus propias reglas. No entiendo cómo hacer la contabilidad de los pedidos correctamente:

El problema: Necesitamos encontrar un tick de un pedido recién hecho en este TS particular sin usar un mago.

1) He observado que una orden parcialmente cerrada tiene un comentario, debería poder leer el comentario // No estoy seguro de que todas las empresas de corretaje escriban comentarios

2) buscar por fecha de apertura de la orden // no estoy seguro de que funcione para todas las empresas de corretaje

3) buscar un nuevo tick justo después de un cierre parcial y comprobar el volumen, etc. para ver si es la orden correcta

4) otra cosa

 
wenay:

cómo hacer mejor el recuento de pedidos:

leer la ayuda allí:
comentario - Ordenar el texto del comentario. La última parte del comentario puede ser modificada por el servidor comercial.

magic - El número mágico de la orden. Puede utilizarse como identificador definido por el usuario.

La magia es una buena forma de ayudarte

Para buscar un pedido, haga lo siguiente

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {

.......

 
Craft:

Por favor, indíquenos dónde debe insertarse exactamente la impresión y dónde debe buscarse la información en el cuaderno de bitácora o en los archivos de bitácora y a qué debe prestarse atención.

Imprima donde quiera comprobar la situación (por ejemplo, si hace un pedido - imprima el hecho de hacer o un error de hacer el pedido en el diario).

Si no está seguro de que su función pueda ser llamada, es decir, que la condición de llamada a la función no se cumpla nunca, añada la palabra Print a la entrada de la función.

Impresión leída en el terminal en la pestaña "Expertos"

 
IgorM:

donde se puede leer cómo se dibuja un indicador con los siguientes parámetros

SetIndexStyle(0,DRAW_HISTOGRAM, 0, 1, color1)

SetIndexStyle(1,DRAW_HISTOGRAM, 0, 1, color2)

No entiendo por qué a veces se dibuja y a veces no - lo entiendo muy bien si se dibuja una línea normal DRAW_LINE - el valor del buffer del indicador fijará el eje y, pero el número del elemento corresponde al número de barras del gráfico

¿por qué cuando dos búferes de indicadores terminan en una barra, aparece un segmento horizontal en la barra, pero cuando uno de los búferes de indicadores es EMPTY_VALUE - nada, y la lógica de la coloración aún no está clara?

Elestilo de DRAW_HISTOGRAM no es fundamentalmente diferente de otros estilos de dibujo de líneas, el eje X está representado por números de barra, el eje Y - por los valores de la matriz de indicadores, pero como dicen, hay un matiz.
Tomemos como ejemplo un simple indicador:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2
double SIMPLE[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = 1;
   }
}
//+------------------------------------------------------------------+

Una matriz de indicadores, una ventana separada, todos los elementos tienen asignado el valor 1. Póngalo en el gráfico, y qué vemos (Figura 1, izquierda):

La "Ventana de datos" muestra las lecturas del indicador, pero no hay nada en su ventana. Este es el matiz, MT4 simplemente no sabe que 1 es lo más alto? ¿A qué altura debe situarse el listón? No tiene nada que extraer, es decir, sencillamente no hay precio de división para las barras. Como habrá notado, no hay un parámetro separado que establezca la altura de las barras, su altura se establece automáticamente, en relación con otros elementos. Permítanos ayudar a MT4 y establecer el precio de la división, podemos hacerlo programáticamente:

#property indicator_minimum 0
#property indicator_maximum 2

Simplemente puede fijar los mínimos (digamos 0) y los máximos (digamos 2) en la configuración del indicador.
Y todo encaja al instante (Fig. 2, derecha), ahora el terminal sabe a qué altura debe dibujarse la barra, el 1 está en el medio entre el 0 y el 2 :))) En este ejemplo, la matriz de indicadores tiene un valor (especialmente para mostrar el "matiz") y debemos indicar al terminal lo mucho o poco que es. Si sustituimos los datos del array por 1, por ejemplo Close[shift], el terminal no establecerá ninguna restricción dura y dibujará una imagen "ala MAKD".

Una imagen un poco diferente si se dibuja el histograma no en una ventana separada, sino en general. Dejemos el valor de Close[shift] para la primera matriz de indicadores, sólo cambiamos el parámetro:

#property indicator_chart_window

Volvemos a tener la misma imagen (Fig. 3, izquierda). Los valores están presentes pero no se muestran.

El terminal necesita alguna base para el cálculo automático de la altura de la barra, y como los mínimos y los máximos no se pueden fijar en la ventana general, aparecerá la segunda matriz de indicadores. Añadimos la segunda línea y la ponemos a 0.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_color2 Red
#property indicator_width2 2
double SIMPLE[];
double SIMPLE2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, SIMPLE);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, SIMPLE2);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      SIMPLE[shift] = Close[shift];
      SIMPLE2[shift] = 0;
   }
}
//+------------------------------------------------------------------+

Las matrices de indicadores comienzan a mostrarse de forma relativa. Y todo será como debe ser (Fig. 4, derecha). Las columnas se dibujan desde SIMPLE[shift] hasta SIMPLE2[shift].

Y por último, está el código del indicador que rellena las velas, azul si es alcista y rosa si es bajista. Nuevamente dos matrices para cada color (el dibujo es de inicio a fin (de Apertura a Cierre)).

//+------------------------------------------------------------------+
//|                                                       SIMPLE.mq4 |
//|                        Copyright © 2010,Анатолий Сергеев  |
//|                                            mql.sergeev@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Анатолий Сергеев"
#property link      "mql.sergeev@yandex.ru"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_width1 2
#property indicator_color2 Blue
#property indicator_width2 2
#property indicator_color3 Pink
#property indicator_width3 2
#property indicator_color4 Pink
#property indicator_width4 2
double Blue_home[];
double Blue_end[];
double Pink_home[];
double Pink_end[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0, Blue_home);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexBuffer(1, Blue_end);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2, Pink_home);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(3, Pink_end);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   for(int shift = Bars-IndicatorCounted()-1; shift >= 0; shift--){
      if(Close[shift] > Open[shift]){
         Blue_home[shift] = Open[shift];
         Blue_end[shift] = Close[shift];
      }else{
         Pink_home[shift] = Open[shift];
         Pink_end[shift] = Close[shift];
      }
   }
}
//+------------------------------------------------------------------+

 
IgorM:
lee la ayuda allí:
comentario - Ordenar el texto del comentario. La última parte del comentario puede ser modificada por el servidor comercial.

magic - El número mágico de la orden. Puede utilizarse como identificador definido por el usuario.

Utiliza la magia para ayudarte

Para buscar un pedido, haga lo siguiente:

if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {

.......



Tarea: Tienes que encontrar la garrapata de una orden recién aparecida para esta TS en particular sin usar un magik .