[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 59

 
xrust писал(а) >>
Você pode, mudar o nome do relatório detalhado para relatório normal e ficará feliz

Você pode me dizer, se não for difícil, onde exatamente este nome pode ser mudado? A ajuda do usuário não diz absolutamente nada sobre isso.

 
Uh... você está me desconcertando.... Você nunca renomeou um arquivo?
 
Caros especialistas, por favor, não ignorem minha pergunta.

Existe um indicador que conta a volatilidade, por exemplo, diariamente. Mas não aquele que dá um número indefinido, como 0,34. Mas ele deve calcular o número de castiçais por dia e dividi-lo por um determinado período (número de dias) para que o indicador conheça o valor médio. Exemplo: abertura 100, fechamento 200; o segundo dia - abertura 200, fechamento 250. Volatilidade média para estes 2 dias = ((200-100)+(250-200))/2 dias=(100+50)/2=75
Onde fazer o download, se disponível.
 
xrust писал(а) >>
Uh... você está me empurrando aqui.... >> você nunca renomeou um arquivo?

O terminal deve gerar automaticamente um relatório a cada 20 minutos e enviá-lo para o servidor ftp. Esta função economiza um relatório regular por padrão. Esta função do terminal por padrão economiza um relatório regular, enquanto eu gostaria de um relatório detalhado com informações adicionais e um gráfico. Você pode salvar manualmente o relatório detalhado sem nenhum problema e selecionar o período de histórico desejado.

E primeiro você me deixou perplexo - o que e onde devo renomear manualmente para organizar a função automática? Não está nada claro.

 

Repetindo um post de https://forum.mql4.com/ru/10422, talvez minha própria pergunta fosse mais apropriada aqui.


Aqui está algum código do exemplo.ini:

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


lê o número de pares e depois salva os nomes dos pares em uma série de cordas, uma a uma:

#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 simples e depois de ler o ini devemos obter uma série de nomes de pares.

Mas como resultado, depois de ler outro parâmetro do ini e atribuir um valor a outro elemento da matriz,

todos os outros elementos previamente atribuídos recebem o mesmo 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

Acontece que quando se atribui um conjunto de caracteres a uma variável, na verdade é a atribuição de

referência, não valor. Procurei em toda a documentação disponível mais o fórum, mas não encontrei nenhuma resposta para isso.

Eu encontrei a saída usando StringSubstr, mas algo me diz que não é bem assim.


Pergunta para aqueles que sabem: como atribuir corretamente valores de outras variáveis a elementos da matriz de strings ?

 
Yug >> :

Repetindo um post de https://forum.mql4.com/ru/10422, talvez minha própria pergunta fosse mais apropriada aqui.


Eu me lembrei! Peculiaridade da implementação de cordas. Depois que a matriz for redimensionada, ela deve ser passada e zerada:

ArrayResize( CrossName, numCross);

for (int i=0; i< numCross; i++)
{
   CrossName[ i] = "";
}
Eu poderia estar errado, mas isso deveria ajudar.
 
XinoXano писал(а) >>

O terminal deve gerar automaticamente um relatório a cada 20 minutos e carregá-lo para o servidor ftp. Esta função economiza um relatório regular por padrão. Esta função do terminal por padrão economiza um relatório regular, enquanto eu gostaria de um relatório detalhado com informações adicionais e um gráfico. Você pode salvar manualmente o relatório detalhado sem nenhum problema e selecionar o período de histórico desejado.

E primeiro você me deixou perplexo - o que e onde devo renomear manualmente, a fim de organizar a função automática? Não está nada claro.

Os modelos de relatório de declaração.htm, e o relatório detalhado de declaraçãoDetailed.htm estão localizados no terminal de pastas\mplates Por padrão, o terminal envia um relatório statement.htm simples, você precisa de StatementDetailed.htm, eu sugeri que você em russo renomeasse o arquivo StatementDetailed.htm em ambiente Windows para statement.htm. Ou escreva também instruções para renomear ?

 

Prezados especialistas,

por favor, me ajude nas transações de LOKing

Mais detalhes e código aqui: Ajude-me a lidar com o "LOKing of Positions".

Sempre com respeito,

 
xrust писал(а) >>

Os modelos de relatórios statement.htm, e o relatório detalhado StatementDetailed.htm estão localizados na pasta terminal\templates\ htm. Por padrão, o terminal envia uma declaração de relatório regular .htm, mas você precisa de uma declaração detalhadaDetailed.htm, eu sugeri que você em russo renomeasse em windows File StatementDetailed.htm para Statement.htm. Ou escrever instruções para renomear também?

Não vou poder me renomear, mas para substituir um modelo por outro, não me ocorreu ...

Muito obrigado! Agora tudo está claro e tudo funciona!!!!

 
Everlost >> :

Muito simples - quando o sinal Cls_S ou Cls_B chega, esquecemos a última posição aberta (redefinimos o valor da variável Last_Position de volta para -1).

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

Mas agora o Expert Advisor deixou completamente de fazer negócios(

Tenho-o assim:

//Учет ордеров истории
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;       //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


existe algum tipo de engano?
Razão: