Características úteis da KimIV - página 126

 
khorosh:
Coloque-se em sua posição. A vida em uma terra estrangeira, longe de sua pátria, não vai embora. Estou irritável, irritado comigo mesmo por ter cometido um erro irreparável ao me tornar um trabalhador convidado).
A verificação de erros está funcionando corretamente, mas até agora nenhum erro, apesar de muitas tentativas de dificultar o funcionamento normal. Ter proteção suficiente contra todas as contingências possíveis. Mais uma vez, o futuro vai se mostrar!
 
artmedia70:

Eu deliberadamente fiz se(OrderSelect(i,SELECT_BY_POS)) um bloco separado. A fim de retornar o valor do erro durante a depuração. senão {// escreva o erro de seleção como quiser e volte dele, por exemplo VAZIO}.

E pensemos numa situação em que há um erro de seleção de uma ordem para ser colocada no mercado. Vamos discutir isso. Eu ainda não encontrei nenhum.

Roger:

E indicar pelo menos um motivo quando um loop de ordem criado corretamente pode retornar "falso".

Oops, não percebi que Artem já tinha perguntado, oops. E ainda.

Que diferença isso faz?

No caso geral, pode retornar. Então e se a observação de algumas condições ou mesmo um conjunto de condições diferentes mostrar que não retorna falso?

Não conhecemos os detalhes de implementação desta função e a documentação não fornece nenhuma "suposição" a respeito dela. E se, no próximo conjunto de condições no próximo corretor, a função de repente retornar falso?

Continuarei respondendo à pergunta colocada sobre o motivo/situação, porque é fácil: o motivo poderia ser um erro de implementação desta função feito pela equipe de desenvolvimento quando a próxima versão da MT foi lançada. Espero que este seja um evento provável o suficiente para ser considerado seriamente...

Suponha que por causa deste hipotético bug, a função começou aleatoriamente, mas, em média, apenas para cada 5 pedidos, para retornar falso.

Normalmente não se pode pensar antecipadamente em coisas que não se sabe. Portanto, não faz muito sentido perguntar do que pode ser devido. Quando isso acontece, então você pode facilmente explicar o porquê.

Mas não saber o que pode acontecer no futuro não impede que você se defenda contra isso. Pode acontecer que alguns algoritmos de alto nível causem muitos problemas por causa de um valor falso recebido. Eles não saberão que o valor é falso.

Mas se souberem que não há valor e se houver, é verdade, eles não farão bagunça se não houver erros próprios. E é por isso que as informações sobre a impossibilidade de calcular o valor devem ser dadas não apenas em modo de depuração, mas também em modo de combate.

 

É possível carregar dados externos no indicador, digamos de um arquivo de texto?

Por exemplo, existe um preço diário e ele precisa construir uma linha em qualquer tabela de tempo?

DATA Preço

04.12.2014 100.00

03.12.2014 101.12

02.12.2014 102.45

01.12.2014 103.23

28.11.2014 102.43

27.11.2014 101.90

 
Boas características, graças a Igor por seu trabalho árduo.
 
KimIV:

Exemplos de utilização da função OpenPosition().

1. Comprar 0,1 lote do instrumento atual

2. Vender 0,2 lotes de EURUSD

3. Vender 0,12 lotes de USDCAD com uma parada de 20 pips

4. Comprar 0,15 lote de USDJPY com 40 pips stop

5. Vender 0,1 lote de GBPJPY com parada 23 e takeaway 44 pips

Em anexo está o roteiro para o teste da função OpenPosition(). Os 4 primeiros exemplos são comentados.
Não sei se você vai responder ou não. Estou aqui sentado, não sei como fazer minha EA em várias moedas!
 
logut:
Não sei se você vai me responder ou não. Estou aqui sentado, estou perplexo, não sei como fazer minha EA em várias moedas!
Dmitry, eu geralmente escrevo toda a lógica em um pedaço de papel. O que fazer e quando, e com o quê.
 
Roger:

E me dê uma razão pela qual um loop de ordem criado corretamente poderia retornar "falso".

Oops, não percebi que Artem já tinha perguntado, oops. E ainda.

Fácil!

Após outra atualização, o terminal foi recarregado e só começou a mostrar as ordens do último dia. Não mostra o histórico de pedidos. A função deve retornar algo - como nenhum histórico.

O corretor eliminou algumas ordens.

Há um buraco na memória principal. Sua memória falhou e a função está ocupando uma célula de memória de lixo. Ele pode aparecer no monitor. Pode ou não aparecer. Pode haver outros problemas de hardware.

O terminal é reinicializado e "perde" a comunicação com o servidor. Eu costumava usar Mt3 usando servidor proxy. Eu costumava ter internet dialup com largura de banda e tempo muito limitados e a qualidade da internet era horrível. Vejo carrapatos chegando e o gráfico está em movimento. Quando tentei abrir uma ordem o terminal tentou escrever "sem conexão com o servidor".

Eu me deparei com um problema no MT4 e ele ainda existe: eu tenho um carrapato e uma tela preta (vazia) do gráfico. Se eu puxar o gráfico com meu mouse ou o robô aparecer com um erro, eu receberei uma mensagem de erro e o robô irá travar. Se eu puxar a tabela com o mouse ou um novo tick vier, tudo é normal. Portanto, ao dividir, eu primeiro verifico pelo que dividir e se não for igual a zero, eu vou em frente!

 

Caro KimIV, estou usando sua função para fechar todas as posições quando um certo lucro foi alcançado e encontrei uma situação em que uma ordem pendente desencadeou outra posição que não foi fechada. Agora implementei uma verificação adicional de tal situação e repeti a chamada de sua função. Você acha que esta melhoria deve ser implementada dentro da função após o término do ciclo principal de fechamento?

Estas são funções ClosePosBySortLots() e ClosePositions();

 

Há códigos de função para excluir pedidos pendentes tanto para testes on-line quanto para testes de histórico - https://forum.mql4.com/ru/38949#434195

você pode explicar a diferença entre testes e on-line?

 
As funções isCloseLastPosByStop() e isCloseLastPosByTake() nem sempre funcionam corretamente, porque o preço de fechamento do pedido e Stop Loss (TakeProfit) nem sempre coincidem. Eu a refiz no meu. Substituí a condição de igualdade destes valores pela condição: o valor absoluto da diferença destes valores (entre aspas de 5 bits) deve ser inferior a 5*Ponto.