Erros, bugs, perguntas - página 2380

 
bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = NULL)
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...
 
fxsaber:

A lógica que já existe está quebrada.

Isto é mais interessante.

bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = "")
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...

Se não alterarmos as chamadas, o comentário será substituído como antes.

Se aprovarmos explicitamente o NULL, copiamos o comentário existente

 
Slava:

A lógica que já existe está a ser violada.

Ninguém usa essa lógica. Mais uma razão para o utilizar.

 
Slava:

A lógica que já existe está quebrada.

Isto é mais interessante.

Se não alterar os desafios, o comentário será substituído como antes.

Se passar explicitamente NULL, então copie o comentário existente

Por favor, dê uma vista de olhos e

bool CTrade::PositionClose(const string symbol,const ulong deviation)

faz 10 (!!!) tentativas de fechar uma posição:( Tive situações deste tipo ao depurar (Netting, Real, Abertura):

2019.01.28 16:58:11.764 57384742        Si-3.19 buy     in      1.00    66492   98591318        -1.03   0.00    0.00            Price=66493
2019.01.28 17:01:14.586 57384818        Si-3.19 sell    out     1.00    66503   98591566        0.00    0.00    11.00           
2019.01.28 17:01:14.598 57384819        Si-3.19 sell    in      1.00    66502   98591567        -1.03   0.00    0.00            
2019.01.28 17:04:16.067 57385000        Si-3.19 buy     out     1.00    66514   98591891        0.00    0.00    -12.00          

a linha realçada é a 2ª tentativa de fechar uma posição :) Como se pode ver pelos registos, não foi totalmente bem sucedido.

Neste momento, estou a utilizá-lo:

bool CTrade::PositionClose(const ulong ticket,const ulong deviation)

Já existe uma tentativa de fechar posição por código. Parece correcto deixar o utilizador controlar o facto de fecho de posição. 10 tentativas não é uma panaceia

 
Slava:

A lógica que já existe está quebrada.

Isto é mais interessante.

Se não alterarmos as chamadas, o comentário será substituído como antes.

Se aprovarmos explicitamente o NULL, copiamos o comentário existente

Ou talvez seja mais conveniente.

bool CTrade::PositionClosePartial(const ulong ticket,const double volume,const ulong deviation,const string comment = NULL)
{
...
  m_request.comment = (comment == NULL) ? ::PositionGetString(POSITION_COMMENT) : comment;
...

Então, quem quer que precise, escreverá por cima com um valor vazio. O valor por defeito será copiado.

 

Caros programadores!

O terminal foi actualizado para 1983. Existem alguns erros estranhos no testador ao criar objectos gráficos (estou a criar linhas verticais e linhas de tendência). Em 1981 tudo era normal.

Agora recebo erros 4001.

Código de criação:

//+------------------------------------------------------------------+
//| Создаем трендовую линию на чарте                                                                                    |
//+------------------------------------------------------------------+
void DrawTrendLine(const string id,// Строковый идентификатор
                   const datetime t1,         // Время первой точки линии
                   const datetime t2,         // Время второй точки линии
                   const double price,// Цена обеих точек линии
                   const color clr            // Цвет линии
                   )
  {
//--- Формируем имя линии
   const string name=_prefix+id+TimeToString(t1)+"_"+TimeToString(t2);
//--- Сбрасываем код последней ошибки
   ResetLastError();
//---
//Print( __FUNCTION__,": Создаем тренд-линию "+name+": t1 = "+TimeToString( t1 )+", t2 = "+TimeToString( t2 )+", price = "+DoubleToString( price ) );
//--- Создаем объект, проверяем создание
   if(ObjectCreate(0,name,OBJ_TREND,0,t1,price,t2,price))   // Если объект создан
     {
      //--- Меняем свойства линий
      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
      ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,false);
      ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
     }
   else                                                 // Если объект не создан
   Print(__FUNCTION__,": ОШИБКА #",GetLastError(),": Объект '"+name+"' не построен! t1 = "+TimeToString(t1)+", t2 = "+TimeToString(t2)+", price = "+DoubleToString(price));
  }
//+------------------------------------------------------------------+
//| Создаем вертикальную линию на чарте                              |
//+------------------------------------------------------------------+
void DrawVLine( const string id,         // Строковый идентификатор
               const datetime time      // Время
               )
  {
//--- Формируем имя линии
   const string name=_prefix+id+TimeToString(time);
//--- Сбрасываем код последней ошибки
   ResetLastError();
//--- Создаем объект, проверяем создание
   if(ObjectCreate(0,name,OBJ_VLINE,0,time,0))   // Если объект создан
     {
      //--- Меняем свойства линий
      ObjectSetInteger(0,name,OBJPROP_COLOR,_vLineClr);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
     }
   else                                                 // Если объект не создан
   Print(__FUNCTION__,": ОШИБКА #",GetLastError(),": Объект '"+name+"' не построен! t1 = "+TimeToString(time));
  }
 
Além disso, os comentários no provador já não são exibidos.
 

Pergunta para programadores.

A funçãomytrade.PositionClose(conststring symbol,ulong deviation=ULONG_MAX) da biblioteca padrão está a faltar um parâmetro de comentário:conststring comment=""".

É um lapso?

 

Parece mais apropriado escrever aqui:

https://www.mql5.com/ru/forum/302709#comment_10570043

Вопросы по проектам / папки Projects и Shared Projects
Вопросы по проектам / папки Projects и Shared Projects
  • 2019.02.08
  • www.mql5.com
Попытался начать работать с проектами, но что-то не ладится. Допустим, уже есть исходный файл с инклудами...
 
Remover STATUS_TERMINAL_PATH da Documentação.
Razão: