isto funciona bem - (dependendo de qual finalidade!?)
#include <Trade\Trade.mqh>
CTrade Trade;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---int total=PositionsTotal();
int Ordertotal=OrdersTotal();
while(!IsStopped() && (total <= 1)) // Закончим, когда появится более одной позиции.if(total == 1)
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.elseif(Ordertotal!=0)
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
}
//+------------------------------------------------------------------+
Acho que as duas posições estão abertas e fechadas. Não faria mal tentar obter os tipos destas duas posições. Se forem dirigidas de maneira diferente, isso confirmará minhas suspeitas.
Bem, obtenha o status desta ordem.se o bilhete for conhecido.
O comércio fracassou, o preço de execução é 0.
Estrutura do resultado da solicitação comercial (MqlTradeResult)
Em resposta a uma solicitação comercial, o servidor comercial retorna dados contendo o resultado do processamento da solicitação comercial como uma estrutura especial predefinida MqlTradeResult.
structMqlTradeResult
{
uint retcode; // Код результата операцииulong deal; // Тикет сделки, если она совершенаulong order; // Тикет ордера, если он выставленdouble volume; // Объем сделки, подтверждённый брокеромdouble price; // Цена в сделке, подтверждённая брокеромdouble bid; // Текущая рыночная цена предложения (цены реквота)double ask; // Текущая рыночная цена спроса (цены реквота)string comment; // Комментарий брокера к операции (по умолчанию заполняется расшифровкой кода возврата торгового сервера)uint request_id; // Идентификатор запроса, устанавливается терминалом при отправке uint retcode_external; // Код ответа внешней торговой системы
};
Assim, obtenha o status desta ordem. Se o bilhete for conhecido.
O comércio fracassou, o preço de execução é 0.
O problema é esse: já passou. Quando o script termina a execução, uma ou duas posições são deixadas penduradas (dependendo de quantas impressões você insere no código).
Código:
#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());
if (OrderSelect(Trade.ResultOrder()))
PRINT(OrderGetInteger(ORDER_STATE));
printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
Resultado:
2021.05.0514:25:14.738 Test (EURUSD,M1) Перед открытием. PositionsTotal: 0, OrdersTotal: 02021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultRetcodeDescription() = done at 0.000002021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultDeal() = 02021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultOrder() = 22498886812021.05.0514:25:14.821 Test (EURUSD,M1) Trade.ResultComment() = Request executed
2021.05.0514:25:14.821 Test (EURUSD,M1) EnumToString(ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE))) = ORDER_STATE_PLACED2021.05.0514:25:14.821 Test (EURUSD,M1) После открытия. PositionsTotal: 1, OrdersTotal: 12021.05.0514:25:14.899 Test (EURUSD,M1) Закрытие, т. к. PositionsTotal() равно 12021.05.0514:25:14.899 Test (EURUSD,M1) Выход. PostionsTotal: 2
Acho que as duas posições estão abertas e fechadas. Também ajudaria a tentar obter os tipos dessas duas posições. Se forem dirigidas de maneira diferente, isso confirmaria minhas suspeitas.
isto funciona bem - (dependendo de qual finalidade!?)
que funciona bem - (dependendo de qual finalidade!?)
Não se envolva. Eles têm lá um CD especial que constrói todo tipo de intrigas para capturar os bugs MT.
Um CD especial que constrói todo tipo de intrigas para capturar os bugs MT.
A maioria dos corretores trabalha de acordo com o mesmo esquema: Result.deal == 0.
Por exemplo, a Signals é a corretora mais popular para o escalpe.
Entre corretores conceituados é bastante difícil encontrar onde a MT5 trabalha de acordo com um esquema diferente.
isto funciona bem - (dependendo de qual finalidade!?)
A maioria dos corretores trabalha de acordo com o mesmo esquema: Result.deal == 0.
Os sinais, por exemplo, é o corretor mais popular para o escalpe.
Entre os corretores conhecidos, é bastante difícil encontrar onde a MT5 trabalha de acordo com um esquema diferente.
Não sei que tipo de escalpelização funciona tanto que não se tem tempo para fechar uma posição.
Se você não se importa, ainda tente adicionar a verificação do número de posições
Acho que as duas posições estão abertas e fechadas. Não faria mal tentar obter os tipos destas duas posições. Se forem dirigidas de maneira diferente, isso confirmará minhas suspeitas.
Feito:
Resultado:
Bem, obtenha o status desta ordem.se o bilhete for conhecido.
O comércio fracassou, o preço de execução é 0.
Estrutura do resultado da solicitação comercial (MqlTradeResult)
Em resposta a uma solicitação comercial, o servidor comercial retorna dados contendo o resultado do processamento da solicitação comercial como uma estrutura especial predefinida MqlTradeResult.
Assim, obtenha o status desta ordem. Se o bilhete for conhecido.
O comércio fracassou, o preço de execução é 0.
O problema é esse: já passou. Quando o script termina a execução, uma ou duas posições são deixadas penduradas (dependendo de quantas impressões você insere no código).
Código:
Resultado:
Não sei que tipo de escalpe funciona tão duro que não se pode fechar uma posição a tempo...
Tudo está a seu tempo. Apenas uma característica arquitetônica do MT5.
Se você não se importa, tente adicionar a verificação do número de posições
Esta verificação está presente no código fonte.
Acho que as duas posições estão abertas e fechadas. Também ajudaria a tentar obter os tipos dessas duas posições. Se forem dirigidas de maneira diferente, isso confirmaria minhas suspeitas.
Não existe uma posição de fechamento.
Ainda não tenho tempo de afixar. Publicá-lo-ei dentro de 24 horas.
Não funcionou, eu encontrei problemas.
Não deu certo, encontrou problemas.
Aguardamos ansiosamente por isso. Se precisar de alguma ajuda, por favor escreva.