Mt4 Fim do apoio. - página 26

 

Qualquer pessoa que goste de minha solução, escreva-me pessoalmente. Eu vou refiná-lo e entregá-lo.

Boa sorte a todos.

 
Реter Konow:

Um ciclo de símbolos, verificando a abertura de novas barras quando chega uma cotação e assim por diante pode ser facilmente adicionado à minha solução. E o que o OOP tem a ver com isso?

Você escolheu um exemplo errado. Pense em outra coisa a seu bel-prazer.

E você o faz. Dado que os caracteres podem mudar - afinal de contas, é verdade quando se lê caracteres.

 
Artyom Trishkin:

Faça-o. Uma vez que os caracteres podem mudar - porque quando você lê os caracteres é verdade.


Bem, e se eu fizer? O que você diz então? Vou lhe contar um segredo: para mim, este tipo de tarefa é uma brincadeira total de criança. Você realmente acha que eu não posso fazer isso? Isso é simplesmente ingênuo...

 
Реter Konow:

Bem, e se eu fizer? O que você diz então? Vou lhe contar um segredo: para mim, este tipo de tarefa é uma brincadeira total de criança. Você realmente acha que eu não posso fazer isso? Isso é simplesmente ingênuo...

Bem, faça-o já.

 
Vitaly Muzichenko:

Artyom não respondeu à pergunta, mas a pergunta é esta: escreva em estilo processual, para que funcione corretamente

Sem dúvida. Hedge para salvar a comparação de operações de cordas, bem, se o cliente é um maníaco e irá negociar em todos os símbolos simultaneamente.

Mas parece que não há outro lugar para salvar operações e memória - tudo é mínimo.

void OnTimer(){

   Alert(Fn_new_bar("EURUSD", PERIOD_D1)); }

//+------------------------------------------------------------------+

uint Sp_Adler32(string line){

   ulong s1 = 1;

   ulong s2 = 0;

   uint buflength=StringLen(line);

   uchar char_array[];

   ArrayResize(char_array, buflength,0);

   StringToCharArray(line, char_array, 0, -1, CP_ACP);

   for (uint n=0; n<buflength; n++){

      s1 = (s1 + char_array[n]) % 65521;

      s2 = (s2 + s1)     % 65521;}

   return ((s2 << 16) + s1);}

//+------------------------------------------------------------------+

bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf){

   static datetime st_time[]; 

   static uint     st_id[];

   

   //---- set

   datetime new_time = iTime(symb, tf, 0);     if(new_time==0) return(false); 

   uint     new_id   = Sp_Adler32(StringConcatenate(symb,EnumToString(tf))); 

   datetime old_time = 0; 

   uint     old_id   = 0;

   

   //---- find

   int size = ArraySize(st_time); 

   for(int i=0; i<size; i++){

      if(st_id[i]!=new_id) continue; 

      old_id   = st_id  [i]; 

      old_time = st_time[i];

      break;}

   

   //----add new element

   if(old_time==0){

      ArrayResize(st_time, size+1); st_time[size]=new_time;

      ArrayResize(st_id,   size+1); st_id  [size]=new_id; }

   

   //----

   return(old_time>0 && old_time<new_time);}


 
Реter Konow:

Peço desculpas pelo leve atraso.

Aqui está a primeira versão da função. Você pode refiná-lo e desenvolvê-lo ainda mais. Se você notar um erro, por favor, dê seus comentários.


A questão não está no OOP, mas no fato de seu código ser linear, embora você provavelmente nunca o aprenderá...

 
Galina Bobro:

Não há problema. Hedge para salvar a comparação de operações de cordas, bem, se o cliente é um maníaco e irá negociar em todos os caracteres simultaneamente.

Mas parece que não há outro lugar para salvar operações e memória - tudo é mínimo.


Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Mt4 Fim do Apoio.

Artyom Trishkin, 2017.09.10 23:21

Eu tinha um objetivo para o resultado final de seu código de estilo de procedimento de trabalhar em tal laço:

   ENUM_TIMEFRAMES array_timeframes[]=
      {
      PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
      };
   int total=SymbolsTotal(true), total_tf=ArraySize(array_timeframes);
   for(int i=0; i<total; i++){
      string symbol_name=SymbolName(i,true);
      for(int j=0; j<total_tf; j++){
         if(IsNewBar(symbol_name,array_timeframes[j])){
            Print("Новый бар на ",symbol_name," ",EnumToString(array_timeframes[j]));
            }
         }
      }

 
Artyom Trishkin:


Nomeado errado por hábito -bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf) é a função certa.

 
Artyom Trishkin:

Bem, faça-o agora.


OK. Sua solução só funciona com carrapatos. O meu está em um temporizador. Você acha que meu método de cronometragem com as aparências em bares tem um inconveniente. Certo. Que seja assim. Vou acrescentar um cheque para a chegada de uma cotação antes de colocar uma nova bandeira de barra. Vou adicionar outro parâmetro à função - um símbolo. O usuário escolherá o símbolo pelo qual deseja receber o novo evento do bar e o enviará para a função. A função irá verificar a hora da última citação deste símbolo. Em seguida, compararemos a hora da apresentação formal do bar e a hora da citação e colocaremos a bandeira do evento.

Eu só agora comecei a estudar este assunto, mas não vejo nenhuma dificuldade.

 
Galina Bobro:

Não se trata de OOP, trata-se de seu código ser linear, embora você talvez nunca saiba...

Linear, não-linear... Você está falando de ópera na programação novamente?