O grande e terrível MT4 para sempre (ou como fazer uma transição estratégica) - página 18

 
PapaYozh:
Não.
O resultado não é garantido.

Se houver centavos suficientes, é garantido

 
fxsaber:

Preciso escrever um roteiro em um MT5 que abra 100 posições em uma conta vazia.


Na MT4, a situação foi resolvida desta forma.


Quem tem uma solução no MT5?

É possível um desempenho parcial?
 
SanAlex:

Se houver centavos suficientes, isso é garantido.

Você não contabilizou o desempenho parcial, e quando o fizer, você também terá que contabilizar a dupla contagem

 
Alexey Viktorov:
A execução parcial é possível?

Vamos supor que não haja execução parcial. Entretanto, enquanto o roteiro está em execução, alguém pode acidentalmente clicar na cruz da tabela de posições, fechando uma ou poucas das posições. No entanto, ainda devem existir exatamente 100 posições no final da execução do roteiro.


A variante MT4 é insanamente simples. É por isso que escrevi neste tópico.

 
fxsaber:

Quem tem uma solução no MT5?

Não há como sem um sincronizador.

Poderia haver exigências elementares ou perda de conectividade no processo, 100 ordens e nem sempre renderão 100 negócios.

 
Andrey Khatimlianskii:

Não há como sem um sincronizador.

Pode haver solicitações elementares ou perda de comunicação no processo, 100 ordens e nem sempre resultarão em 100 negociações.

O sincronizador somente garantirá que os valores PosiçõesTotal e OrdensTotal não mentem. É precisamente porque eles jazem no tempo que recebemos a dupla contagem.

Em princípio, o sincronizador é uma única linha. E se você não olhar para seu mecanismo, a implementação é simples.


Entretanto, mesmo com o sincronizador, tudo é extremamente complicado. Você pode usar tal condição:

while (OrdersTotal() + PositionsTotal < 100)

No entanto, esta condição será uma chatice total se alguém fizer o seguinte.

fxsaber:

Vamos supor que não haja execução parcial. Entretanto, enquanto o roteiro está em execução, alguém pode acidentalmente clicar em uma cruz na tabela de posições, fechando uma ou mais delas. No entanto, ao final da execução do roteiro, ainda devem existir exatamente 100 posições.


Isto é, uma tarefa elementar, que é resolvida em duas linhas no MT4, não é facilmente resolvida no MT5. É por isso que as regras do MT4+Synchronizer no MT5. Por causa disso, não entendo bem como outros EAs podem ser escritos no MT5, dos quais há tantos no mercado.

 
fxsaber:

O sincronizador apenas garantirá que os valores PosiçõesTotal e OrdensTotal não mentem. É precisamente por serem temporariamente falsas que resultam em entradas duplas.

Em princípio, o sincronizador é uma única linha. E se você não olhar para seu mecanismo, a implementação é simples.


Entretanto, mesmo com o sincronizador, tudo é extremamente complicado. Você pode usar tal condição:

No entanto, esta condição será uma chatice total se alguém fizer o seguinte.


Isto é, um problema elementar, que é resolvido em duas linhas no MT4, não é facilmente resolvido no MT5. É por isso que as regras do MT4+Synchronizer no MT5. Por causa disso, não entendo como outros EAs podem ser escritos em MT5, dos quais há tantos no mercado.

No MT5 tudo se resolve da mesma forma que no MT4 e muitas vezes é muito mais fácil, porque a linguagem e o API são muito mais ricos. Mais precisamente, os idiomas são quase os mesmos, aqui a Metacquotes fez um grande trabalho de compatibilidade, mas as APIs são bem diferentes. Renat (diretor da Metakvotes) disse certa vez em fóruns que o MT4 está morto e não será desenvolvido. Mas aparentemente os interesses comerciais eram mais importantes e, no entanto, estão surgindo atualizações. Mas a maioria são correções de bugs e novas características do MKL 5. Então os desenvolvedores bem feitos, eu tiro meu chapéu, o que eu não faço)).

E, em geral, não entendo os gemidos de alguns camaradas, como sendo difíceis de mudar para o MKL5. Não há complicações, bem, outro API, então existem fontes detalhadas, eu prefiro aprender com elas. Quem ainda não tem conhecimentos suficientes, bem-vindo para ajudar, é breve, mas claro. Em qualquer caso, o quinto é mais rápido que o quarto pelo menos 10 vezes, e no modo de otimização em geral usa todos os núcleos de CPU que você permitiu e com os modernos cartões de vídeo bate o quarto em centenas de vezes. Portanto, não há necessidade de escrever canções tristes. ))

 
Andrei Trukhanovich:

você não levou em conta o desempenho parcial, e quando o faz, você tem que levar em conta também o excesso

e isso também não está certo? - Embora eu não entenda o que ninguém queira desta função - mas ela faz seu trabalho 100%!!!

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits = 3;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots   = 0.01; // Lots
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double sl=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//---
   for(uint i=0; i<maxLimits; i++)
     {
      //--- open position
      if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      //if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
 
fxsaber:

Vamos supor que não haja execução parcial. Entretanto, enquanto o roteiro está em execução, alguém pode acidentalmente clicar na cruz da tabela de posições, fechando uma ou poucas das posições. No entanto, ainda devem existir exatamente 100 posições no final da execução do roteiro.


A versão MT4 é insanamente simples. É por isso que escrevi neste tópico.

Então, para a MQL5 você estabelece tais condições que alguém pode brincar, enquanto para a MQL4 você não o faz? E se eu me conectar à conta a partir de outro computador e colocar um par de pips... o que a MQL4 irá abrir?

Você quer fazer asneira sem nenhum cheque? Você está defendendo a permissividade na programação, ou está apenas tentando difamar a MQL5 pelos interesses egoístas de alguém?

Escreva o mesmo em mql4 com cheques e infalíveis.

 
Alexey Viktorov:

Então, para a MQL5 você estabelece tais condições que alguém pode brincar, mas não para a MQL4? E se eu me conectar à minha conta a partir de outro computador e colocar um par de pips... o que a MQL4 abrirá?

Os termos e condições do MT4 e MT5 são os mesmos.

Você quer fazer asneira sem fazer nenhum controle? Você está defendendo a permissividade na programação, ou está apenas tentando derrogar a MQL5 para os interesses egoístas de alguém?

Se você não souber como fazer isso, terá que mostrar os mesmos problemas com mql4 com cheques e ferramentas infalíveis.

Eu faço tudo apenas no MT5. Só estou dizendo que o MT5 não é mais complicado do que o MT4. É MUITO mais complicado do que isso! Somente esta semana existe uma solução de inversão de posição, e não está funcionando 100%.

Durante tantos anos todos sabiam do retrocesso, chegando a... Dormir. Porque é MUITO complicado. Muitas peculiaridades do API comercial, que foram levantadas no fórum, os desenvolvedores não estão cientes, ou não fizeram seus comentários.


Ninguém está criticando o MT5. Eu tenho mostrado por exemplos alguns problemas na solução de problemas elementares.