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

 
Igor Golieniev:
NormalizeDouble(value,3);
 
Pavel Kolchin:

Вообще бред какой-то: начал модифицировать только что открытый ордер... и как!!! 1912619.624!!!

SILVER,M15: modify #1 sell 0.01 SILVER at 16.965 sl: 1912619.624 tp: 0.000 ok

 
Igor Golieniev:

Вообще бред какой-то: начал модифицировать только что открытый ордер... и как!!! 1912619.624!!!

SILVER,M15: modify #1 sell 0.01 SILVER at 16.965 sl: 1912619.624 tp: 0.000 ok

NormalizeDouble() - это функция которая сделает определенное количество знаков после запятой, она не исправит ошибки в коде, смотрите какие параметры вы передаете и откуда они берутся

 
Pavel Kolchin:

NormalizeDouble() - это функция которая сделает определенное количество знаков после запятой, она не исправит ошибки в коде, смотрите какие параметры вы передаете и откуда они берутся

Простой трал. НО: SILVER,H1: invalid stoploss for OrderModify function. Почему? Как исправить? На всех остальных рынках работает.
void Trailing()
  {
   if(Digits==3 || Digits==5)
     {
      TrailingStep *= 10;
      TrailingOpen *= 10;
      TrailingStop *= 10;
     }
   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>OrderOpenPrice()+TrailingOpen*Point)
                 {
                  if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep)*Point)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),0,0))
                        Print("Oshibka =", DoubleToString(OrderStopLoss(), Digits()));
                    }
                 }
              }
            if(OrderType()==OP_SELL)
              {
               if(Ask<OrderOpenPrice()-TrailingOpen*Point)
                 {
                  if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep)*Point)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*Point,Digits),0,0))
                        Print("Oshibka", DoubleToString(OrderStopLoss(), Digits()));
                    }
                 }
              }
           }
        }
     }
  }
 
Igor Golieniev:
Простой трал. НО: SILVER,H1: invalid stoploss for OrderModify function. Почему? Как исправить? На всех остальных рынках работает.

SYMBOL_TRADE_STOPS_LEVEL

 

Ошибка при компиляции

#define MACRO1( x, y )  x
#define MACRO2                  MACRO1( , unsigned )
void OnStart()
{
         MACRO2 int i; //Error: 'MACRO1' - undeclared identifier
}

Ожидалась замена на:

void OnStart()
{
                int i;
}
 

Ошибка при считывании профита (или я уже что-то не понимаю). 

Есть функция в рамках советника: 

bool Fn_profit_summ(double &profit_summ, bool is_buy, ulong magic, bool prnt=false){
   profit_summ = 0;
   string str=(is_buy?"B":"S")+" -> "; 
   //-----------------------------             
   int total = PositionsTotal();          
   for(int i=total-1; i>=0; i--){
      const ulong tic= PositionGetTicket(i); if(tic<=0)     return(false); //--- asinchr
      if(!PositionSelectByTicket(tic)                   )   return(false); //--- asinchr 
      bool is_buy_ = (PositionGetInteger(POSITION_TYPE  )==POSITION_TYPE_BUY); 
      if( is_buy_                             !=  is_buy)   continue; 
      if( PositionGetInteger(POSITION_MAGIC ) !=  magic )   continue;
      if( PositionGetSymbol (POSITION_SYMBOL) != _Symbol)   continue;
      profit_summ += PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
      str+=IntegerToString(tic)+" - "+DoubleToString((PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)), 2)+"/";
      }
   //-----------------------------
   if( prnt) Print(str+" --> "+DoubleToString(profit_summ, 2));
   return(true);}

В логе вижу: 

2018.02.21 01:44:04.315 2018.02.14 04:59:49   S -> 273 - -5.62/ --> -5.62

Все бы ничего, но это профит ордера бай, а не селл

Тикет точно ордера селл (273, как в логе)


В функции вроде же сигхронизацию проверила и тип же считался верно, но профит реально не тот. Если это так, то это же вообще апокалипсис - вот в клиента всего-то закрытие позиций селл и бай отдельно по достижению заданого профита/убытка и он постоянно закрывает селл т.к. берет профит бай. Так же и депо можно слить нечаянно

(если я переработала и мне уже чудится - поправте, пожалуйста. Искренне надеюсь что это так и настоко критичного бага нет)

 
Galina Bobro:

Ошибка при считывании профита (или я уже что-то не понимаю). 

Есть функция в рамках советника: 

В логе вижу: 

Все бы ничего, но это профит ордера бай, а не селл

Тикет точно ордера селл (273, как в логе)


В функции вроде же сигхронизацию проверила и тип же считался верно, но профит реально не тот. Если это так, то это же вообще апокалипсис - вот в клиента всего-то закрытие позиций селл и бай отдельно по достижению заданого профита/убытка и он постоянно закрывает селл т.к. берет профит бай. Так же и депо можно слить нечаянно

(если я переработала и мне уже чудится - поправте, пожалуйста. Искренне надеюсь что это так и настоко критичного бага нет)

string str=(!is_buy?"B":"S")+" -> ";
 
Kirill Belousov:
Это к чему? Зачем мне "если бай выводить S"?
 

Часто работаю с кастомными символами. Например, нужно вести отладку на таком. Для этого требуется сюда ввести его название


Но названия кастомных символов (да и не только кастомных) бывают длинные/сложные, что тяжело при вбивании их с клавиатуры. Механизма же копирования названия символа в буфер нигде нет. Поэтому предлагаю добавить в это меню пункт "Копировать название символа"


ЗЫ Добавьте в Визуализатор Тестера миллисекунды, пожалуйста!