Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 70
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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?
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().
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 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 correto
Não é bem assim.
Você pode usar o prefixo decremento.
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 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?
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. 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.
{
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?