Erros, bugs, perguntas - página 2829

 
Novas funções internas.
int OrderExist( const string symbol, ENUM_ORDER_TYPE type, ulong magic, ulong &tickets[] );

int PositionExist( const string symbol, ENUM_POSITION_TYPE type, ulong magic, ulong &tickets[] );
 

Saudações. Pode aconselhar-me ou dar-me um link para onde ir?

VPS WinServer 2012 R2, MT4 executa, a dada altura descarrega, tem de correr novamente.

Onde procurar, etc. ....

Muito obrigado de antemão.

 

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Peculiaridades de mql5, dicas e truques

fxsaber, 2020.08.20 18:52

O seguinte código na conta de demonstração doRannForex-Server pode reproduzir imediatamente esta situação através da execução desta EA.

// Воспроизведение ситуации наличия позиции и отложенного ордера с одинаковыми тикетами.

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

MqlTradeResult Result = {0};
MqlTradeRequest Request = {0};

int OnInit()
{

        Request.action = TRADE_ACTION_PENDING;
        Request.symbol = _Symbol;
        Request.volume = 100;
        Request.price = Ask;
        Request.type = ORDER_TYPE_BUY_LIMIT;
        
        return(!OrderSend(Request, Result)); // Выставили лимитник по текущей цене.
}

#define  TOSTRING(A) #A + " = " + DoubleToString(A, _Digits)

void OnTradeTransaction( const MqlTradeTransaction&, const MqlTradeRequest&, const MqlTradeResult& )
{
  if (OrderSelect(Result.order) && (OrderGetInteger(ORDER_STATE) == ORDER_STATE_PARTIAL)) // Если наш лимитник исполнился частично
  {
    if (Ask - OrderGetDouble(ORDER_PRICE_OPEN) < 100 * _Point)                            // и находится близко от текущей цены
    {
        Request.action = TRADE_ACTION_MODIFY;
        Request.order = Result.order;
        Request.price = Ask - 1000 * _Point;

      // тогда передвигаем его подальше.
      if (OrderSend(Request, Result)) // Если синхронный OrderSend выполнился успешно, то торговое окружение должно соответствовать.
      {
        // Проверка соответствия торгового окружения.
        if (OrderSelect(Request.order) &&                                                                // Если получилось взять данные нашего ордера
            NormalizeDouble(OrderGetDouble(ORDER_PRICE_OPEN) - Request.price, _Digits))                  // и цена ордера не равна цене успешного OrderSend
          Alert("Bug:" + TOSTRING(OrderGetDouble(ORDER_PRICE_OPEN)) + " != " + TOSTRING(Request.price)); // сообщаем о баге MT5.
      }
    }
    else
      ExpertRemove();
  }     
}


A propósito, o guião mostra (nem sempre é a primeira vez) um bug na execução do OrderSend sincronizado.

Alert: Bug:OrderGetDouble(ORDER_PRICE_OPEN) = 0.89837 != Request.price = 0.88837

Depois de uma OrderSend ter sido executada durante alguns dez/centenas de milissegundos, o preço da encomenda é antigo, e não aquele que foi colocado com sucesso pela OrderSend.

 

enviar uma pesquisa - não a consegui encontrar

como alcançar a singularidade de linhas com múltiplos campos numa tabela em SQLite?

ZS: se alguém puder dar um exemplo - obrigado de antemão!

 

De quem foi a ideia de mover o separador Fórum para o topo da lista de cabeçalho?

Má ideia, não diga quem.

 
Código destacado na base não funciona por mais de uma semana, troca de anexos também um erro
 
Igor Makanu:

enviar uma pesquisa - não a consegui encontrar

como alcançar a singularidade de linhas com múltiplos campos numa tabela em SQLite?

ZS: se alguém puder dar um exemplo - obrigado de antemão!

Criar uma chave única para campos múltiplos (as linhas com os dados existentes devem corresponder à unicidade que está a ser criada, caso contrário, ocorrerá um erro).

ALTER TABLE `t1` ADD UNIQUE (
`id` ,
`name` ,
`account`
);
 
Andrey Khatimlianskii:

Criar uma chave única em múltiplos campos (com as linhas com os dados existentes devem corresponder à unicidade que está a ser criada, caso contrário, ocorrerá um erro).

OK, vou tentar isso, mas provavelmente terei de ler um livro SQL, sem conhecimentos suficientes

Obrigado!

 
Andrey Dik:

De quem foi a ideia de mover o separador Fórum para o topo da lista de cabeçalho?

Má ideia, não diga quem.

Concordo.

 
Andrey Dik:

De quem foi a ideia de mover o separador Fórum para o topo da lista de cabeçalho?

Má ideia, não diga quem.

Qual é o problema? Reflexos?)

E "Fórum" ainda é clicado mais vezes do que "Documentação" - pelo menos no site...