Funciona incorretamente no mt5 em comparação com o mt4. Ele abre uma transação e a fecha imediatamente.
Qual pode ser o problema?
Analisei rapidamente o código. É estranho que no MT4 essas condições tenham sido escritas
if(!OrderSend(symbol_,type_,LotNormalize(lot_),price_,slip,0,0,"C4F"+IntegerToString(ticket_))) Print("Error: ",GetLastError()," during setting the pending order.");
Ele nunca chegará ao Print. E o código é certamente um assassino de HDD.
// Lista de modificações:// 26.11.2018// Correção: posição mágica e fechada do MT4 Comentário: os campos correspondentes das negociações de abertura têm prioridade maior do que os das negociações de fechamento.// Correção: a rara mudança de MT5-OrdersTotal e MT5-PositionsTotal durante o cálculo de MT4-OrdersTotal e MT4-OrderSelect é levada em conta.// Correção: as ordens que abriram uma posição, mas não tiveram tempo de ser excluídas pelo MT5, não são mais consideradas pela biblioteca.
Em destaque. Esse é o tipo de script
#include <MT4Orders.mqh>
#include <Debug.mqh> // https://c.mql5.com/3/173/Debug.mqh#define AskSymbolInfoDouble(_Symbol, SYMBOL_ASK)
voidOnStart()
{
OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Ask, 0, 0, 0);
int Total = _P(OrdersTotal());
while (!IsStopped())
{
constint NewTotal = OrdersTotal();
if (Total != NewTotal)
{
_P(NewTotal);
// se (NewTotal < Total)// Alert("https://www.mql5.com/ru/forum/290673#comment_9493241");
Total = NewTotal;
}
}
}
nas contas do Hedge costumava aparecer
2018.11.2615:27:46.513voidOnStart(), Line = 10: OrdersTotal() = 12018.11.2615:27:56.128voidOnStart(), Line = 18: NewTotal = 22018.11.2615:27:56.128voidOnStart(), Line = 18: NewTotal = 1
Agora é só isso.
2018.11.2615:30:29.224voidOnStart(), Line = 10: OrdersTotal() = 1
Para contas de compensação em todos os casos, ainda não conseguimos superar as causas do MT5 (a ordem executada não é excluída). Ou seja, a biblioteca não sabe como (na verdade, e não deveria) contornar os defeitos da plataforma MT5 em todos os casos.
A biblioteca não é capaz (de fato, não deveria ser capaz) de contornar as deficiências da própria plataforma MT5 em todos os casos.
Por exemplo, este
abrindo uma posição foi colocada e o OrdersTotal aumentou em um.
Ela foi executada e o OrdersTotal diminuiu em um, mas o PositionsTotal não aumentou em um. Ou seja, há uma posição, mas o Terminal não sabe sobre ela.
Por exemplo, não há posições nem ordens - PositionsTotal = 0, OrdersTotal = 0.
Você coloca uma ordem a mercado. Nesse caso, PositionsTotal = 0, OrdersTotal = 1.
A ordem a mercado é executada - OrdersTotal = 0. Mas PositionsTotal = 0!
É preciso muito esforço para se deparar com essa situação. É ainda mais difícil percebê-la. Mas o MT5 cria esses truques.
O MT4Orders tenta evitar essas coisas o máximo possível, mas nem sempre é possível. Se os autores do TS tentam levar em conta essas falhas da plataforma em MQL5 puro ou SB, só podemos adivinhar. É improvável.
Você pode me dar um exemplo de uma variante do MT4?
https://www.mql5.com/pt/code/7712
Semelhante ao que você fez com o Spreader
Infelizmente, o MQL4_To_MQL5.mqh não foi criado para conversão e indicadores. Mas eles estão presentes no código
Não vou adicioná-lo. Talvez alguém concorde com isso. Havia artigos sobre esse tópico.
fxsaber
Funciona incorretamente no mt5 em comparação com o mt4. Ele abre uma operação e a fecha imediatamente.
Qual pode ser o problema?
fxsaber
Funciona incorretamente no mt5 em comparação com o mt4. Ele abre uma transação e a fecha imediatamente.
Qual pode ser o problema?
Analisei rapidamente o código. É estranho que no MT4 essas condições tenham sido escritas
Ele nunca chegará ao Print. E o código é certamente um assassino de HDD.
Eu o modifiquei para ser multiplataforma.
fxsaber
Obrigado pela ajuda. Mas o problema é o mesmo.
Ele abre uma ordem e a fecha imediatamente. E assim, a cada segundo, em um círculo e sem parar.
Esse problema não existe no mt4.
Obrigado por sua ajuda. Mas o problema é o mesmo.
Ele abre uma ordem e a fecha imediatamente. E assim, a cada segundo, em um círculo e sem parar.
Esse problema não existe no mt4.
Infelizmente, não tenho a oportunidade de entender seu problema.
Em destaque. Esse é o tipo de script
nas contas do Hedge costumava aparecer
Agora é só isso.
Para contas de compensação em todos os casos, ainda não conseguimos superar as causas do MT5 (a ordem executada não é excluída). Ou seja, a biblioteca não sabe como (na verdade, e não deveria) contornar os defeitos da plataforma MT5 em todos os casos.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Bibliotecas: MT4Orders
fxsaber, 2017.04.20 06:20
A versão mais recente está sempre aqui.Atualizada.
Por exemplo, este
abrindo uma posição foi colocada e o OrdersTotal aumentou em um.
Por exemplo, não há posições nem ordens - PositionsTotal = 0, OrdersTotal = 0.
Você coloca uma ordem a mercado. Nesse caso, PositionsTotal = 0, OrdersTotal = 1.
A ordem a mercado é executada - OrdersTotal = 0. Mas PositionsTotal = 0!
É preciso muito esforço para se deparar com essa situação. É ainda mais difícil percebê-la. Mas o MT5 cria esses truques.
O MT4Orders tenta evitar essas coisas o máximo possível, mas nem sempre é possível. Se os autores do TS tentam levar em conta essas falhas da plataforma em MQL5 puro ou SB, só podemos adivinhar. É improvável.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2018.12.05 19:43