Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 2

 
gyfto:


Tenho a seguinte pergunta. Há um bloco no init(), que pendura o terminal (é o que eu quero transferir para dll). Naturalmente, o log não pode ser visto - o terminal só é fechado pela Ctrl+Alt+Delete. A falta de impressão para rastrear (e para medir o tempo de trânsito dos laços que entram em bloco) não ajuda - a impressora não escreve nada, o registro nem sequer é criado. Tento usar FileOpen/FileWrite com o mesmo propósito - o arquivo é criado (0 Kb), e o silêncio. Coloco FileWrite depois de FileOpen, na linha seguinte - sem efeito. Para que lado devo cavar?

Tente usar isto. Se isso não ajudar, para procurar por erros, você pode colocar temporariamente o referido bloco de inicialização para iniciar uma única vez via bandeira e tentar "puxar" logs dele.
 
gyfto:


O tema foi encerrado... Homem mau.

Tenho a seguinte pergunta. Há um bloco no init(), que pendura o terminal (é o que eu quero transferir para dll). Naturalmente, o log não pode ser visto - o terminal só é fechado pela Ctrl+Alt+Delete. A não-impressão para rastrear (e medir o tempo de trânsito dos laços recebidos) não ajuda - a impressora não escreve nada, o registro nem sequer é criado. Tento usar FileOpen/FileWrite com o mesmo propósito - o arquivo é criado (0 Kb), e o silêncio. Coloco FileWrite depois de FileOpen, na linha seguinte - sem efeito. Qual é a direção a ser seguida para cavar?


Olhe, não há nada escondido nos atributos?


Não está escondido.
 
TarasBY:
Tente usar isto. Se isso não ajudar, para procurar erros, você pode levar temporariamente o bloco de inicialização mencionado no início para uma partida única através de uma bandeira e tentar "puxar" os troncos dele.


Nem a partida única no início nem o ininit funciona - nem Print nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não vou afixá-lo aqui, porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no excesso de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta metros e meio. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.
Arquivos anexados:
eflfcaj.mq4  10 kb
 
gyfto:

Nem lançamento único na inicialização nem em trabalhos ininit - nem Print nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não o estou colando aqui porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no transbordamento de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta e um centavo. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.

O estilo do código não se desfaz dele. Sem espaços, parênteses em diferentes níveis, várias operações seguidas, sem comentários... Pesadelo! :-))

Você mesmo entende isso?

 
Ajude a resolver um problema com o MT4. Ao chamar um indicador personalizado, seus parâmetros de entrada e cores na janela não são exibidos (pisca rapidamente e desaparece). Como consertá-lo? Reinstalado o MT4, não ajudou.
 
gyfto:


Ele encerrou o assunto... Não é um bom homem.


= :)
 
gyfto:

Nem a inicialização única nem a inicialização inicial funcionam - nem Print, nem FileWrite. Estou anexando este pedaço de código (não vejo outra saída), não o estou colando aqui porque é muito longo. Removi todas as declarações de tampão e descrevi todas as chamadas de indicadores técnicos incorporados ali. Já pensei no excesso de memória com matrizes, calculei que a maior matriz mais todas as outras matrizes é de cinqüenta metros e meio. Se não imprimir nem mesmo na primeira linha, ao entrar no bloco... - isso é o que me incomoda. A versão anexada é verdadeira com FileWrite.

Eu concordo com Vadim - o código é difícil de ler. Tente decompor este código em blocos funcionais, em cada bloco impresso ou escrito em arquivo. E executá-lo em uma estrutura que "retarda" a execução do código, por exemplo, desta forma:

void SteppingThrough()
{
    int  li_Time = TimeLocal(), li_N = 0;
    bool lb_work = true, lb_break = false;
    while (IsStopped() == false)
    {
        if (lb_work)
        {
            switch (li_N)
            {
                case 0:
                    //---- Block 1
                    lb_work = false;
                    li_N++;
                    break;
                case 1:
                    //---- Block 2
                    lb_work = false;
                    li_N++;
                    break;
                case N:
                    //---- Block N
                    lb_break = true;
                    li_N++;
                    break;
            }
            if (lb_break) break;
        }
        if (TimeLocal() > li_Time) {li_Time = TimeLocal(); lb_work = true;}
    }
}

Atrasar a execução do próximo bloco em 1 segundo. - O terminal deve ter tempo suficiente para imprimir o registro.

 
 

Há 2 funções muito semelhantes na "última posição, bandeira de fechamento por STOP" de Kim e a outra por TAKE.

aqui está o código

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}

Como você pode ver, eles são muito parecidos.

Mas, por alguma razão, só fechar por STOP funciona para mim.

SL=  isCloseLastPosByStop("", -1, -1);
TP=  isCloseLastPosByTake("", -1, -1);

Print(SL,"_",TP); 

Funciona, mas meu Conselheiro Especialista não imprime UNIT, mas continua imprimindo NULL.

Mas o fechamento na STOP imprime corretamente: se parar = 1, se não parar =0....

me ajude por favor....

 
lottamer:

Há 2 funções muito semelhantes na "última posição, bandeira de fechamento por STOP" de Kim e a outra por TAKE.

aqui está o código

Como você pode ver, eles são muito parecidos.

Mas, por alguma razão, só fechar por STOP funciona para mim.

Eu abro posição manualmente, abreviando TAKE. funciona - mas a EA não imprime UNIT, mas continua a imprimir NULL.

Mas o fechamento na STOP imprime corretamente: se parar = 1, se não parar =0....

ajude-me a entender isto por favor....


Veja cuidadosamente qual o preço que a ordem de parada tinha na posição aberta e a que preço ela fechou. A função de Igor compara esses preços exatos, mas não leva em conta o escorregamento.
Razão: