[¡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 59

 
xrust писал(а) >>
Puedes, cambiar el nombre del informe detallado a informe normal y estarás contento

¿Puede decirme, si no es difícil, dónde se puede cambiar exactamente este nombre? La ayuda al usuario no dice nada al respecto.

 
Uh... me estás desconcertando .... ¿Nunca has cambiado el nombre de un archivo?
 
Estimados expertos, por favor, no ignoren mi pregunta.

¿Existe algún indicador que cuente la volatilidad, por ejemplo diariamente? Pero no el que da un número indefinido como 0,34. Pero debería calcular el número de velas por día y dividirlo por un periodo determinado (número de días) para que el indicador conozca el valor medio. Ejemplo: Apertura 100, cierre 200; el segundo día - apertura 200, cierre 250. Volatilidad media para estos 2 días = ((200-100)+(250-200))/2 días=(100+50)/2=75
Donde descargar si está disponible.
 
xrust писал(а) >>
Uh... me estás dejando perplejo aquí.... >> ¿Nunca has renombrado un archivo?

Se supone que el terminal genera automáticamente un informe cada 20 minutos y lo envía al servidor ftp. Esta función guarda un informe regular por defecto. Esta función del terminal guarda por defecto un informe normal, mientras que yo quisiera un informe desglosado con información adicional y un gráfico. Puede guardar manualmente el informe detallado sin problemas y seleccionar el periodo del historial que desee.

Y primero me tienes perplejo: ¿qué y dónde debo renombrar manualmente para organizar la función automática? No está nada claro.

 

Repitiendo un post de https://forum.mql4.com/ru/10422, quizás mi propia pregunta sería más apropiada aquí.


Aquí hay algo de código de example.ini:

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


lee el número de pares y luego guarda los nombres de los pares uno por uno en la matriz de cadena:

#include <IniFiles.mqh>

extern string config_path = "C:\Program Files\MetaTrader - MetaQuotes\experts\example.ini";

string CrossName[];
int numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
string sectionName = "common";

numCross = ReadIniInteger(config_path, sectionName, "numCross", 0);
ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = ReadIniString(config_path, sectionName, "name", "-");
Print("init.1: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.1: read complete");

for (i=0; i<numCross; i++)
{
Print("init.2: CrossName[", (i+1), "]=", CrossName[i]);
}


Print("-------------------------------");
for (i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = StringSubstr(ReadIniString(config_path, sectionName, "name", "-"), 0, 0);
Print("init.3: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.3: read complete");

for (i=0; i<numCross; i++)
{
Print("init.4: CrossName[", (i+1), "]=", CrossName[i]);
}

return(0);
}


Parece ser sencillo y después de leer el ini deberíamos obtener un array de nombres de pares.

Pero como resultado, después de leer otro parámetro de ini y asignar un valor a otro elemento de la matriz,

todos los demás elementos asignados previamente obtienen el mismo valor.

2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: -------------------------------
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[2]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[1]=USDJPY

2009.04.09 02:17:06 example GBPUSD,H4: init.1: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[1]=EURUSD

Resulta que al asignar una matriz de cadenas a una variable, en realidad se trata de la asignación de

referencia, no valor. He buscado en toda la documentación disponible, además del foro, pero no he encontrado ninguna respuesta de por qué es así.

Encontré la salida usando StringSubstr, pero algo me dice que no es del todo correcto.


Pregunta para los que saben: ¿cómo asignar correctamente los valores de otras variables a los elementos de la matriz de cadenas ?

 
Yug >> :

Repitiendo un post de https://forum.mql4.com/ru/10422, quizás mi propia pregunta sería más apropiada aquí.


¡Ya me acordé! Peculiaridad de la implementación de la cadena. Después de redimensionar el array se debe pasar por él y ponerlo a cero:

ArrayResize( CrossName, numCross);

for (int i=0; i< numCross; i++)
{
   CrossName[ i] = "";
}
Podría estar equivocado, pero debería ayudar.
 
XinoXano писал(а) >>

Se supone que el terminal genera automáticamente un informe cada 20 minutos y lo sube al servidor ftp. Esta función guarda un informe regular por defecto. Esta función del terminal guarda por defecto un informe normal, mientras que yo quisiera un informe desglosado con información adicional y un gráfico. Puede guardar manualmente el informe detallado sin problemas y seleccionar el periodo del historial que desee.

Y primero me has confundido - ¿qué y dónde debo renombrar manualmente, para organizar el trabajo de la función automática? No está nada claro.

Las plantillas de informe statement.htm, y el informe detallado StatementDetailed.htm se encuentran en la carpeta terminal\templates\. Por defecto, el terminal envía el informe statement .htm sin formato, usted necesita StatementDetailed.htm, le sugerí en ruso cambiar el nombre del archivo StatementDetailed.htm en el entorno de Windows a statement.htm. ¿O escribir también instrucciones sobre el cambio de nombre?

 

Estimados expertos,

por favor, ayúdenme con las transacciones de LOKing

Más detalles y código aquí: Ayúdenme a lidiar con el "LOKing of Positions".

Siempre con respeto,

 
xrust писал(а) >>

Las plantillas de informe statement.htm, y el informe detallado StatementDetailed.htm se encuentran en la carpeta terminal\templates. Por defecto, el terminal envía un informe regular statement .htm, pero usted necesita statementDetailed.htm detallado, le sugerí en ruso que cambiara el nombre en el archivo de windows StatementDetailed.htm a statement.htm. ¿O escribir las instrucciones para cambiar el nombre también?

No renombrar a mí mismo voy a ser capaz, pero para reemplazar una plantilla a otra, no se me ocurrió ...

¡Muchas gracias! ¡¡¡¡Ahora todo está claro y todo funciona!!!!

 
Everlost >> :

Muy sencillo - cuando llega la señal Cls_S o Cls_B, nos olvidamos de la posición abierta por última vez (restablecemos el valor de la variable Last_Position a -1).

if ((Cls_S==true || Cls_B==true) && Last_Position>=0) Last_Position=-1;

Lo veo en teoría. Pero ahora el Asesor Experto ha dejado de hacer operaciones por completo(

Lo tengo así:

//Учет ордеров истории
int ORDtime=0;
double ORDprofit=0.01;
int ORDtype=-1;
for (int j=OrdersHistoryTotal()-1; j>=0; j--) 
{
  if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY)) 
  {
    if (OrderSymbol()==Symbol()) 
    {
      if (OrderCloseTime()!=0 && OrderCloseTime()> ORDtime) 
      {
        ORDtime=OrderCloseTime();
        ORDtype=OrderType();
        ORDprofit=OrderProfit();
      }
    }
  }
}
...
//Торговые критерии на открытие и экстренное закрытие ордеров
if (( ORDtype==-1)&&(...))
   {
    Opn_B=true;
   }
if (( ORDtype==-1)&&(...))    
   {
    Cls_B=true;
   }
if (...)
   {
    Opn_S=true;
   }
if (...)    
   {
   Cls_S=true;
   }
// Дополнительные условия к открытию
if (( Cls_B==true|| Cls_S==true)&&( ORDtype>=0)) ORDtype=-1;       //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


¿hay algún tipo de error?