Perguntas de um "boneco" - página 85

 
AUser:

Estou a tentar descobrir como guardar dados num ficheiro. Escrevi o seguinte código:

Apenas o último valor do preço é guardado num ficheiro. Quero o valor dos preços numa coluna. Onde é que errei?

Veja "Peculiaridades de operação ao especificar bandeiras de leitura e escrita" em Referência MQL5 / Constantes, enumerações e estruturas padrão / Constantes de entrada/saída / Bandeiras de arquivo abertas
 

Sou mesmo burro)) Ouvi conselhos anteriormente e reescrevi o código, embora não compreenda porque era assim... nada mudou de qualquer maneira. Na ideia é o programa mais elementar para escrever algo num ficheiro, e eu sou tão burro...))

void OnInit()
{
double BID = SymbolInfoDouble(_Symbol,SYMBOL_BID);
int FILE = FileOpen("FILE",FILE_WRITE|FILE_CSV,'\t',CP_ACP);
FileIsEnding(FILE);
FileWrite(FILE,BID);
}
void OnDeinit(const int reason)
{
int FILE = FileOpen("FILE",FILE_WRITE|FILE_CSV,'\t',CP_ACP);
FileClose(FILE);
}

Apenas um lembrete, estou a tentar escrever um programa para guardar carraças num ficheiro. Guarda apenas o último tique por alguma razão.

 
AUser:

Sou mesmo burro)) Ouvi conselhos anteriormente e reescrevi o código, embora não compreenda porque era assim... de qualquer maneira, nada mudou. Na ideia é o programa mais elementar para escrever algo num ficheiro, e eu sou tão burro...))

Apenas um lembrete, estou a tentar escrever um programa para guardar carraças num ficheiro. Por alguma razão, poupa apenas o último tique.

Função
FileIsEnding(FILE);

Não coloca o cursor do ficheiro no fim do ficheiro, como provavelmente pretendia.

Resolva-o e ficará feliz. :)

 
AUser:

Sou mesmo burro)) Ouvi conselhos anteriormente e reescrevi o código, embora não compreenda porque era assim... nada mudou de qualquer maneira. Na ideia é o programa mais elementar para escrever algo num ficheiro, e eu sou tão burro...))

Apenas um lembrete, estou a tentar escrever um programa para guardar carraças num ficheiro. Guarda apenas o último tique por alguma razão.

Esta é a forma correcta de o fazer.

int FILE;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   FILE = FileOpen("FILE",FILE_WRITE|FILE_CSV,'\t',CP_ACP);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   FileClose(FILE);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double BID = SymbolInfoDouble(_Symbol,SYMBOL_BID);
   FileWrite(FILE,BID);
  }
//+------------------------------------------------------------------+
 
sergey1294:

sobre isto é como deve ser

Exactamente, obrigado))
 
ZahvatkiN:

Reparei que no MT4 antes de abrir um negócio pode estabelecer um nível de stop-loss e take-profit, mas o MT5 não o tem ou é possível, mas de uma forma diferente?

 
sergeev:

ZahvatkiN:

Reparei que no MT4, antes de abrir um negócio, poderia definir o nível de stoploss e takeprofit, mas o MT5 não o tem ou é possível, mas de uma forma diferente?


Foi discutido aqui https://www.mql5.com/ru/forum/1111/page561
 

Olá.Code.Working TF M15.Transition to the Open-Close block takes place on a new bar.

Se devido a uma solicitação (por exemplo), a posição não será aberta, então reabrirá no bar seguinte.

E se o critério de entrada (olhando para a OHLC do bar anterior) desaparecer, a posição não será aberta.

Será que o entendo correctamente?

ZS.Provavelmente, faz sentido entrar pelo menos num novo minuto.

void OnTick()
  {CopyTime (_Symbol,PERIOD_M15,0,1,time);
   if (lastbar==time[0]) return;
   lastbar=time[0];
   
  SearchForExit();
  SearchForEnter();
 
   return;
  }
 

Colegas, podem dizer num relance, sem benchmarking, o que é mais rápido: executar CopyTime() de toda a história uma vez ou chamá-lo sempre apenas para alguns bares (que podem ser menos do que bares() de toda a história) e copiar o tempo de apenas um - barra actual - para Arr?

Se não olhar para a referência, mas raciocinar logicamente, com base no conhecimento, como pode justificar a sua resposta? ...Embora compreenda que isto já está na direcção de C/C++...

 
A abordagem correcta é solicitar uma profundidade razoavelmente apropriada para cada desafio. E não precisa de fazer consultas de profundidade total. O ponto importante é que a história pode ser descarregada de forma assíncrona em qualquer altura.