Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Em geral, descobri o problema - os servidores nem sempre retornam os valores corretos, portanto, há uma confusão e não há como corrigi-la, apenas alterar manualmente o tipo de preenchimento, sim. Aqui no fórum já houve problemas semelhantes com as pessoas.
Obrigado por encontrar o erro!
Para corrigi-lo, onde quer que haja essas duas linhas no código.
Request.type_filling = ORDER_FILLING_RETURN;
adicione mais duas para que fique parecido com isto
Request.type_filling = ORDER_FILLING_RETURN;
else if ((::SymbolInfoInteger(Request.symbol,SYMBOL_FILLING_MODE) & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
Request.type_filling = ORDER_FILLING_IOC;
Obrigado por encontrar o erro!
Para corrigi-lo, onde quer que essas duas linhas estejam no código.
Request.type_filling = ORDER_FILLING_RETURN;
adicione mais duas linhas para que fique parecido com isto
Request.type_filling = ORDER_FILLING_RETURN;
else if ((::SymbolInfoInteger(Request.symbol,SYMBOL_FILLING_MODE) & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
Request.type_filling = ORDER_FILLING_IOC;
Aí o problema é diferente, na execução do IOC de preenchimento de marquise :) e o servidor retorna REQUEST na solicitação, ou seja, no nível do problema do servidor e não é rastreado de forma alguma, para colocar apenas nas configurações do especialista a capacidade de alterar independentemente, se não funcionar
Embora... funcione... obrigado, mas a execução está escrita MARKET nos logs, não EXCHANGE, parece que tudo está misturado lá... ou na minha cabeça).
Qual é o objetivo do armazenamento em cache em uma negociação real? Você já armazenou o histórico em cache no MT4? A aceleração é necessária quando o desempenho é importante - testador.
O desempenho também pode ser necessário na vida real. O fato de não termos esses especialistas não nega a possível necessidade.
O que eu não entendo mais é por que basicamente foi dito que seria possível fazer o armazenamento em cache para o testador, mas não seria possível para os usuários reais. Como isso é tão impossível? O algoritmo deve ser o mesmo e deve funcionar tanto no testador quanto no real.
O desempenho pode ser necessário no mundo real. O fato de não termos esses especialistas não cancela a possível necessidade.
Não entendo mais por que basicamente foi dito que seria possível fazer o armazenamento em cache para o testador, mas não seria possível para os reais. Como isso é tão impossível? O algoritmo deve ser o mesmo e funcionar tanto no testador quanto no real.
Como os dados armazenados em cache no real podem, em algum momento, deixar de corresponder ao histórico, o corretor os corrigiu manualmente. Mas no testador, ninguém moverá suas mãos. Além disso, mesmo sem as correções do corretor, surgem problemas no mercado real. Como você pode enviar duas solicitações assíncronas e obter uma resposta da primeira - o histórico foi armazenado em cache - e, em seguida, obter uma resposta da segunda, que se encaixará na tabela de histórico antes da anterior - o histórico muda. É por isso que o cache não é bom de verdade.
Para o testador, o cache é feito de forma muito simples, apenas os ponteiros ainda não foram alcançados. No entanto, foi feito o seguinte (não publicado)
// Adicionar: sincronização total do OrderSend com o ambiente de negociação (tempo real e histórico) - como no MT4.
// Correção: os sinalizadores de preenchimento são definidos corretamente.
Isso significa que o OrderSend garante a sincronização com o ambiente de negociação no menor tempo possível.
Algumas pessoas no fórum reclamaram que, após o MT5-OrderSend BUY, não conseguiam ler os parâmetros de uma posição aberta - o ambiente de negociação estava atrasado em cerca de 1 ms. Agora, se você usar essa biblioteca, não haverá problemas com esse e outros problemas semelhantes. Provavelmente, é a única biblioteca pública que faz isso até o momento.
Por exemplo, não é relevante agora
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Como trabalhar corretamente no MT5 com o OrderSend
fxsaber, 2016.11.10 10:00 AM
Como saber o tamanho da comissão sem abrir uma posição no instrumento?
fxsaber, 2016.11.08 20:30
void OnStart()
{
const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);
Sleep(1000); // aguardando a atualização do histórico
if (OrderSelect(Ticket, SELECT_BY_TICKET))
Alert(OrderCommission());
}
Provavelmente, esse exemplo é ilustrativo.
Se você não fizer o Sleep, muitas vezes você terá a situação de que o histórico não teve tempo de ser atualizado após o OrderClose e o OrderCommission retorna o valor como se o OrderClose não tivesse sido feito.
Observe que esse é um script e não pode haver nenhum evento de evento. A única saída é um Sleep estúpido.
Se você reescrever esse script com o SB, nada mudará.
Agora não há deslizes idiotas com atrasos indefinidos. O mesmo SB não sabe como fazer isso.
Eu o enviarei para publicação quando acelerar o histórico para o testador.
Uma vez verificada por um moderador, uma atualização estará disponível
// Adicionar: sincronização completa de OrderSend, OrderModify, OrderClose, OrderDelete com o ambiente de negociação (tempo real e histórico) - como no MT4.
// O tempo máximo de sincronização pode ser definido por meio de MT4ORDERS::OrderSend_MaxPause em µs. O tempo médio de sincronização no MT5 é de ~1 ms.
// Por padrão, o tempo máximo de sincronização é igual a um segundo. MT4ORDERS::OrderSend_MaxPause = 0 - sem sincronização.
// Adicionar: Como o parâmetro SlipPage (OrderSend, OrderClose) afeta a execução de ordens a mercado somente no modo Instant,
// então, agora é possível definir o tipo de execução no saldo - ENUM_ORDER_TYPE_FILLING:
// ORDER_FILLING_FOK, ORDER_FILLING_IOC ou ORDER_FILLING_RETURN.
// No caso de uma atribuição incorreta ou se o símbolo não for compatível com o tipo de execução especificado, o modo de operação será selecionado automaticamente.
// Exemplos:
// OrderSend(Symb, Type, Lots, Price, ORDER_FILLING_FOK, SL, TP) - envia a ordem correspondente com o tipo de execução ORDER_FILLING_FOK
// OrderSend(Symb, Type, Lots, Price, ORDER_FILLING_IOC, SL, TP) - envia a ordem correspondente com o tipo de execução ORDER_FILLING_IOC
// OrderClose(Ticket, Lots, Price, ORDER_FILLING_RETURN) - envia a ordem a mercado correspondente com o tipo de execução ORDER_FILLING_RETURN
// Adicionar: OrdersHistoryTotal() e OrderSelect(Pos, SELECT_BY_POS, MODE_HISTORY) são armazenados em cache - eles funcionam o mais rápido possível.
// Não há mais implementações lentas na biblioteca .
Faltam apenas duas etapas para a conclusão total e a superioridade inequívoca sobre o SB.
// Momentos CloseBy - ainda não tive tempo de fazer isso. Talvez no futuro, quando necessário.
// Determinar TP e SL de posições fechadas - atualmente (build 1470) a MQL5 não sabe como fazer isso.
// Contabilização das transações DEAL_ENTRY_INOUT e DEAL_ENTRY_OUT_BY.
No momento, o MT4Orders permite que você faça tudo em contas Netting (bolsa de valores), exceto ler o histórico com negociações DEAL_ENTRY_INOUT. E tudo nas contas Hedge, exceto os momentos closeBy.
Vantagens em relação ao SB
Uma vez verificada por um moderador, uma atualização estará disponível
Você é bom! Aguardamos ansiosamente a atualização!
E espero realmente implementar o CloseBy em um futuro próximo!
Uma vez verificada por um moderador, a atualização estará disponível
Disponível.
Vantagens em relação ao SB
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Como trabalhar corretamente no MT5 com o OrderSend
fxsaber, 2016.11.15 14:14
Tente escrever a seguinte função em seu EA
#property strict
#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006
void Func( const string &Symbols[] )
{
const int Total = ArraySize(Symbols);
for (int i = 0; i < Total; i++)
{
const double Price = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);
const int digits = (int)SymbolInfoInteger(Symbols[i], SYMBOL_DIGITS);
if (!OrderSelect(OrderSend(Symbols[i], OP_BUY, 1, Price, 100, 0, 0, DoubleToString(Price, digits)), SELECT_BY_TICKET) ||
(NormalizeDouble(Price - OrderOpenPrice(), digits) != 0)) // se a abertura falhar ou houver derrapagem - saia.
break;
}
}
void OnStart() // OnTick
{
const string Symbols[] = {"EURUSD", "GBPUSD", "AUDUSD", "USDCAD", "USDJPY"};
Func(Symbols);
}
É extremamente problemático escrever até mesmo uma lógica de negociação tão simples no MT5 usando SB ou MQL5 puro como exemplo. O que sempre é feito sem problemas no MT4 não é fácil de implementar sem erros no MT5. Essa biblioteca permite que você faça isso da mesma forma que no MT4. Não há necessidade de estudar a sintaxe da biblioteca e seus recursos - ela é MT4 em comportamento e MQL4 em sintaxe.
Pode ser útil familiarizar-se com os resultados da portabilidade dos consultores do MT4 para os cinco (via SB) aqui, para que você possa avaliar em qual estilo a implementação da mesma lógica de negociação está mais próxima de você.
No novo arquivo, por algum motivo, a linha quebra com um caractere CR (aparentemente do Mac), o que é diferente de outras fontes.
Como sou um usuário fraco (e só tenho uma vinda), não sei dizer como isso aconteceu. Observei que a maioria das cadeias de caracteres termina com dois bytes 0x0D. Também há 0x0D 0x0A. Há um - 0x0D.
Todos os editores mostram a fonte normalmente, portanto, acho que isso não deve interferir.