Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1106

 
Igor Makanu :

isto vai funcionar:

Muito provavelmente você descreveu a estrutura em nível global, e lá em nível global você quis atribuir valores aos campos da estrutura, isto não funcionará

Obrigado pela resposta.

Você pode me dizer, quando eu escrevo #define FXT_HEADER.intSize 70, por que ele dá um erro?

 
//+------------------------------------------------------------------+
//|  Функция A/D                       |
//+------------------------------------------------------------------+
double A_D(ENUM_TIMEFRAMES tf, int shift)
  {
   double res=0;
   res=iAD(NULL,tf, shift);
   return res;
  }

//+------------------------------------------------------------------+
//|  Функция A/D  средняя                     |
//+------------------------------------------------------------------+
double A_D_moving(ENUM_TIMEFRAMES tf, int period, int shift)
  {
   double res=0;
   double a[1];
  
   
   for(int i=period-1; i>=0; i--)
     {
   ArrayResize(a,period,0);
      a[i]= A_D(tf, i);    
     }
   for(int j=shift; j>=1; j--)
     {
      res=iMAOnArray(a,0, period,0,MODE_SMA,j);
     }
   return res;
  }

Olá!

Tentando fazer uma função de média móvel do iAD(). Não funcionou até o final. A função na versão acima produz o valor da Média móvel do iAD() na barra atual. Não depende do valor da variável de turno.

Mas preciso que a variável shift seja o índice da barra onde a função retorna o valor correspondente da Média móvel do iAD(). O erro descrito foi detectado através do seguinte código inserido no OnTick():

   Comment("\n  #0= ", DoubleToString(A_D_moving(0, 20, 0)),
           "\n  ++++++++++++++",
           "\n  #1= ", DoubleToString(A_D_moving(0, 20, 1)),
           "\n  ----------------------",
           "\n  #2= ", DoubleToString(A_D_moving(0, 20, 2)));
   

Se alguém puder, por favor, informe como corrigir o erro.

 

Você pode me ajudar em uma tarefa primitiva?
- o indicador tem uma verificação para o número da conta... se o número da conta não for o especificado - o indicador dá uma mensagem (o indicador é apenas para amigos, etc.)
- após o indicador estar instalado em um gráfico - tudo está funcionando bem ... o cheque é passado... o indicador funciona

Mas depois de reiniciar o terminal - indicador falha o teste ... Entendo que o download do código do indicador ocorre antes da conexão com o corretor? Tenho que reinstalá-lo na tabela... Isto não é uma opção...
Você pode me dizer em que lugar inserir este código corretamente? Quero poder colocá-lo na tabela uma vez, salvá-lo como um modelo e tudo ...

 {

   if (AccountInfoInteger(ACCOUNT_LOGIN)  != 123456) {

      Alert("Если не работает: блаблабла");

      return(INIT_FAILED);

   }
 
Roman Agafonkin:

Você sabe onde inserir este código? Para que você possa colocá-lo uma vez na tabela, salvá-lo como um modelo e pronto...

tente colocar while() antes dele, esperando pelo login dentro de certos limites. não saiba qual funçãoAccountInfoInteger(ACCOUNT_LOGIN) dá se ainda não estiver logado - desimprima-o e cole-o ao invés de pontos de interrogação.

while (AccountInfoInteger(ACCOUNT_LOGIN)==????) Sleep (100);
 
Igor Zakharov:

Tente enquanto() antes disso, aguardando o login dentro de certos limites. Não sei qual a funçãoAccountInfoInteger(ACCOUNT_LOGIN) que fornece se ainda não estiver logado - imprimir e colar em vez de pontos de interrogação.

Você não pode executar algo longo no OnInit - o terminal pode descarregar o código

no indicador não deve escorregar para o trabalho

não entendo porque o código fonte não funciona - ou seu corretor não tem bons servidores ou a internet é muito lenta - geralmente este código é compartilhado por seus "amigos" em todos os fóruns ))))


Acho que é preciso adicionar uma variável de verificação estática no corpo do indicador, quando um tick vem ele se conectará ao corretor e à autorização, a única coisa que eu daria o primeiro tick ao carregar o gráfico - mas ele pode ser manipulado , a propósito prev_calculado ==0 é um motivo muito bom para verificar a "licença".

 
Comecei a ensinar a minha filha a negociar. Ela tinha esta pergunta: "Entendo se, digamos, compro uma libra, mas não entendo como posso vender uma libra se não a comprei e não a tenho. Para ser honesto, não consegui explicar-lhe claramente, disse algo vago, que era uma transação virtual sem dinheiro e que não era necessário ter estas libras em estoque para vender. Em geral, eu não gostei da minha própria resposta. E qual teria sido a resposta certa para tal pergunta?
 
khorosh:
Eu comecei a ensinar minha filha a negociar. Ela tinha esta pergunta: eu entendo se, digamos, para comprar uma libra, mas não está claro como você pode vender uma libra, se eu não a comprei e não a tenho. Para ser honesto, eu não consegui explicar-lhe claramente, eu disse algo vago, que era uma transação virtual sem dinheiro e que tinha estas libras em estoque para vender, não necessariamente. Em geral, eu não gostei da minha própria resposta. E qual teria sido a resposta certa para tal pergunta?

Você não precisa entender as coisas para ter lucro. Quanto menos você souber,mais fácil você joga. Eu acho que sim.

É legal que ela possa começar a fazer isso tão cedo) No processo, ela encontrará as respostas às perguntas (que ela mesma fará), se houver alguma...
 
onedollarusd:

Você não precisa entender as coisas para ter lucro. Quanto menos você souber, mais fácil você joga. Imho.

Se eu lhe disser que quando o preço tiver baixado uma distância decente e virado, aperte o botão comprar, e vice-versa. Você acha que será suficiente? )

 
Igor Makanu:

você não pode executar algo longo no OnInit - o terminal pode descarregar o código

no indicador não deve funcionar

não entendo porque o código fonte não funciona - ou seu corretor não tem bons servidores ou a internet é muito lenta - geralmente este código é compartilhado por seus "amigos" em todos os fóruns ))))


acho que preciso adicionar uma variável de verificação estática no corpo indicador, quando um tick vem, ele se conectará ao corretor e à autorização; a única coisa que vejo é que o primeiro tick é carregado no gráfico por si só - mas ele pode ser manipulado, a propósito, prev_calculado ==0 é uma boa ocasião para verificar a "licença".

Resolvi o mesmo problema e inseri o seguinte código no início da função OnCalculate:

 if(account_number>0)
 {
   int akk;
   akk=AccountInfoInteger(ACCOUNT_LOGIN);
   if(akk==0)return(0);
   if(akk!=account_number)
   {
     Alert("Неверный номер счёта.");
     int window=ChartWindowFind();
     ChartIndicatorDelete(0,window,MeName);
     return(0);
   }
 }              

account_number é definido com #define (uma variável de visibilidade global também é possível), MeName é o mesmo, mas em geral é o nome curto do indicador.

 
Yurij Kozhevnikov:

Eu resolvi o mesmo problema inserindo este código no início da função OnCalculate:

account_number é definido com #define (você pode usar a variável de visibilidade global), MeName - similarmente, mas em geral é um nome indicador curto.

Sim, você tem um bom exemplo, é sobre isso que estou escrevendo

mas você precisa processar a primeira partida do indicador - a primeira partida pode ou não ser uma conexão, e se a licença não tiver passado, você deve descarregar o indicador de uma vez, como um contador e 2-3 vezes sem licença, então descarregue o indicador