[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 227

 
Neo333:
Olá, eis o problema: a EA estabelece ordens de limite pendentes, depois o preço se move e as ordens se tornam ordens de mercado. Tudo funciona, mas em algumas ordens há uma falha absolutamente obscura, já que todas as ordens são definidas através de uma certa constante fixa "K", a distância entre elas deve ser sempre uma constante (Rn+1 = Rn + "K"). Entretanto, não temos sorte; a ordem está aberta, o preço é indicado e tudo é verificado, mas a distância da ordem anterior à seguinte não é igual a "K". Se verificarmos os resultados das operações aritméticas com os preços, ou seja, se apenas subtrairmos e verificarmos o resultado, ele é igual a "K"; entretanto a comparação lógica === ainda mostra falso e isso leva a EA a abrir constantemente ordens a esse preço e assim "pensar" que não há ordem ali. Desculpe se é muito longo, só queria explicar com mais detalhes. Honestamente, eu realmente não entendo o que fazer :(
Se você comparar por ==, então use NormalizeDouble, em geral o melhor MathAbs(Price1-Price2)<delta
 
VladimirR:

Muito obrigado! Mas há este TestGenerator 2011.09.30 21:26:49: erro de dados incomparável (limite de volume 13634 em 2011.07.19 20:00 excedido)

Tanto quanto entendi, esta mensagem não diz respeito ao Conselheiro Especialista, mas ainda gostaria de saber como entendê-la?



Inconsistência na história do cronograma. https://www.mql5.com/ru/forum/108760
 
sergeev:

Ajude a corrigir a função


73
Eugene1 30.09.2011 16:19

Estou tentando escrever uma função que determina o preço de fechamento do último pedido (no horário mais próximo ao atual)

Eu o escrevo assim:


Mas

do

uble PriceCloseLastPos(string smb = "", int cmd = -1, int mMin = -1, int mMax = -1) {
int ticketDateTime=0;
int orderTicket=-1;
duplo fechamentoPreço = 0;
int ordTotal = OrdersTotal();
se (smb == "0") smb = Symbol();
para (int i = 0; i < ordTotal; i++) {
se (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == smb || smb == "") {
if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
if (cmd < OP_BUY || OrderType() == cmd) {
if (mMin < 0 ||| (OrderMagicNumber() >= mMin && OrderMagicNumber() <= mMax)) {
se (ticketDateTime < OrderCloseTime()) {
ticketDateTime = OrderCloseTime();
orderTicket = OrderTicket();
closePrice = OrderClosePrice();
}
}
}
}
}
}
}
if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY );
retorno(fecharPreço);
}

Mas por alguma razão, a função retorna os dados da primeira encomenda que foi aberta no testador.

Na verdade, este é meu objetivo intermediário. Eu queria escrever uma função que desse o último preço de fechamento de um pedido parcial (não para o volume total do lote). Mas não sei como me incomodar...

int ordTotal = OrdersTotal();

Em vez disso...

int ordTotal = OrdersHistoryTotal();

... Próximo ...

if(orderTicket > -1) OrderSelect(orderTicket, SELECT_BY_TICKET, MODE_HISTORY );

Aqui, eu vejo que seu conhecimento não é muito bom. Ao selecionar um pedido por bilhete, o parâmetro do pool é ignorado. Ou seja, é inútil escrever MODE_HISTORY - este parâmetro se refere apenas à seleção por índice.

Se um pedido foi selecionado por bilhete, você precisa verificar o horário de fechamento para garantir que ele foi selecionado a partir da lista de pedidos fechados. Deve ser maior que zero - somente as posições fechadas têm este parâmetro >0.

 
No período de 5 minutos no terminal comercial MT4, o histórico não é exibido. Isto pode ser resolvido?
 
rosman:
No período de 5 minutos no terminal comercial MT4, o histórico não é exibido. Isto pode ser resolvido?
Peço desculpas pela pergunta estúpida. Eu quis dizer que a história antes de novembro de 2010 não é exibida :)
 
rosman:
Peço desculpas pela pergunta grosseira. Eu quis dizer que a história antes de novembro de 2010 não é exibida :)

Portanto, não está lá. Você também pode esclarecer. Tente fazer mais barras na tabela em configurações MT4.

Resolve-se baixando ou comprando um histórico mais longo.

 
Zhunko:

Então ela não existe. Você também pode esclarecer. Tente fazer mais barras na tabela em configurações MT4.

Isto pode ser resolvido baixando ou comprando um histórico mais longo.

Serviço>Configurações>Abrilho de cartas > onúmero máximo de barras na janela era 65 000 --> mudou para 100 000 ou mais, ainda apenas novembro de 2010 é o mais recente. O arquivo de citações para este instrumento e o cronograma está totalmente carregado - até novembro de 1999
 
Qual é o número máximo de barras na história? Talvez a história já tenha sido aparada.
 
Zhunko:
Qual é o número máximo de barras na história? Talvez a história já tenha sido aparada.
Vale 10.000.000.
 
Faça o upload do arquivo. Eu vou dar uma olhada na minha.