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

 
trader781:

Muito bem, vamos fazer isto.

for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }

certo?

Você também precisa de parênteses encaracolados, caso contrário, somente a primeira linha após() funcionará. Você tem muitos parênteses onde não precisa deles, e depois não há parênteses onde você precisa deles. Isto quebra a lógica do programa, às vezes muito. E o balcão não tem que ser global, mas não é tão importante.

for(i=OrdersTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol()
         && OrderMagicNumber()==Magic && OrderType()<2)
         {
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
         }
}
 
sile:
Ajude-me a escrever a condição: Se a quantidade de fundos disponíveis na conta for inferior a 50% do depósito, então {ação} MT5

De que depósito? Inicial? Ou a partir do equilíbrio atual?

Se comparado com o saldo, então é assim:

if(AccountInfoDouble(ACCOUNT_MARGIN_FREE)/AccountInfoDouble(ACCOUNT_BALANCE)<0.5) {действие}
 
Vitalie Postolache:


Eu pensei que ele queria um mt5.

Tenho uma boa idéia de como levar o contador até o início do ontik e depois trabalhar com isso.

Agora, como posso tirar algo disso no meu caso?

e, além disso, se a matriz for bidimensional e mais (há uma diferença na escrita e na extração)

podemos falar um pouco sobre este ponto?
 
trader781:

Muito bem, vamos fazer isto.

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


certo?

Não, não está certo.

Suas ordens de array[] tem valor zero. Onde você vai escrever os dados? Em uma matriz com tamanho zero? De jeito nenhum. Você deve incrementar o tamanho da matriz pela contagem1+1 - se você incrementar o contador após escrever para a matriz. Normalmente, o contador é incrementado antes de escrever, depois você aumenta o tamanho da matriz pelo tamanho do contador, e então você escreve os valores pelo índice [contagem1-1]. E, como foi corretamente observado acima - você precisa incluir todas as outras ações entre parênteses curvos após verificar as condições.

Por que você está tentando fazer algo sem conhecimentos e idéias elementares? Apenas "para dar sorte"?

 
Olá. Existe um código universal que possa ser inserido no final da descrição de qualquer indicador que permita mudar a TF desse indicador (ou seja, M5 para M1)?
 
Artyom Trishkin:

Não, não é.

Suas ordens de array[] tem valor zero. Onde você vai escrever os dados? Em uma matriz com tamanho zero? De jeito nenhum. Você deve incrementar o tamanho da matriz pela contagem1+1 - se você incrementar o contador após escrever para a matriz. Normalmente, o contador é incrementado antes de escrever, depois você aumenta o tamanho da matriz pelo tamanho do contador, e então você escreve os valores pelo índice [contagem1-1]. E, como foi corretamente observado acima - você precisa colocar todas as outras ações entre parênteses curvos após verificar as condições.

Por que você está tentando fazer algo sem conhecimentos e idéias elementares? Apenas "para dar sorte"?

Não vamos jogar mijo podre e ovos podres na capacidade de alguém aprender material. Sua sugestão para resolver meu problema foi através da forma de construção de uma série de estruturas. Abri livros didáticos e colei juntos como pude entender, e joguei o código aqui para revisão pública para avaliar quão correto tudo isso é. Você não acha que eu vou fazer uma variante ideal de uma só vez, acha?
 
trader781:
Não vamos atirar pintos podres e ovos podres à capacidade de alguém aprender. Sua proposta para resolver meu problema foi através da forma de construção de uma série de estruturas. Abri livros didáticos e colei juntos como pude entender, e joguei o código aqui para revisão pública para avaliar quão correto tudo isso é. Você não acha que eu vou fazer uma variante ideal de uma só vez, acha?
Devo me recusar a ajudá-los depois de tais fantasias selvagens? Eu lhe imploro uma última vez: anote o algoritmo em um pedaço de papel e revise-o com um lápis algumas vezes. Anote os valores e o tamanho da matriz - o que e onde será escrito a cada iteração do laço. Não procure por peças de código que você acha que se encaixam.
Compreender que o ensino é difícil, especialmente quando não se quer realmente aprender.
 
Artyom Trishkin:
Devo ser desencorajado de ajudar depois de uma fantasia tão violenta. Eu lhe imploro uma última vez: anote o algoritmo em um pedaço de papel e revise-o com um lápis algumas vezes. Anote os valores e o tamanho da matriz - o que e onde será escrito a cada iteração do laço. Não procure por peças de código que você acha que se encaixam.
Entenda que o ensino é difícil, especialmente quando uma pessoa não quer realmente aprender.

Artyom, isso é compreensível, mas eu também posso ser compreendido neste caso. Nada funciona e não vai funcionar na versão atual. Tenho escrito por várias páginas sobre a necessidade do próprio comando para puxar o elemento necessário da matriz dada e que não tenho idéia de como deve ser escrito para este caso em particular, por exemplo, o stop loss para a 5ª ordem.

Quanto ao lápis e à folha - o bot já está pronto há um mês e cai perfeitamente em qualquer instrumento, eu só quero modificá-lo adicionando um ramo de média irregular.

 
trader781:

Artyom, isso é compreensível, mas eu também posso ser compreendido neste caso. Nada funciona e não funcionará na variante atual. Tenho escrito durante várias páginas sobre a necessidade de o próprio comando puxar o elemento requerido desta matriz e que não tenho idéia de como ele é escrito para este caso em particular, por exemplo, stoploss para a 5ª ordem.

Não tenho idéia de como escrevê-lo para este caso em particular, por exemplo, para a 5ª encomenda.

Eu não tenho tal comando. Eu tenho que fazer o meu próprio. Isto é - função.
 
Artyom Trishkin:
Não existe tal comando. Você precisa fazer o seu próprio. Isto é - uma função.

OK, então, como eu entendo, temos três funções personalizadas diferentes com o retorno da função certa (se procurarmos três parâmetros diferentes)

ArraySort

então

ArrayBsearch pelo número certo

e então como eu lido com isso?

Exatamente a transição de uma matriz para um elemento de estrutura