[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 285

 
gyfto:

Certo. Acho que já terminei. Aqui está o coletor de carrapatos retrabalhados com sua embalagem em segundas velas.

Foi:

Tornou-se:

Comentários sobre o código.

1. Não fez a seleção da caixa de troca em velas virtuais para economizar tempo da CPU, em vez disso comentou seções com seleção (já que a seleção é feita para necessidades específicas uma vez antes da compilação).

2. No trabalho com hora local (off-line que é) não me lembro. No loop"while(time===TimeLocal()){/ até que um segundo tenha passado", suspeito que deve haverMarketInfo no FileWriteDouble (parece-me o topo de um idiota). Se você me disser o que pareceria mais lógico lá, eu ficarei grato.

3. A construção de um autor

Eu o declarei logo no final do init().

4. No início do init() arrays dinâmicos

em vez de variáveis usadas.

5. Para otimização, você pode teoricamente usar as funções de arquivo WinAPI e escrever no histórico de uma só vez no bloco 44 bytes (comprimento da estrutura MarketInfo ou o que quer que esteja em .hst).

6. Remoção completa do modelo de tempo de escrita do autor para a célula Time[]. Pela mesma razão, na cabeça enquanto loop não há verificação para TimeLocal(), apenas para TimeCurrent().

7. O que mais você sugere para otimizar o código?

A partir do ponto 4, deve ser entendido que você estava fazendo um indicador, então tais ações não são claras:

ArrayResize (bid, 1);//урезаем и обнуляем использованные массивы
ArrayResize (ask, 1);

ArrayInitialize() é provavelmente o mais adequado?!

E o mais provável é que você se recuse a usar matrizes indicadoras.

 
TarasBY:

ArrayInitialize() provavelmente funciona?!

ArrayInitialize(pergunte, EMPTY_VALUE); você quer dizer? Eu não o fiz. Por que eu o cortei exatamente, eu tinha medo de um caso assim:

(a, b, c)//valores em pergunta após três carrapatos por segundo (fantástico, mas vamos supor).

ArrayInitialize(ask, 0);//be (0, 0, 0, 0)

FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[]

- A célula Fechar receberá 0. É por isso que estou redefinindo o tamanho para evitar que isso aconteça. Verifique ArrayInitialize(perguntar, EMPTY_VALUE);.

TarasBY:

Você tem que parar de usar as matrizes indicadoras.

Eles são dinâmicos, foi por isso que eu caí. Menos comandos, menor número de ciclos de processamento. Você tem que fazer 500 milissegundos de processamento em qualquer f... ...para conseguir fazer isso.

 
você sabe se é possível substituir o envio e o fechamento de ordens em um EA por uma janela manual e entrar no mercado através desta janela, é necessário para aqueles corretores que não permitem o uso de EAs
 
gyfto:

ArrayInitialize(pergunte, EMPTY_VALUE); você quer dizer? Eu não o fiz. Eu tinha medo de um caso assim, por isso comecei a cortá-lo:

(a, b, c)//valores em pergunta após três carrapatos por segundo (fantástico, mas suponha).

ArrayInitialize(ask, 0);//be (0, 0, 0, 0)

FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[]

- A célula Fechar receberá 0. É por isso que estou redefinindo o tamanho para evitar que isso aconteça. ArrayInitialize(pergunte, EMPTY_VALUE); confira-os.


Eles são dinâmicos, foi por isso que eu caí. Menos comandos, menor número de ciclos de processamento. É preciso administrar 500 milissegundos de processamento em qualquer engarrafamento teoricamente possível. ...para conseguir fazer isso.

Não é isso que eu quero dizer: algo me diz que você não vai conseguir encolher a matriz de indicadores. Além disso, se houver células não preenchidas em tal matriz, há SEMPRE algum valor lá: 0 ou VAZIO_VALOR, e o que você obtém nestes cálculos:

bid[ArrayMaximum(bid)];
ask[ArrayMinimum(ask)];
E por lógica geral: eu executaria toda a coleta de carrapatos em loop e controlaria separadamente o tempo e, assim que o tempo da "nova barra" tivesse passado, escreveria no arquivo, zerando e recortando as matrizes de trabalho no processo.
 
ex_kalibur:
Se eu souber, é possível alterar o envio e o fechamento de ordens no assessor para chamar a janela de negociação manualmente e entrar no mercado através desta janela, é necessário para aqueles corretores que não permitem o uso de assessores
Janela "Propriedades" do conselheiro -> guia "Geral" -> "Comércio automático". -> Coloque uma caixa de seleção em "Confirmação manual" - não conheço outro caminho.
 
TarasBY:

E por lógica geral: eu executaria toda a coleta de carrapatos em loop e controlaria separadamente o tempo e, uma vez passado o tempo para a "nova barra", escreveria no arquivo, zerando e recortando as matrizes de trabalho no processo.


Estranho... Tenho-o assim... A única coisa é que o tempo é controlado no próprio ciclo de coleta do carrapato, e a matriz de trabalho não é recortada até que uma cópia do carrapato tenha sido retirada tantas vezes quanto não houve carrapatos menos um segundo. Um segundo passou - um novo tick é desenhado, dois - uma cópia do tick anterior e um novo tick, três - duas cópias do tick anterior e um novo tick, etc. Ao invés de cópias do tick anterior é possível traçar um traço pelo nível Close, esta variante é comentada no código.
 
gyfto:

Estranho... Tenho-o assim... A única coisa é que o tempo é controlado no próprio loop, e a matriz de trabalho não é recortada até que uma cópia do tick seja tirada tantas vezes quanto não houve ticks menos um. Um segundo passou - um novo tick é desenhado, dois - uma cópia do tick anterior e um novo tick, três - duas cópias do tick anterior e um novo tick, etc. Ao invés de cópias do tick anterior é possível traçar um traço pelo nível Close, esta variante é comentada no código.

Você e eu estamos falando de ciclos diferentes. Estou falando sobre isto:

    while (!IsStopped() && IsExpertEnabled())
    {
        //---- Сбор тиков
    }
 
Alguém pode me dizer como remover os zeros após o ponto decimal? Tenho 4 casas decimais em meu código por algum motivo. Aqui está o código. string l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
 
Demon2057:
Alguém pode me dizer como remover os zeros após o ponto decimal? Tenho 4 casas decimais em meu código por algum motivo. Aqui está o código. string l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
https://docs.mql4.com/ru/strings/StringSubstr
 

Você pode me dizer o que estou fazendo de errado...

Preciso de uma variável do tipo duplo para conter a data como 0,20130429164459 (significando 2013.04.29 16:44:59)

Parte do código EA:

#include <stdlib.mqh>
bool once=false;
int start()
  {
  if (once==false)
     {
    double DTM; // дата и время в формате 0,20130429164459
    int YY=TimeYear(   TimeCurrent());   // Year
    int MN=TimeMonth(  TimeCurrent());   // Month         
    int DD=TimeDay(    TimeCurrent());   // Day
    int HH=TimeHour(   TimeCurrent());   // Hour         
    int MM=TimeMinute( TimeCurrent());   // Minute
    int SS=TimeSeconds(TimeCurrent());   // Second
    DTM = YY*0.0001+MN*0.000001+DD*0.00000001+HH*0.0000000001+MM*0.000000000001+SS;
    
   Alert ("Значение переменной DTM с 06 знаками равно ", DoubleToStrMorePrecision(DTM,6));
   Alert ("Значение переменной DTM с 07 знаками равно ", DoubleToStrMorePrecision(DTM,7));
   Alert ("Значение переменной DTM с 08 знаками равно ", DoubleToStrMorePrecision(DTM,8));
   Alert ("Значение переменной DTM с 09 знаками равно ", DoubleToStrMorePrecision(DTM,9));
   Alert ("Значение переменной DTM с 10 знаками равно ", DoubleToStrMorePrecision(DTM,10));
   Alert ("Значение переменной DTM с 11 знаками равно ", DoubleToStrMorePrecision(DTM,11));
   Alert ("Значение переменной DTM с 12 знаками равно ", DoubleToStrMorePrecision(DTM,12));
   Alert ("Значение переменной DTM с 13 знаками равно ", DoubleToStrMorePrecision(DTM,13));
   Alert ("Значение переменной DTM с 14 знаками равно ", DoubleToStrMorePrecision(DTM,14));
   Alert ("Значение переменной DTM с 15 знаками равно ", DoubleToStrMorePrecision(DTM,15));
   once=true;
      }
   return(0);
  }

Log de eventos para Precision 12,13 e 14 dá resultado errado, veja foto


Razão: