Aparentemente, compreendi mal a situação comercial.
A forma como a imaginei: a ordem de limite pendente foi executada por vários ofícios. Todo este tempo estava pendurado em ordens ao vivo e o campo ORDER_TIME_SETUP não era uma constante. Após a última troca, entrou na história. Nesse momento, a ORDER_TIME_SETUP tornou-se uma constante.
Ou não foi?
A ORDER_TIME_SETUP é sempre uma constante. Quando entrou para a história - ORDER_TIME_DONE apareceu.
Uma transacção CloseBy gera duas transacções. O swap da primeira (primeira posição em CloseBy) transacção contém a soma dos swaps de ambas as posições. A troca da segunda transacção é zero.
Se o encerramento parcial da posição for feito via CloseBy, então a parte restante da posição aberta é privada de swap - é zerada.
// Демонстрация работы со свопами во время частичного закрытия через CloseBy.#define REPORT_TESTER // В тестере будут автоматически записываться отчеты#define REPORT_BROWSER // Создание отчета с запуском браузера - требует разрешения DLL.#include <Report.mqh> // https://www.mql5.com/ru/code/18801#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
voidOnTick()
{
staticbool FirstRun = true;
if (FirstRun)
{
if (!OrderSelect(0, SELECT_BY_POS))
FirstRun = OrderSend(_Symbol, OP_BUY, 100, Ask, 0, 0, 0);
elseif (OrderSwap())
{
const TICKET_TYPE Ticket = OrderTicket();
// FirstRun = !(OrderCloseBy(OrderSend(_Symbol, OP_SELL, 0.01, OrderClosePrice(),0, 0, 0), Ticket) &&
FirstRun = !(OrderCloseBy(Ticket, OrderSend(_Symbol, OP_SELL, 0.01, OrderClosePrice(),0, 0, 0)) &&
OrderSelect(0, SELECT_BY_POS) && OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0));
}
}
}
Resultado.
Portanto, pode muito bem haver uma enorme troca na posição mais pequena que nunca passou por um capotamento. E troca zero por uma posição grande que tenha rolado.
Uma transacção CloseBy gera duas transacções. O swap da primeira (primeira posição em CloseBy) transacção contém a soma dos swaps de ambas as posições. A troca da segunda transacção é zero.
Se o encerramento parcial de uma posição for feito via CloseBy, a parte restante da posição aberta fica privada de swap - zerada.
...
Portanto, pode muito bem haver uma enorme troca numa posição mínima que nunca passou por um capotamento. E troca zero sobre uma posição grande que tenha rolado.
Incrível!
Será devido a arredondamentos (para não perder ou acrescentar um cêntimo)?
Ou é apenas uma operação raramente utilizada, por isso não importa?
Aparentemente, compreendi mal a situação comercial.
A forma como a imaginei: a ordem de limite pendente foi executada por vários ofícios. Todo este tempo estava pendurado em ordens ao vivo e o campo ORDER_TIME_SETUP não era uma constante. Após a última troca, entrou na história. Nesse momento, a ORDER_TIME_SETUP tornou-se uma constante.
Ou não foi?
A ORDER_TIME_SETUP é sempre uma constante. Quando entrou para a história - ORDER_TIME_DONE apareceu.
A ORDER_TIME_SETUP é sempre uma constante. Quando foi atingido na história - ORDER_TIME_DONE apareceu.
Aqui estou agora a definir o limite do atraso. Depois mudo-o à mão e o guião e a ORDER_TIME_SETUP muda.
O que é que estou a fazer mal?
Já publicou no passado sobre casos semelhantes:
https://www.mql5.com/ru/forum/170952/page170#comment_15824249
https://www.mql5.com/ru/forum/170952/page172#comment_15829154
Aqui estou eu agora a definir um limitador atrasado. Depois mudo-o manualmente e o guião e a ORDER_TIME_SETUP mudam.
O que é que estou a fazer mal?
Não altera o tempo definido.
Já publicou no passado sobre casos semelhantes:
https://www.mql5.com/ru/forum/170952/page170#comment_15824249
https://www.mql5.com/ru/forum/170952/page172#comment_15829154
De facto, já o fiz. Mas não me consegui lembrar de todo. Acho que é um insecto.
Não sei o que vai acontecer com a execução parcial repetida.
Agora sei - neste corretor (estou inclinado para um bug no seu software) não vai mudar mais.
Por vezes é útil saber com que frequência os tiques são transmitidos.
Uma transacção CloseBy gera duas transacções. O swap da primeira (primeira posição em CloseBy) transacção contém a soma dos swaps de ambas as posições. A troca da segunda transacção é zero.
Se o encerramento parcial da posição for feito via CloseBy, então a parte restante da posição aberta é privada de swap - é zerada.
Resultado.
Portanto, pode muito bem haver uma enorme troca na posição mais pequena que nunca passou por um capotamento. E troca zero por uma posição grande que tenha rolado.
Cálculo do número de capotamentos (não a opção mais rápida).
Exemplo de utilização.
Resultado.
Uma transacção CloseBy gera duas transacções. O swap da primeira (primeira posição em CloseBy) transacção contém a soma dos swaps de ambas as posições. A troca da segunda transacção é zero.
Se o encerramento parcial de uma posição for feito via CloseBy, a parte restante da posição aberta fica privada de swap - zerada.
...
Portanto, pode muito bem haver uma enorme troca numa posição mínima que nunca passou por um capotamento. E troca zero sobre uma posição grande que tenha rolado.
Incrível!
Será devido a arredondamentos (para não perder ou acrescentar um cêntimo)?
Ou é apenas uma operação raramente utilizada, por isso não importa?
Incrível!
Será devido a arredondamentos (para não perder ou acrescentar um cêntimo)?
Definitivamente não, uma vez que os encerramentos parciais (OrderClose não OrderLots completos) irão drenar a troca em conformidade.
Ou é apenas uma operação raramente utilizada, por isso não importa?
Não creio que se tenha pensado muito nos cenários.