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

 
Renat Fatkhullin:
Тесты надо уметь делать правильно и очень аккуратно.

проводить тесты не планировалось,  нужно было только оценить возможности

ОК, будем считать, что в такой витиеватой форме, Вы отказались, я предложил выше исходники VS

 

Доброго времени суток!

Функция трейлинга.

Подскажите в чем косяк Выдает 4756 ошибка в тестере стратегий. Запускаю в скрипте, работает.

int Tralling(int PointsTral=200)
  {
   MqlTradeRequest Request;
   MqlTradeResult Result;
   int PosTot, i, digits;
   string Symbols[]= {""};
   double SymbPt,sl,tp,
          PriceOpen[]= {0};
   i=0;
   PosTot= PositionsTotal();
   if(PosTot>0)
     {
      while(i<PosTot)
        {
         Symbols[i] = PositionGetSymbol(i);
         digits=(int)SymbolInfoInteger(Symbols[i],SYMBOL_DIGITS);
         if(PositionSelect(Symbols[i]))
           {
            PriceOpen[i] = PositionGetDouble(POSITION_PRICE_OPEN);
            SymbPt = SymbolInfoDouble(Symbols[i],SYMBOL_POINT);
            if(PositionGetInteger(POSITION_TYPE) == 0)
              {
               if(SymbolInfoDouble(Symbols[i],SYMBOL_BID) >= PriceOpen[i]+(SymbPt*PointsTral))
                 {
                  if(SymbolInfoDouble(Symbols[i],SYMBOL_BID)>PositionGetDouble(POSITION_SL)+(SymbPt*PointsTral))
                    {
                     sl=SymbolInfoDouble(Symbols[i],SYMBOL_BID)-(SymbPt*PointsTral);
                     tp=PositionGetDouble(POSITION_TP);
                     Request.action=TRADE_ACTION_SLTP;
                     Request.symbol = Symbols[i];
                     Request.sl=NormalizeDouble(sl,digits);
                     Request.tp=NormalizeDouble(tp,digits);
                     Request.position=PositionGetInteger(POSITION_TICKET);
                     if(!OrderSend(Request,Result))
                        Alert("Ошибка Треллинга ",GetLastError());
                    }
                 }
              }

            if(PositionGetInteger(POSITION_TYPE) == 1)
              {
               if(SymbolInfoDouble(Symbols[i],SYMBOL_ASK) <= PriceOpen[i]-(SymbPt*PointsTral))
                 {
                  if(SymbolInfoDouble(Symbols[i],SYMBOL_ASK)<PositionGetDouble(POSITION_SL)-(SymbPt*PointsTral))
                    {
                     sl=SymbolInfoDouble(Symbols[i],SYMBOL_ASK)+(SymbPt*PointsTral);
                     tp=PositionGetDouble(POSITION_TP);
                     Request.action=TRADE_ACTION_SLTP;
                     Request.symbol = Symbols[i];
                     Request.sl=NormalizeDouble(sl,digits);
                     Request.tp=NormalizeDouble(tp,digits);
                     Request.position=PositionGetInteger(POSITION_TICKET);
                     if(!OrderSend(Request,Result))
                        Alert("Ошибка Треллинга ",GetLastError());
                    }
                 }
              }

           }
         else
           {
            Alert("Не удалось выделить оредер по символу. ", Symbols[i], " Ошибка ", GetLastError());
           }
         i++;
        }
     }
   return (1);
  }

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 

Доброго времени суток!

Не могу найти ошибку. Это Tralling stop. Если кидаю его скриптом на график, то срабатывает. В тестере стратегий возвращает ошибку 4756 (Невозможно отправить на сервер)

Помогите пожалуйста!

int Tralling(int PointsTral=200)
  {
   MqlTradeRequest Reques;
   MqlTradeResult Result;
   int PosTot, i, digits;
   string Symbols;
   double SymbPt,sl,tp,
          PriceOpen;
   i=0;
   PosTot= PositionsTotal();
   if(PosTot>0)
     {
      while(i<PosTot)
        {
         Symbols = PositionGetSymbol(i);
         digits=(int)SymbolInfoInteger(Symbols,SYMBOL_DIGITS);
         if(PositionSelect(Symbols))
           {
            PriceOpen = PositionGetDouble(POSITION_PRICE_OPEN);
            SymbPt = SymbolInfoDouble(Symbols,SYMBOL_POINT);
            if(PositionGetInteger(POSITION_TYPE) == 0)
              {
               if(SymbolInfoDouble(Symbols,SYMBOL_BID) >= PriceOpen+(SymbPt*PointsTral))
                 {
                  if(SymbolInfoDouble(Symbols,SYMBOL_BID)>PositionGetDouble(POSITION_SL)+(SymbPt*PointsTral))
                    {
                     sl=SymbolInfoDouble(Symbols,SYMBOL_BID)-(SymbPt*PointsTral);
                     tp=PositionGetDouble(POSITION_TP);
                     Reques.action=TRADE_ACTION_SLTP;
                     Reques.symbol = Symbols;
                     Reques.position=PositionGetInteger(POSITION_TICKET);
                     Reques.sl=NormalizeDouble(sl,digits);
                     Reques.tp=NormalizeDouble(tp,digits);
                     if(!OrderSend(Reques,Result))
                        Alert("Ошибка Треллинга ",GetLastError());
                    }
                 }
              }

            if(PositionGetInteger(POSITION_TYPE) == 1)
              {
               if(SymbolInfoDouble(Symbols,SYMBOL_ASK) <= PriceOpen-(SymbPt*PointsTral))
                 {
                  if(SymbolInfoDouble(Symbols,SYMBOL_ASK)<PositionGetDouble(POSITION_SL)-(SymbPt*PointsTral))
                    {
                     sl=SymbolInfoDouble(Symbols,SYMBOL_ASK)+(SymbPt*PointsTral);
                     tp=PositionGetDouble(POSITION_TP);
                     Reques.action=TRADE_ACTION_SLTP;
                     Reques.symbol = Symbols;
                     Reques.position=PositionGetInteger(POSITION_TICKET);
                     Reques.sl=NormalizeDouble(sl,digits);
                     Reques.tp=NormalizeDouble(tp,digits);
                     if(!OrderSend(Reques,Result))
                        Alert("Ошибка Треллинга ",GetLastError());
                    }
                 }
              }

           }
         else
           {
            Alert("Не удалось выделить оредер по символу. ", Symbols[i], " Ошибка ", GetLastError());
           }
         i++;
        }
     }

   return (1);
  }
 
Igor Makanu:

проводить тесты не планировалось,  нужно было только оценить возможности

ОК, будем считать, что в такой витиеватой форме, Вы отказались, я предложил выше исходники VS

Вы сделали исключительное заявление и не смогли его доказать. Кроме того, вы не в первый раз выкладываете dll, что запрещено.

Исходников для воспроизведения не вижу.

 
Renat Fatkhullin:

Вы сделали исключительное заявление и не смогли его доказать. Кроме того, вы не в первый раз выкладываете dll, что запрещено.

Исходников для воспроизведения не вижу.

Исключительность заявления в чем проявляется? Вижу лишь, что замер производительности для старого терминала показал очень хорошие результаты, имхо, как говорится - добротная вещь сделанная на века

Проверил сегодня на ПК, результаты один в один МТ4/МТ5 , проверил еще раз на ноутбуке, тоже не увидел различий, высока вероятность, что в фоне какая служба Win10 во время теста "грызла диск", время активной работы на ноуте не настраивал, Вин сама ночное время по умолчанию выставила.

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


Из багов нового билда:

это не правильная информация в логе терминала:

2020.05.06 19:03:03.895 Terminal Windows 10 build 18363, Intel Core i3  M 380 @ 2.53GHz, 0 / 2 Gb memory, 149 / 237 Gb disk, IE 11, UAC, GMT+4

 в диспетчере задач Вин  свободных 920 Мб из 2,97 Гб ,  в предыдущих билдах была более правильная информация о системе

 
У меня вопрос, как сейчас можно найти бесплатные сигналы? Я периодически в ручную нахожу их, а на странице сигналов только платные. Фильтр по стоимости не дает возможность их найти.
 
Перекомпиляция библиотеки, подключенной к эксперту, который выбран в тестере, не приводит к её подхвату при следующем запуске. Приходится выбирать другой эксперт в тестере, потом переключаться на прежний. Только тогда тестер подхватывает новую библиотеку. Совершенно неочевидный баг.
[Удален]  
Stanislav Korotky:
Перекомпиляция библиотеки, подключенной к эксперту, который выбран в тестере, не приводит к её подхвату при следующем запуске. Приходится выбирать другой эксперт в тестере, потом переключаться на прежний. Только тогда тестер подхватывает новую библиотеку. Совершенно неочевидный баг.

В стабильной версии то же самое...

 
Баг МТ5 (build 2407) ошибка компиляции, когда класс содержит указатель на класс-обертку, который использует данный класс как поле.
C++ online: https://onlinegdb.com/SJN1shM58
template<typename T>
class wrapper{
public:
   T data;
};

class B{
public:
   wrapper<B>* ptr;             // undefined class 'B' cannot be used
};


void OnStart(){  
   B b;
   b.ptr = new wrapper<B>();
   printf("%p", b.ptr);
} 
 
Ошибка при компиляции:
int i = f(); //Error: 'f' - undeclared identifier
void OnStart()
{
}
int f() { return 0; }

а так:

void OnStart()
{
int i = f(); //нормально
}
int f() { return 0; }

нормально. А какая разница?