[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 113

 
IgorM:

Às vezes há cálculos complexos ou carregamento de histórico no init(), ou há muitos indicadores e Conselheiros Especializados pendurados no terminal ou...

mas se o terminal interromper o código durante sua inicialização, haverá um erro no registro como este:" .... timeout em especialista ...."

Se o registro não mostrar nenhum erro no terminal, significa que a inicialização foi bem sucedida. A própria função start() é fácil de verificar - escreva na primeira linha start(): Print("new tick");


Eu o fiz((.

int start()
  {
  Print("start");
  
/*current_values_from_MT(CUR, CUR_BUF);
current_values_from_MT(MAIN, MAIN_BUF);*/

  


   return(0);
  }

Sim, estou balançando muitas informações, cálculos também, experimentando carrapatos...

O cálculo leva de 2 a 3 minutos, MT "não pendura", tudo funciona normalmente, mensagens de Print() e Alert são exibidas e depois tudo))

Olhando para todas as mensagens da MT, não encontrei nenhum erro.

Por favor, ajude.

 
BBSL:

O cálculo leva de 2 a 3 minutos, o MT não "pendura", tudo funciona como de costume, as mensagens de impressão() e de alerta são exibidas e depois tudo)))

se Print() for impresso, start() definitivamente funciona, mas estou confuso com sua afirmação de que o cálculo leva de 2 a 3 minutos - com tal carga no terminal você precisa interromper os cálculos usando a função sleep() caso contrário o terminal ficará definitivamente pendurado.

Como o MT4 não tem depurador, insira Print() em seções de código questionáveis e pegue as seções de código e condições que falharam ou não falharam.

 
Preciso consertar o fato de acionar as ordens abertas por TakeProfit ou StopLoss, e os valores de TakeProfit e StopLoss não são de meu interesse.
 
Jaguar1974:

Como posso verificar se um pedido é acionado por TakeProfit ou StopLoss? Obrigado por sua resposta!

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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(sy, 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(sy, 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);
}
Familiarize-se com o código de ambas as funções e funda-as em uma só para otimizar a velocidade de execução e para suas tarefas específicas...
 
eddy:
Sayod ,em que prazo e com que parâmetros você negociou?


Qual é a diferença ou você a tem invertida e quer testá-la?

Traduzido em h1 por padrão,

Degrau da tubulação - 30

LotExpo - 1.59

Acho que os parâmetros não importam muito se a idéia foi implementada, acho que o Assessor Especialista será bom com qualquer parâmetro, IMHO.

 
Jaguar1974:
Preciso consertar o fato de que as ordens abertas são acionadas por TakeProfit ou StopLoss. Não estou interessado nos valores reais de TakeProfit e StopLoss.

Se você quiser apenas registrar o fato de que o pedido foi acionado, então você pode memorizar o número de pedidos no tick anterior e compará-lo com o número de pedidos no tick seguinte - se o número de pedidos mudou, isso significa ....
 
kiimar:
O terminal fechou a ordem de perda com o comentário "so:19,5%/28,4/145,8". O que isso significa?
Isso significa que quando o nível de margem livre de 19,5% foi atingido, ocorreu uma parada e o comércio perdido foi fechado de acordo com as regras.
 
IgorM:

se imprimir() imprimir, então certamente você começou() a trabalhar, mas estou confuso com sua afirmação de que o cálculo leva de 2 a 3 minutos - com tal carga do terminal você precisa interromper os cálculos usando a função sleep(), caso contrário o terminal ficará definitivamente pendurado

Como o MT4 não tem um depurador, insira Print() nas seções de código duvidoso e pegue as seções de código e condições que falharam ou não falharam.


Desculpe, entendi errado, a impressão só funciona no init. Eu não posso começar))

Sim, no final de cada função, eu coloco uma mensagem impressa sobre ela, para verificar se está tudo bem. E todas as mensagens (todas as funções) funcionaram 100% até o final do init, eu não posso ir para começar!

Obrigado antecipadamente pela resposta!

 
Obrigado, eu ainda tenho muito a aprender.
artmedia70:
Familiarize-se com o código de ambas as funções e funda-as em uma só para otimizar a velocidade de execução e para suas tarefas específicas...
 
BBSL:


Desculpe, eu falei mal, Print só funciona inite. Eu não consigo começar))

Sim, ao final de cada função, inseri uma impressão com uma mensagem sobre ela para verificar se está tudo bem. E todas as mensagens (todas as funções) funcionaram 100% até o final do init, não posso ir para o início!

Obrigado antecipadamente pela resposta!

Então, francamente, você não tem um carrapato no terminal. Isto é, ou não está conectado, ou você está trabalhando em um gráfico offline, ou verifique IsExpertEnabled() no init e, se não for permitido, então habilite EAs.