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

 

После обновления перестала работать функция

ChartSetInteger(0,CHART_BRING_TO_TOP,0,true)

Не переключается на 0 график, в чем может быть ошибка?

void OnStart()
  {
   long currChart,prevChart=ChartFirst();
   int z=0,limit=100;
     while(z<limit)
     {
      currChart=ChartNext(prevChart);
      string __simvol=ChartSymbol(currChart);
      ENUM_TIMEFRAMES __period=ChartPeriod(currChart);
      if(currChart==-1)
        {
         __simvol=Symbol();
         currChart=0;
        };
         if(!ChartSetInteger(currChart,CHART_BRING_TO_TOP,0,true))
        {
         //--- выведем сообщение об ошибке в журнал "Эксперты"
         Print(__FUNCTION__+", Error Code = ",GetLastError());
         //return(false);
        };
      Print(currChart, "  ", __simvol);

      Sleep(2000);
      if(currChart==0)
         {break;};
     prevChart=currChart;
      z++;

     };
  }
 

Прошу помощи.

Как на левом символе узнать цену маркет-ордера?


На примере советника.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

input int inTP = 100; // Размер тейка.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrdersTotal()) // Если нет текущих ордеров
  {
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, Ask + inTP * _Point);  // Купили с тейком.
    OrderSend(_Symbol, OP_SELL, 0.1, Bid, 0, 0, Bid - inTP * _Point); // Продали с тейком.
  }
}


Результат бэктеста.

Нужно знать цены помеченных нулей. Когда речь касается SL/TP - их можно достать из комментария. А вот когда сам делаешь маркет-ордер (не зеленые нули на скрине) - откуда взять?


Это нужно для оценки проскальзываний. Например, в Терминале видите хорошую цену, жмете купить. Сделка прошла. Хотелось бы потом понять, насколько цена сделки отличается от той, что была в Терминале, когда нажимали. Такое ощущение, что MT5 не позволяет сделать простейшего анализа!


Или, например, хотите исследовать влияние функционала задержек Тестера на результат советника. Для этого нужно оценить, каким становилось проскальзывание. А этого не сделать. Точнее, у меня не получается.


Вопрос, как узнать цену маркет-ордера, если она в MqlTradeRequest задавалась ненулевой?

 
fxsaber:

Вопрос, как узнать цену маркет-ордера, если она в MqlTradeRequest задавалась ненулевой?

замена маркета на лимитку с фиксированным запасом не поможет?

[Удален]  
SEM:

После обновления перестала работать функция

Не переключается на 0 график, в чем может быть ошибка?

у меня похожая функция - смена шаблона на графике. до обновления всё работало отлично, теперь меняет но, на одном графике может получится, несколько окон с шаблоном 

//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void DeleteChart(void)
  {
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   bool errTemplate;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(TimeFrame!=PERIOD_CURRENT)
        {
         ChartSetSymbolPeriod(prevChart,ChartSymbol(prevChart),TimeFrame);
        }
      errTemplate=ChartApplyTemplate(prevChart,Template+".tpl");
      if(!errTemplate)
        {
         Print("Error ",ChartSymbol(prevChart),"-> ",GetLastError());
        }
      if(currChart<0)
         break;
      Print(i,ChartSymbol(currChart)," ID =",currChart);
      prevChart=currChart;
      i++;
     }
  }
//+------------------------------------------------------------------+
 
fxsaber:

Или, например, хотите исследовать влияние функционала задержек Тестера на результат советника. Для этого нужно оценить, каким становилось проскальзывание. А этого не сделать. Точнее, у меня не получается.

В Тестере получилось это сделать штатным способом. Заменяем значение поля исполнения, как на скрине.


Результат.


Нули изчезли, можно оценивать проскальзывания в Тестере. Для Реала проблема открытая.

 
Andrei Trukhanovich:

замена маркета на лимитку с фиксированным запасом не поможет?

Не поможет, потому как не биржевой лимитник в Тестере исполняется на следующем тике, а не текущем. Как на большинстве реалов.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Лимитники/тейки по текущей цене в Терминале (не в Тестере)

fxsaber, 2020.05.19 11:17

MT5


Другая платформа


На MT5 несколько раз пытался записать видео, т.к. хотелось, чтобы видео было коротким - исполнение произошло за несолько секунд.

 
SanAlex:

у меня похожая функция - смена шаблона на графике. до обновления всё работало отлично, теперь меняет но, на одном графике может получится, несколько окон с шаблоном 

У меня тоже самое, обойти баг можно сперва закрыть потом открыть график, второе и дальнейшее применение шаблона дублирует окна

В примере применение пустого шаблона несколько раз


 
Aleksander:

нее - я действительно в первый раз стал использовать сервис Сигналы... и что я вижу? то так считают проценты то эдак... а на следующей неделе что мне ждать в виджете? опять 0%???

у меня возникает когнитивный диссонанс - когда я тут вижу одно - а тут я вижу другое - и чему мне верить тогда????

как это так в виджетах расчитываются проценты???

Виджет показывает данные которым "как бы можно верить". А эту цифру в 4333% можете распечатать и повесить на стенку.

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



 

Не работает CHART_BRING_TO_TOP

void OnStart()
{
        long first = ChartFirst();
        long next  = ChartNext( first );
        ChartSetInteger( next , CHART_BRING_TO_TOP, 0, true );
        ChartSetInteger( first, CHART_BRING_TO_TOP, 0, true );
}

Запускаем скрипт на 1ом (левом) графике... результат:

Фокус на 2ом (правом) графике, а должен был вернуться на 1ый (левый)

Не знаю с какого выпуска появилась эта ошибка, но раньше (build  2085) все нормально работало

 
A100:

Не работает CHART_BRING_TO_TOP

Запускаем скрипт на 1ом (левом) графике... результат:

Фокус на 2ом (правом) графике, а должен был вернуться на 1ый (левый)

Не знаю с какого выпуска появилась эта ошибка, но раньше (build  2085) все нормально работало

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

SEM, 2020.08.08 10:31

После обновления перестала работать функция

ChartSetInteger(0,CHART_BRING_TO_TOP,0,true)

Не переключается на 0 график, в чем может быть ошибка?

void OnStart()
  {
   long currChart,prevChart=ChartFirst();
   int z=0,limit=100;
     while(z<limit)
     {
      currChart=ChartNext(prevChart);
      string __simvol=ChartSymbol(currChart);
      ENUM_TIMEFRAMES __period=ChartPeriod(currChart);
      if(currChart==-1)
        {
         __simvol=Symbol();
         currChart=0;
        };
         if(!ChartSetInteger(currChart,CHART_BRING_TO_TOP,0,true))
        {
         //--- выведем сообщение об ошибке в журнал "Эксперты"
         Print(__FUNCTION__+", Error Code = ",GetLastError());
         //return(false);
        };
      Print(currChart, "  ", __simvol);

      Sleep(2000);
      if(currChart==0)
         {break;};
     prevChart=currChart;
      z++;

     };
  }