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

 
LSM:
Eu editei minha pergunta e acrescentei o código. Há um loop em andamento. Não está claro o que vou conseguir quando isso acontecer no loop.
Tudo está claro aí,
por exemplo, no ciclo, o indicador contou 15. Vela de 5 minutos
e tirou o valor dos 15+1. A vela de 16º 15 minutos.


 
LSM:

Responderei minha própria pergunta caso alguém precise dela).

É isso mesmo.
 

Boa tarde.

Por favor, me aconselhem, tenho uma idéia, mas de que lado abordar, eu "ainda não entendo".

Tenho um indicador, abri acesso a ele para uma certa lista de números de conta de um arquivo CSV no servidor.

É tecnicamente possível escrever uma mensagem para uma conta específica a partir da lista e exibi-la no gráfico para este usuário específico.

Por exemplo, especifique o número da conta no CSV e escreva o texto como "Olá..." e o usuário o verá no gráfico? Se é de todo possível, em que direção "cavar"? Obrigado...

 

Boa tarde, você poderia me ajudar a entender alguma sintaxe mql4? Eu tenho uma idéia para escrever uma EA que segue a tendência que, por exemplo, entraria numa posição longa com um stop de 150 pips da ordem aberta e teria lucro de 50 e então se o preço atingisse tp uma nova compra seria aberta com stop 150 e teria lucro de 50 e se fosse derrotada por stop loss uma venda seria realizada com a mesma relação risco/lucro que para posições longas. Eu tentei escrever um código com tal lógica, mas ele falhou porque o Expert Advisor não faz nenhum negócio durante os testes.

double b, difference;
int ticket;

int OnInit()
{
   b=Bid;
   return(b);
}

void OnTick()
{
   difference = Bid-b;
   if(OrdersTotal()==0)
   {
      if(difference==150*Point)
      {
         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-150*Point,Ask+50*Point,0);
         if(difference==0){b=Bid+150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==200*Point){b=Bid-150*Point;}

      if(difference==-150*Point)
      {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+150*Point,Ask-50*Point,0);
         if(difference==0){b=Bid-150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==-200*Point){b=Bid+150*Point;}
   }
}
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и...
 
MosheDayan:

Boa tarde.

Por favor, me aconselhem, tenho uma idéia, mas de que lado abordar, eu "ainda não entendo".

Tenho um indicador, abri acesso a ele para uma certa lista de números de conta de um arquivo CSV no servidor.

É tecnicamente possível escrever uma mensagem para uma conta específica a partir da lista e exibi-la no gráfico para este usuário específico.

Por exemplo, especifique o número da conta no CSV e escreva o texto como "Olá..." e o usuário o verá no gráfico? Se é de todo possível, em que direção "cavar"? Obrigado...

Enviar ao servidor um pós-pedido com o número de conta

IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN)

No servidor, verifique o número de entrada com todas as linhas no arquivo CSV, e se houver uma correspondência, então a partir desta linha no arquivo, envie uma resposta para o terminal. Resta apenas ler a resposta do servidor no terminal e exibi-la no gráfico.

Em geral, tais coisas são mais fáceis de implementar no MySQL do que em arquivo.

 
Maxim235v34:
E sim, se você não se importa, sugira uma forma de reduzir o espaçamento entre linhas neste fórum.

Escreva primeiro em um arquivo de texto (em bloco de notas) - depois copie através da área de transferência. Você vai conseguir assim

double b, difference;
int ticket;

int OnInit()
{
   b=Bid;
   return(b);
}

void OnTick()
{
   difference = Bid-b;
   if(OrdersTotal()==0)
   {
      if(difference==150*Point)
      {
         ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-150*Point,Ask+50*Point,0);
         if(difference==0){b=Bid+150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==200*Point){b=Bid-150*Point;}

      if(difference==-150*Point)
      {
         ticket=OrderSend(Symbol(),OP_SELL,1,Bid,0,Bid+150*Point,Ask-50*Point,0);
         if(difference==0){b=Bid-150*Point;}
            if(ticket<0)
            {
               Print("lose");
            }
      }
      if(difference==-200*Point){b=Bid+150*Point;}
   }
}
leia sobre a função OnInit() - coloque o cursor sobre ela e pressione F1. A palavra int está na frente - portanto esta função retorna um valor inteiro. Você está tentando retornar um valor do tipo duplo. O resultado da função OnInit() é analisado pelo subsistema de tempo de execução do terminal e dificilmente necessita deste valor.
 
LRA:

Escreva primeiro em um arquivo de texto (em bloco de notas) - depois copie através da área de transferência. É assim

Obrigado. É bom saber.

Leia sobre a função OnInit() - coloque o cursor sobre ela e pressione F1. A palavra int está na frente - portanto esta função retorna um valor inteiro. Você está tentando retornar um valor do tipo duplo. O resultado do OnInit() é analisado pelo subsistema de tempo de execução do terminal e ele dificilmente necessita deste valor.
Em seguida, que tipo de manipulador de eventos deve ser usado para implementar isto - para
para fixar o valor do preço no início da operação do programa, em relação ao qual os cálculos futuros serão realizados?
Tentei remover tudo o que estava no OnInit e coloquei o seguinte código no OnTick vazio logo no início, adicionando a variável varStart
if(varStart==0)
{
b=Licit;
varStart=1;
}
O resultado é inalterado.
 

Há uma função com um ponteiro:


  TickReturn *returntick(int period, int timeposition)
   {
      TickReturn *returntick = new TickReturn();
      MqlRates rates[];
      MqlTick last_tick;
      
      if(SymbolInfoTick(symbol,last_tick)){}
      else Print("SymbolInfoTick() failed, error = ",GetLastError());
      
      //int timeposition=0;
      ArraySetAsSeries(rates,true);
      ArrayResize(rates,1);
      int copied=CopyRates(symbol,period,timeposition,1,rates);
      
      returntick.curtime = rates[0].time;
      returntick.open = rates[0].open;
      returntick.close = rates[0].close;
      returntick.high = rates[0].high;
      returntick.low = rates[0].low;
      returntick.priceask = last_tick.ask;
      returntick.pricebid = last_tick.bid;
      
      return(returntick);

   } 

Eu ainda o chamo em outra função:


string timeis = returntick(period, 1).curtime;

Como limpar a memória por trás disso?

Ao apagar (TickReturn); recebo um operando de erro, exceto.

 
hamsteruser:

Há uma função com um ponteiro:


Eu ainda o chamo em outra função:


Como limpar a memória por trás disso?

Ao apagar (TickReturn); recebo um operando de erro, exceto.


Se eu li seu código corretamente, o TickReturn é uma classe. Você criou um ponteiro para uma variável do tipo desta classe. E você apaga... a própria classe? É preciso destruir o ponteiro e garantir que ele exista e seja dinâmico.

 
Алексей Барбашин:

Se eu li seu código corretamente, o TickReturn é uma classe. Você criou um ponteiro para uma variável desse tipo, mas está destruindo... ...a própria classe? Você deve destruir o ponteiro e certificar-se de que ele exista e seja dinâmico.


O *retorntick também não é destrutível. Estou apenas confuso com a produção do terminal comercial. Está me dizendo que não está apagando a memória.

Razão: