Ошибки, баги, вопросы - страница 3174

 
Ilyas #:

При создании графического объекта графика, в имени необходимо добавить например ID чарта на котором он будет рисоваться:


В противном случае, имя графического ресурса на обоих графиках будет одинаковым, а так как графические ресурсы глобальные для терминала, то обе програмы будут работать с одним и тем же ресурсом (т.е. рисовать в одно и то же полотно).

Имя ресурса графического объекта не может превышать 63 символа. Если к имени ещё добавить идентификатор чарта, то для вменяемого читаемого имени остаётся весьма не много места, к сожалению.

 
a18 #:

Всем привет! Надеюсь, пишу по адресу (но если что - подскажите более релевантное место).

Речь про пропадание алёртов в MT5 (версия 5.00 build 3260, Just2Trade).

Суть: если добавить (или изменить) алёрты и без закрытия окна просто перезагрузить компьютер (Пуск-Выключение-Перезагрузка),
то все изменения в алёртах исчезают. А чтобы сохранились - надо оказывается не забыть закрыть окно терминала крестиком.

КМК это довольно жёсткая бага, которую нужно фиксить.

Исправлено, будет в бета-версии.

 
Ошибка при компиляции:
template<typename T>
struct A {
    T *t;
};
void OnStart()
{
    A<void> a; //Error: 'void' - expression of 'void' type is illegal
}
 
A100 #:
Ошибка при компиляции:
class A {};

void* t = new A;

Указатели стали адресами в MQL или как это теперь понимать?

 
fxsaber #:

Указатели стали адресами в MQL или как это теперь понимать?

Да, вроде ничего не менялось (в build 2949 аналогично). Указатель на класс и раньше можно было привести к void *

 

Есть ли какойто способ побороть клик на обьект через обьект.

допустия я создаю TrendLine и затем прямо над ней находится BitmapLabel который ее полностю закрывает и если кликнуть прямо на том месте где под  BitmapLabel  находится  TrendLine  она начинает двигатся

прилагаю видео этого.

 
William Roeder #:

Ваш брокер напортачил. Поговорите с ними.

Я понимаю, что возможно брокер забыл что-то правильно настроить в настройках некоторых символов, но это проблема не только моего брокера, у моего клиента тоже есть такая проблема с другим брокером.

И сегодня у нас нет альтернативы для OrderCalcMargin(). Если эта функция возвращает неверное значение требуемой маржи, то все остальные пользовательские функции также возвращают неверное значение.

OrderCalcMargin часто используется во многих торговых инструментах, которые помогают увидеть требуемую маржу клиента и правильно рассчитать лот.

Что же делать? Может быть, можно как-то получить такую формулу, которая не будет зависеть от человеческого фактора? Некоторые брокеры все правильно настроят, а многие нет. И мы всегда будем получать эту ошибку с неправильной маржой.

 
Aleksei Beliakov #:

Есть ли какойто способ побороть клик на обьект через обьект.

допустия я создаю TrendLine и затем прямо над ней находится BitmapLabel который ее полностю закрывает и если кликнуть прямо на том месте где под  BitmapLabel  находится  TrendLine  она начинает двигатся

прилагаю видео этого.

Возможно как-то через OBJPROP_SELECTABLE сделать... Допустим нажатием определенной клавиши (или кнопки на графике) блокировать или разблокировать выделение объекта

 

Предположу что было-бы удобно если б компилятор показывал предупреждение если во вложении, которое находится после OrderSelect(), находится еще вызов(ы) OrderSelect(),  в тч через вызовы функций

Вчера весь вечер баг искал, и это уже второй раз по этой причине. 

void Trailing()
{
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber()==magic)
         {
            if(OrderType() == OP_BUY)
            {
               if(Bid >= GetAveragePrice(OP_BUY)+start_tral_level*Point)//OrderOpenPrice()
               {
                  if(Bid >= OrderStopLoss()+(tral_stop+tral_step)*Point || OrderStopLoss()==0)
                  {
                     if(!OrderModify(OrderTicket(), OrderOpenPrice()
                     , NormalizeDouble(Bid-tral_stop*Point, Digits), OrderTakeProfit(), OrderExpiration())) 
                     {
                        Print("Trailing buy err ", GetLastError());
                     }
                  }
               }
            }
            if(OrderType()==OP_SELL)
            {
               if(Ask <= GetAveragePrice(OP_SELL)-start_tral_level*Point)//OrderOpenPrice()
               {
                  if(Ask <= OrderStopLoss()-(tral_stop+tral_step)*Point || OrderStopLoss()==0)
                  {
                     if(!OrderModify(OrderTicket(), OrderOpenPrice()
                     , NormalizeDouble(Ask+tral_stop*Point, Digits), OrderTakeProfit(), OrderExpiration())) 
                     {
                        Print("Trailing sell err ", GetLastError());
                     }
                  }   
               }   
            }   
         }
      }
   }
}
double GetAveragePrice(int in_type)//расчет средней цены позиций
{
   double dRes=-1;
   double dSum=0;
   double dLot=0;
   double dComission=0;
   double dSwap=0;
   int iTotalPos=OrdersTotal();
   for(int cnt=0;cnt<iTotalPos;cnt++)
   {
      if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) Print( "Error Select Order");
      {
         if(OrderType()==in_type && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
         {
            dSum+=OrderOpenPrice()*OrderLots();
            dLot+=OrderLots();
            dSwap+=OrderSwap();
            dComission+=OrderCommission();
         }
      }    
   }     
   if(in_type==OP_BUY && dLot!=0) dRes=dSum/dLot-dSwap/dLot*Point-dComission/dLot*Point;
   if(in_type==OP_SELL && dLot!=0) dRes=dSum/dLot+dSwap/dLot*Point+dComission/dLot*Point;
   
   return dRes;
}
 
Andrei Sokolov #:

Предположу что было-бы удобно если б компилятор показывал предупреждение если во вложении, которое находится после OrderSelect(), находится еще вызов(ы) OrderSelect(),  в тч через вызовы функций

Вчера весь вечер баг искал, и это уже второй раз по этой причине. 

Ещё пару таких дней и вам не нужны будут предупреждения.