Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1178

 
Aleksey Mavrin:

estamos falando do testador ou on-line?

Se estiver online - veja o código, o evento da mudança não é roteado corretamente. A propósito, painéis no site apenas cinco bibliotecas diferentes, o que você quer dizer?

E no testador - parece que não há como, e por quê.

Após enviar comandos de movimentação para TODOS os objetos do painel, faça ChartRedraw()
 
Aleksey Mavrin:

Você está falando sobre o testador ou on-line?

Se estiver online - veja o código, o evento da mudança não é roteado corretamente. A propósito, painéis no site apenas cinco bibliotecas diferentes, o que você quer dizer?

E no testador - parece que não há como, e por quê.

Estamos falando de online. Eu realmente não preciso disso no testador. Não tenho certeza sobre as bibliotecas - não sou especialista em programação. Acabei de pegar um código de botão pronto da Referência MQL5.

Eu já o fiz e será muito mais barato. Aparentemente, é por isso que a posição do botão é atualizada no próximo tick. Eu não entendo como fazer botões se moverem juntos com o fundo.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Artyom Trishkin:
Depois de enviar comandos de movimentação para TODOS os objetos do painel do ChartRedraw()
Eu tentei assim, mas não funcionou.
   ObjectSetInteger(0, "Buy",            OBJPROP_XDISTANCE, x + 2);
   ObjectSetInteger(0, "Buy",            OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
  
   ObjectSetInteger(0, "Sell",           OBJPROP_XDISTANCE, x + 74);
   ObjectSetInteger(0, "Sell",           OBJPROP_YDISTANCE, y + 2);
   ChartRedraw();
 
Por favor, ajude-me a entender. Tenho o código para um painel comercial para abrir uma ordem Stop de compra pendente com posterior rastreamento se a ordem não for acionada. O pedido é aberto mas não é modificado. Não vi nenhum erro no diário e não há tentativas de modificar o pedido. Tentei rastrear através do registro em que estágio ocorre um erro usando a função:
Print("Ордер Выбран!");

Basta inseri-lo após cada condição.

Como resultado, descobri que a função:

 for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  

Seleciona com sucesso o pedido para prosseguir, mas seImprimir ("Pedido Selecionado!"); éinserido após este código:

if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOp
en())

então ocorre um erro:

2020.06.17 01:38:24.136 2020.01.02 07:40:00 falhou na modificação do pedido #2 buy stop 0.1 EURUSD_i a 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Preço inválido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modificar #2 a 1.00000 (sl: 1.00000 tp: 1.00000) [preço inválido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 A modificação BUY STOP falhou! Resultado Retcode: 10015, descrição do Retcode: preço inválido

Eu uso o mesmo código em outro EA para auto-comercialização (a única diferença é a ausência de tal código):

ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true


) e eu não tenho problemas. Os pedidos são abertos e modificados sem nenhum problema.

Aqui está o próprio código:

     double Ask          = NormalizeDouble(PriceInformation_High_Buy[HighestCandle_High_Buy].high, _Digits) + indent; // максимум самой высокой свечи плюс отступ
     double sl_buy       = NormalizeDouble(PriceInformation_Low_Buy[LowestCandle_Low_Buy].low, _Digits) - indent;     // минимум самой низкой свечи минус отступ  
     double tp_buy       = Ask + ((Ask - sl_buy) * Профит_фактор);                                                    // количество стопов лоссов 
     
     if  (OrdersTotal()==0 && PositionsTotal()==0 &&                                         // проверка на наличие открытых позиций и ордеров
     ObjectGetInteger(0, "Buy Stop", OBJPROP_STATE) == true)                                 // проверка состояния кнопки
                                                                                             
     {
        atrade.BuyStop(Lots, Ask, _Symbol, sl_buy, tp_buy, ORDER_TIME_GTC, 0, "My comment"); // посылаем ордер Buy Stop
        ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                               // отжимаем кнопку
     }

     else

     ObjectSetInteger(0, "Buy Stop", OBJPROP_STATE, false);                                  // отжимаем кнопку
       
//---Трейлинг Buy Stop---------------------------------------------------------------------------------------------------------------------------//     
      
        for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))                                                                      // выбираем ордер 
       
            if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen()) // проверяем символ, мэджик номер, цену
               
              {
                 if(aorder.OrderType()==ORDER_TYPE_BUY_STOP)
                 Print("Ордер Выбран!"); 
                 if(aorder.PriceCurrent()<aorder.PriceOpen())
                 
                    {
                     if(atrade.OrderModify(aorder.Ticket(),
                        asymbol.NormalizePrice(Ask),
                        asymbol.NormalizePrice(sl_buy),
                        asymbol.NormalizePrice(tp_buy),
                        aorder.TypeTime(),
                        aorder.TimeExpiration()))
                        Print("Модификация BUY STOP прошла успешно! Тикет ордера = ",atrade.ResultOrder());
                     else
                        Print("Модификация BUY STOP прошла с ошибкой! Result Retcode: ",atrade.ResultRetcode(),
                              ", description of Retcode: ",atrade.ResultRetcodeDescription());
                    }
              }

Por favor, diga-me qual é o meu erro?

 
Mikhail:

Trata-se de online. Eu realmente não preciso disso no testador. Não posso responder à pergunta sobre as bibliotecas, sou um completo idiota na programação. Acabei de pegar um código de botão pronto da Referência MQL5.

