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

 
wishmast:

Por favor, diga-me porque a função OrdersTotal() escreverá -1 ao procurar por pedidos.

Exemplo: para (i=OrdensTotal()-1 ;i>=0; i--)

por que não apenas OrdensTotal()?

A contagem dos pedidos nesta função começa a partir de 0 ou 1? Isto é, se houver uma ordem, a ordemTotal() é igual a 0 ou 1?

contando a partir de zero
 
wishmast:

Por favor, diga-me porque a função OrdersTotal() escreverá -1 ao procurar por pedidos.

Exemplo: para (i=OrdensTotal()-1 ;i>=0; i--)

por que não apenas OrdensTotal()?

A contagem dos pedidos nesta função começa a partir de 0 ou 1? Isto é, se houver uma ordem, a ordemTotal() é igual a 0 ou 1?

OOrderTotal() mostra a quantidade, ou seja, se houver uma ordem, entãoo OrderTotal() é igual a 1, mas na lista de ordens, o relatório começa com 0

0 - primeira encomenda

1 - segunda ordem

2 - terceiro

e assim por diante.

Portanto, se iniciarmos a busca a partir do final da lista, temos desubtrair uma do número total dePedidosTotal().

 
Sergey Gritsay:

OrdensTotal() mostra a quantidade, ou seja, se houver uma ordem, entãoOrdensTotal() será uma, mas na lista de ordens o relatório começa de zero

0 - primeira encomenda

1 - segunda ordem

2 - terceiro

e assim por diante.

Portanto, se iniciarmos a busca a partir do final da lista, temos desubtrair uma do número total dePedidosTotal().

Mas se não subtrairmos uma da primeira expressão, não será um erro, porque se tivermos uma ordem, duas iterações acontecerão. A menos que não precisemos fazer duas iterações quando podemos fazer tudo o que precisamos em uma, então -1, certo?
 
wishmast:
Mas se a primeira expressão não subtrair uma, não será um erro, se tivermos uma ordem, duas iterações acontecerão. A menos que não haja necessidade de fazer duas iterações quando tudo o que precisamos pode ser feito em uma, então -1, certo?
Sim, isso mesmo.
 
Sergey Gritsay:
Sim correto

Não é bem assim.

Você pode usar o prefixo decremento.

for(int i = OrdersTotal(); i >= 0; --i)
 
trader781:
Já que temos uma pilha de pedidos, por que não podemos simplesmente retirar aquele que precisamos? (Os certos) e fazer com eles o que queremos? Por exemplo, pedir (i-4)
Porque só funcionará no testador MT4. Ou quando se negocia com apenas um símbolo e apenas um esta EA.
 
Vitalie Postolache:
Porque isto só funcionará no testador MT4. Ou quando se negocia com apenas um símbolo e apenas um esta EA.

Se você pensar nisso, a EA é a mesma para cada par, apenas o saldo da conta é comum (a troca será a última)

o filtro vai para todos os pedidos que satisfazem as condições do mercado - aberto pelo Expert Advisor - se o símbolo coincidir

o que está errado?

 
trader781:

Se você pensar nisso, a EA é a mesma para cada par, apenas o saldo da conta é comum (a troca será a última)

o filtro vai para todos os pedidos que satisfazem a condição de mercado - aberto pela EA - se a simulação corresponder

o que está errado?

Bem, já foi explicado a você acima o que está errado. Podemos contar pedidos como nossos apenas e tomar índices de matriz por quantidade total - obteremos uma matriz com células vazias. E para que serve isso? E se a matriz não estivesse vazia, os campos "desnecessários" conterão lixo desnecessário que levará a erros, e estamos falando de dinheiro.
 
Vitalie Postolache:
Bem, já foi explicado a você acima o que está errado. As encomendas contam apenas as suas próprias e levam os índices de matriz para o número total - você recebe uma matriz com células vazias. E para que serve isso? E se a matriz não estivesse vazia, os campos "desnecessários" conterão lixo desnecessário que levará a erros, e estamos falando de dinheiro.

OK, é assim que funciona.

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?

 
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
Razão: