Erros, bugs, perguntas - página 668

 

Se se concentrar nas cores da tumblr do Preço, parece haver confusão.

//---

O botão Comprar é azul. Por conseguinte, os preços a que se pode fazer uma oferta devem ser também azuis. Agora é ao contrário e tem de se trabalhar muito para se habituar e é pouco provável que funcione. É uma nuance psicológica. )))

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен - Документация по MQL5
 

Com base na informação relacionada com a pilha de preços na Ajuda, o layout do teste ficaria algo parecido com isto:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   MarketBookAdd(_Symbol);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   MarketBookRelease(_Symbol);
  }
//+------------------------------------------------------------------+
//| OnBook Event                                                     |
//+------------------------------------------------------------------+
MqlBookInfo priceArray[];
//---
void OnBookEvent(const string &symbol_name)
  {
   bool getBook=MarketBookGet(_Symbol,priceArray);
//---
   if(!getBook)
     {
      Print("Не удалось получить содержимое стакана по символу ",Symbol());
     }
  }
//+------------------------------------------------------------------+
//| OnChart event handler                                            |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   double price_buy=0.0,price_sell=0.0;
//---
   TRADE_EXEMODE=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_EXEMODE); // Узнаем тип исполнения
//---
   if(TRADE_EXEMODE==SYMBOL_TRADE_EXECUTION_MARKET ||
            TRADE_EXEMODE==SYMBOL_TRADE_EXECUTION_EXCHANGE)
     {
      mytrade.SetTypeFilling(ORDER_FILLING_IOC);
      //---
      if(TRADE_EXEMODE==SYMBOL_TRADE_EXECUTION_EXCHANGE)
        {
         int size=ArraySize(priceArray);
         //---
         for(int i=size-1; i>=0; i--)
           {
            if(priceArray[i].type==1)
              {
               price_buy=priceArray[i].price; // Получим ближайшую цену для BUY
               price_sell=priceArray[i+1].price; // Получим ближайшую цену для SELL

               //---
               break;
              }
           }
        }
      else
        {
         price_buy=mylast_tick.ask;
         price_sell=mylast_tick.bid;
        }
     }
//---
   //... Далее следуют функции для совершения торговых операций
  }

//---

Contudo, ao fazer uma troca, o registo do Expert Advisor exibe uma mensagem, da qual se pode ver que embora houvesse um preço na consulta, este era o mais próximo na Profundidade do Mercado:

price_request=mytrade.RequestPrice();

o resultado não é nenhum preço (0.000):

price_result=mytrade.ResultPrice();

e a função comercial regressa falsa:

//---

No registo, podemos ver que houve uma tentativa de abrir uma posição a preço zero:

mas a posição foi no entanto aberta ao preço actual.

//---

Se esta informação não for suficiente para determinar que lado está em falta, escreverei ao Service Desk.

 

Pode dizer-me como remover uma ordem pendente?

trReq.order=order_ticket;

trReq.type=TRADE_ACTION_REMOVE;

OrderSend(trReq,trRez);

O meu compilador dá-me: TRADE_ACTION_REMOVE não pode converter enum

e 2 vezes mais ou menos o mesmo erro.

tentou da mesma forma com a zeragem antes:

trReq.symbol =Symbol(); //NULL

trReq.magic =MAGIC; //0

trReq.volume =0.0;

trReq.tipo =0;

trReq.preço =0.0;

trReq.sl =0.0;

trReq.tp =0.0;

trReq.type_time =0;

trReq.expiração=0;

não funciona. construir 597.

Dê-me um exemplo completo, por favor. Obrigado de antemão.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
stroka:
...

Dê um exemplo completo, por favor. Obrigado de antemão.

Há um exemplo completo na biblioteca padrão. Função OrdemDelete(). Tem documentação. Pode também assumir aí funções para todas as operações comerciais.

//+------------------------------------------------------------------+
//| Delete specified pending order.                                  |
//| INPUT:  ticket - ticket of order for delete.                     |
//| OUTPUT: true-if successful, false otherwise.                     |
//| REMARK: no.                                                      |
//+------------------------------------------------------------------+
bool CTrade::OrderDelete(ulong ticket)
  {
//--- variables
   string action,result;
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action    =TRADE_ACTION_REMOVE;
   m_request.order     =ticket;
//--- order check
   if(!OrderCheck(m_request,m_check_result))
     {
      //--- copy return code
      m_result.retcode=m_check_result.retcode;
      if(m_log_level>LOG_LEVEL_NO)
         printf(__FUNCTION__+": %s [%s]",FormatRequest(action,m_request),FormatRequestResult(result,m_request,m_result));
      return(false);
     }
//--- order send
   if(!OrderSend(m_request,m_result))
     {
      if(m_log_level>LOG_LEVEL_NO)
         printf(__FUNCTION__+": %s [%s]",FormatRequest(action,m_request),FormatRequestResult(result,m_request,m_result));
      return(false);
     }
   if(m_log_level>LOG_LEVEL_ERRORS)
      printf(__FUNCTION__+": %s [%s]",FormatRequest(action,m_request),FormatRequestResult(result,m_request,m_result));
//--- ok
   return(true);
  }
 
O terminal não faz o login na comunidade mql5. Introduzo o login e a palavra-chave nas definições do terminal, carrego em ok e nada acontece. Quando volto a introduzir as definições, o login é guardado, mas a palavra-passe está em branco. Não posso descarregar nada do mercado. Posso entrar no fórum sem qualquer problema.
 
Dima_S:

Qual é a finalidade de truncatar uma corda quando a define como um parâmetro externo?

cadeia de entrada - podem ser especificados no máximo 105 caracteres, se mais do que isso, é cortado à direita.

construir 597

buid 607 - o mesmo problema.
 

por favor diga-me porque é que o seguinte código não encontra a janela correspondente (verifiquei, a janela com esta classe existe)

#import "user32.dll"
   int FindWindowA(string &lpClassName, string &lpWindowName);
#import

string FormClass="TMyMainForm";
string FormName="";
int hnd = FindWindowA(FormClass,FormName);
if (hnd==0) printf("not found");
else printf("found");
 

Parece que há algum tipo de erro em

//+------------------------------------------------------------------+
//| Open position.                                                   |
//| INPUT:  symbol     -symbol for trade,                            |
//|         order_type -direct for open,                             |
//|         volume     -volume of position,                          |
//|         price      -price for open,                              |
//|         stop       -price of stop loss,                          |
//|         take       -price of take profit,                        |
//|         comment    -comment of position.                         |
//| OUTPUT: true-if successful, false otherwise.                     |
//| REMARK: no.                                                      |
//+------------------------------------------------------------------+
bool CTrade::PositionOpen(const string symbol,ENUM_ORDER_TYPE order_type,double volume,
                          double price,double sl,double tp,const string comment)

Com o código de retorno 10008 (encomenda efectuada), este método retorna falso.

A ordem é finalmente executada.

Devido a isto, foram abertas mais do que o número necessário de encomendas na conta de demonstração.

RQ      0       Trades  14:00:18        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
IO      0       Trades  14:00:18        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
MH      0       Trades  14:00:18        '3119321' : exchange buy 0.10 USDCHF at 0.00000
MQ      0       Trades  14:00:18        '3119321' : deal #2888080 buy 0.10 USDCHF at 0.91144 done (based on order #4880065)
NL      0       Trades  14:00:18        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
MK      0       Trades  14:00:18        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
IS      0       Trades  14:00:18        '3119321' : exchange buy 0.10 USDCHF at 0.00000
MN      0       Trades  14:00:19        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
NE      0       Trades  14:00:19        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
JQ      0       Trades  14:00:19        '3119321' : exchange buy 0.10 USDCHF at 0.00000
PJ      0       Trades  14:00:19        '3119321' : deal #2888081 buy 0.10 USDCHF at 0.91144 done (based on order #4880066)
KG      0       Trades  14:00:20        '3119321' : deal #2888082 buy 0.10 USDCHF at 0.91145 done (based on order #4880067)
KF      0       Trades  14:00:20        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
LM      0       Trades  14:00:20        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
HJ      0       Trades  14:00:20        '3119321' : exchange buy 0.10 USDCHF at 0.00000
DR      0       Trades  14:00:20        '3119321' : deal #2888083 buy 0.10 USDCHF at 0.91146 done (based on order #4880068)
HR      0       Trades  14:00:21        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
OJ      0       Trades  14:00:21        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
CE      0       Trades  14:00:21        '3119321' : exchange buy 0.10 USDCHF at 0.00000
MN      0       Trades  14:00:21        '3119321' : deal #2888084 buy 0.10 USDCHF at 0.91146 done (based on order #4880069)
DI      0       Trades  14:00:21        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
CF      0       Trades  14:00:21        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
OP      0       Trades  14:00:21        '3119321' : exchange buy 0.10 USDCHF at 0.00000
GI      0       Trades  14:00:22        '3119321' : deal #2888085 buy 0.10 USDCHF at 0.91146 done (based on order #4880070)
QD      0       Trades  14:00:22        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
JS      0       Trades  14:00:22        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
NK      0       Trades  14:00:22        '3119321' : exchange buy 0.10 USDCHF at 0.00000
MD      0       Trades  14:00:22        '3119321' : deal #2888086 buy 0.10 USDCHF at 0.91146 done (based on order #4880071)
NS      0       Trades  14:00:23        '3119321' : accepted exchange buy 0.10 USDCHF at 0.00000
MH      0       Trades  14:00:23        '3119321' : exchange buy 0.10 USDCHF at 0.00000 placed for execution
IG      0       Trades  14:00:23        '3119321' : exchange buy 0.10 USDCHF at 0.00000
....

E o registo do Conselheiro Especialista

(EURUSD,H1)     14:00:18        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:18        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:19        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:20        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:21        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:21        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:22        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:23        CTrade::PositionOpen:  [placed]
(EURUSD,H1)     14:00:23        CTrade::PositionOpen:  [placed]
....

Por favor, diga-me, quando poderá haver uma situação em que uma ordem de mercado foi colocada no servidor mas não foi executada (mesmo parcialmente)?
Документация по MQL5: Торговые функции / OrdersTotal
Документация по MQL5: Торговые функции / OrdersTotal
  • www.mql5.com
Торговые функции / OrdersTotal - Документация по MQL5
 
olyakish:

Parece haver um erro em

Com o código de retorno 10008 (encomenda efectuada), este método retorna falso.

A ordem acaba, de facto, por ser executada.

Devido a isto, foram abertas mais do que o número necessário de encomendas na conta de demonstração.

E o diário de bordo dos peritos

Diga-me quando pode haver uma situação em que uma ordem de mercado é colocada no servidor mas não é executada (mesmo parcialmente)?

O mesmo problema é descrito logo no início da página. Encontra-se aqui descrito: https://www.mql5.com/ru/forum/1111/page679#comment_164002. Ainda não foi dada qualquer resposta.

//---

Onde tem a sua conta de demonstração aberta?

 
tol64:

O mesmo problema é descrito logo no início da página. Aqui está: https://www.mql5.com/ru/forum/1111/page679#comment_164002. Ainda não foi dada qualquer resposta.

//---

Onde tem a sua conta de demonstração aberta?

1. Atrasado para ver este fio.

2. Em A*****i.

E coloquei isto em humor no fórum 4, mas penso que deveria estar aqui também:

Estou a analisar os voos do Expert Advisor (MT5) e encontrei isto nos registos

.....(EURUSD,H1)        16:43:16        CTrade::PositionClose:  [not enough money]
... Onde ... na CD ????