Não, o último registro de atividade comercial está no segundo registro.
E isto é correto em termos de prioridade:
2021.05.0510:32:35.896 Trades '160122203': market buy 0.01 EURUSD placed for execution
2021.05.0510:32:35.931 Trades '160122203': order #2249869869 buy 0.01 / 0.01 EURUSD at market done in81.962 ms
2021.05.0510:32:35.931 Trades '160122203': deal #2240398230 buy 0.01 EURUSD at 1.19876 done (based on order #2249869869)
2021.05.0510:32:35.931 Trades '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.198762021.05.0510:32:35.978 Trades '160122203': accepted market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.198762021.05.0510:32:35.978 Trades '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876 placed for execution
2021.05.0510:32:36.009 Trades '160122203': order #2249869870 sell 0.01 / 0.01 EURUSD at market done in77.026 ms
2021.05.0510:32:36.009 Trades '160122203': deal #2240398231 sell 0.01 EURUSD at 1.19876 done (based on order #2249869870)
2021.05.0510:32:36.009 Scripts script Test (EURUSD,M1) removed
Aqui eu voltei à opção sem impressões e novamente resta uma posição após a execução. Acontece que você precisa fazer algum tipo de pausa após a execução dos negócios. Cara, que muleta.
Como assim? É meio que encontrado, mas meio que não está lá?
Eu ainda não cheguei a postar. Publicá-lo-ei dentro de 24 horas.
Qual é a essência ou o princípio da solução?
Ele analisa a correspondência do histórico comercial com o ambiente comercial atual. Neste caso, não há lentidão.
Ele também verifica o resultado da encomenda.
Como resultado, o uso é o seguinte: IsSync() retorna falso - o ambiente comercial no Terminal é torto, caso contrário, podemos proceder como de costume.
Acrescentadas impressões digitais. Agora restam duas posições, como esperado:
Resultado:
Acrescentar Comércio. ResultadoRetcodeDescrição()
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.Print(Trade.ResultRetcodeDescription());printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
#define PRINT(A) Print(#A + " = " + (string)(A))
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
PRINT(Trade.ResultRetcodeDescription());
PRINT(Trade.ResultDeal());
PRINT(Trade.ResultOrder());
PRINT(Trade.ResultComment());
printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
Resultado:
2021.05.0511:36:14.566 Test (EURUSD,M1) Перед открытием. PositionsTotal: 0, OrdersTotal: 02021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultRetcodeDescription() = done at 0.000002021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultDeal() = 02021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultOrder() = 22498746452021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultComment() = Request executed
2021.05.0511:36:14.646 Test (EURUSD,M1) После открытия. PositionsTotal: 2, OrdersTotal: 12021.05.0511:36:14.646 Test (EURUSD,M1) Выход. PostionsTotal: 2
Não, o último registro de atividade comercial está no segundo registro.
E isto é correto em termos de prioridade:
Aqui eu voltei à opção sem impressões e novamente resta uma posição após a execução. Acontece que você precisa fazer algum tipo de pausa após a execução dos negócios. Cara, que muleta.
Bem, quem vai atualizá-lo? ))
mas quando há uma posição aberta - o roteiro a fecha e não faz mais nada
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Além disso, se eu tentar abrir uma posição, o roteiro a fecha instantaneamente.
conseguiu escrever IsSynchronized(). O código é um pouco pesado. Eu ainda não decidi de que forma postar.
Como funciona? É uma espécie de achado, mas uma espécie de ausência? Qual é a essência ou o princípio da solução?
Mas quando há uma posição aberta, o roteiro a fecha e não faz mais nada.
Nem todos os servidores irão reproduzir a abertura de duas posições. No seu caso, é o terceiro lado (um lado - duas posições, o outro - uma posição).
E isso está certo em termos de seqüenciamento:
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
O Grande e Poderoso MT4 Forever (ou como escolher a estratégia de migração)
Ihor Herasko, 2021.05.05 09:35
E está tudo bem aqui em termos de pedidos:
As linhas destacadas confirmam a seqüência.
PositionsTotal = 1 - envia uma ordem de fechamento.
O fechamento ocorre após a conclusão da execução do roteiro. O cache de impressão está um pouco distorcido.
Como assim? É meio que encontrado, mas meio que não está lá?
Eu ainda não cheguei a postar. Publicá-lo-ei dentro de 24 horas.
Qual é a essência ou o princípio da solução?
Ele analisa a correspondência do histórico comercial com o ambiente comercial atual. Neste caso, não há lentidão.
Ele também verifica o resultado da encomenda.
Como resultado, o uso é o seguinte: IsSync() retorna falso - o ambiente comercial no Terminal é torto, caso contrário, podemos proceder como de costume.
Acrescentadas impressões digitais. Agora restam duas posições, como esperado:
Resultado:
Acrescentar Comércio. ResultadoRetcodeDescrição()
Também ResultDeal / ResultOrder / ResultCommentar e Encomendar.Estado
Certamente haverá uma resposta lá
EstadoAcrescentar Comércio. ResultadoRetcodeDescrição()
E também ResultDeal / ResultOrder / ResultCommentar e Encomendar.Estado
Certamente haverá uma resposta lá
EstadoFeito:
Resultado:
Acrescentar Comércio. ResultadoRetcodeDescrição()
E também ResultDeal / ResultOrder / ResultCommentar e Encomendar.Estado
Certamente, haverá uma resposta lá.
EstadoEste não é definitivamente o caso, pois a condição para enviar uma ordem de mercado para abrir uma posição é PositionsTotal == OrdensTotal == 0.