o fiz, mas não tenho nenhum erro, ainda não posso corrigi-lo. Aparentemente, é por isso que a posição do botão é atualizada no próximo tick. Eu não entendo como fazer botões se moverem junto com o fundo.

E como você determinou que está no próximo tique e não naquele?)

 
Mikhail:
Por favor, ajude a entender. Ter código para o painel de negociação para abrir ordem de Stop de Compra pendente com posterior rastreamento caso a ordem falhe. O pedido é aberto mas não há nenhuma modificação do pedido. Nenhum erro é mostrado no diário e também não temos nenhuma tentativa de modificar o pedido. Tentei rastrear através do registro em que estágio ocorre um erro usando a função:

Basta inseri-lo após cada condição.

Como resultado, descobri que a função:

Seleciona com sucesso o pedido para prosseguir, mas seImprimir ("Pedido Selecionado!"); éinserido após este código:

então ocorre um erro:

2020.06.17 01:38:24.136 2020.01.02 07:40:00 falhou na modificação do pedido #2 buy stop 0.1 EURUSD_i a 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Preço inválido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modificar #2 a 1.00000 (sl: 1.00000 tp: 1.00000) [preço inválido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 A modificação BUY STOP falhou! Resultado Retcode: 10015, descrição do Retcode: preço inválido

Eu uso o mesmo código em outro EA para auto-comercialização (a única diferença é a ausência de tal código):


) e eu não tenho problemas. Os pedidos são abertos e modificados sem nenhum problema.

Aqui está o próprio código:

Você pode me dizer qual é o meu erro?

Obviamente, a Normalize não funciona corretamente. Assim símbolo.sem impressão.Dígitos() assimémbolo.TickSize(),. Ponto() verificação .

 

Bom dia a todos. Enfrentou este problema ao acessar a EA para DLL:

Não é possível carregar 'C:|COPY0shablon.dll' [487]

O erro 487 parece significarERROR_INVALID_ADDRESS, mas o caminho para a biblioteca está correto. Na verdade, eu já coloquei esta dll em todas as pastas, não ajuda.

O que pode ser? Serei grato a vocês pela ajuda.


P.S. No início esta dll era para 32 bit e funcionava em mt4*86. Eu o recompilei por 64 bits, coloquei-o agora no mt5*64 e tenho tais problemas.



 
Aleksey Mavrin:

Como você sabe o que está no próximo tick e não naquele?)

Até a chegada do novo tick, não há movimento dos botões. Isso é o que posso ver com meus olhos. Assim que o preço muda, os botões se movem.

Hoje, porém, mesmo com o novo tique, os botões pararam de ser redesenhados, embora eu não tenha mudado nada. Apenas o fundo está em movimento.
 
Aleksey Mavrin:

Aparentemente, a Normalizar não funciona corretamente. Assim símbolo.sem impressão.Dígitos() assimémbolo.TickSize(),. Ponto() verificação .

Quando eu faço uma pergunta como esta:

Print("Symbol ", _Symbol, " Digits ", _Digits, " Point ", Point());

Eu recebo este resultado:

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Símbolo EURUSD_i Dígitos 5 Ponto 1e-05

Quando eu faço um pedido como este:

Print("Symbol ",aorder.Symbol(), " Digits ", asymbol.Digits(), " Point ", asymbol.TickSize());

Eu recebo este resultado:

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Símbolo EURUSD_i Dígitos 0 Ponto 0.0

Ao mesmo tempo, quero notar que se eu não inserir a função Imprimir, não recebo nenhum erro, o pedido nem sequer tenta modificar-se a si mesmo. É como se a CTrade não visse meu pedido.

A verificação do símbolo e do número mágico não funciona:

Print("Symbol ", asymbol.Name(), " Magic ", aorder.Magic(), " Ticket ", aorder.Ticket()); 

Resultado:

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Símbolo mágico 0 Ticket 2

O número mágico deve ser 12345, o símbolo é euro dólar.

Por que não posso ter um símbolo e uma tragédia médica?

Se você mudar a corda:

aorder.Symbol()==asymbol.Name()

é alterado para

aorder.Symbol()==_Symbol

e remover a validação por número mágico, então temos problemas com os preços

2020.06.17 01:38:24.136 2020.01.02 07:40:00 falhou na modificação do pedido #2 buy stop 0.1 EURUSD_i a 1.12086 sl: 1.12023 tp: 1.12275 -> 1.00000, sl: 1.00000 tp: 1.00000 [Preço inválido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: modificar #2 a 1.00000 (sl: 1.00000 tp: 1.00000) [preço inválido]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 A modificação BUY STOP falhou! Resultado Retcode: 10015, descrição do Retcode: preço inválido

Já me arrebentei, enquanto este mesmo código funciona bem em outro Expert Advisor.

O que eu estou fazendo de errado?

Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна. Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно...
 
dozolov:

Bom dia a todos. Enfrentou este problema ao acessar a EA para DLL:

Não é possível carregar 'C:|COPY0shablon.dll' [487]

O erro 487 parece significarERROR_INVALID_ADDRESS, mas o caminho para a biblioteca está correto. Na verdade, eu já coloquei esta dll em todas as pastas, não ajuda.

O que pode ser? Serei grato a vocês pela ajuda.


P.S. No início esta dll era para 32 bit e funcionava em mt4*86. Eu o recompilei por 64 bits e agora o coloquei no mt5*64 e tenho tais problemas.



ERROR_INVALID_ADDRESS não se trata de um caminho. Você está passando os argumentos errados.

Razão: