Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1515

 
Vitaly Muzichenko #:

Сделал так

когда данные не получены, обновляем график

Но это даже не костыльное решение, а полное дилетантство

Как сделать нормальное решение, и почему так получается?

Посмотрите вот такой вариант.

bool f = false;
/****************Custom indicator iteration function*****************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

{
  if(!f)
  {
   f = true;
   return 0;
  }
 
Print(CopyBuffer(hMA1,0,10,1,buf),"=", buf[0]);
 return rates_total;
}/*****************************************************************/

Запускать синхронизацию, наверное будет дороже.

 
Alexey Viktorov #:

Посмотрите вот такой вариант.

Запускать синхронизацию, наверное будет дороже.

Спасибо, но вопрос о закрытом рынке - тиков нет, и OnCalculate срабатывает один раз при переключении таймфорейма

Я сделал так и это работает, но это не совсем нормальное условие

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  if(rates_total-prev_calculated==0)
    return(rates_total);
  int res=Start(rates_total); // если "0" - то данные от МА не получены
  if(fl && res==0) {
    ChartSetSymbolPeriod(0,Symbol(),PERIOD_CURRENT);
    ChartRedraw();
    fl=false;
    return(0);
  }
  return(rates_total);
}
 
Vitaly Muzichenko #:

Спасибо, но вопрос о закрытом рынке - тиков нет, и OnCalculate срабатывает один раз при переключении таймфорейма

Я сделал так и это работает, но это не совсем нормальное условие

Виталий, а может было бы полезней проверить?

 

Проверил.

Ваша конструкция идентична моей, но без ChartSetSymbolPeriod и проверки, что МА не вернула результат

Она начинает работать только вот так

bool f = false;
/****************Custom indicator iteration function*****************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

{
  if(!f)
  {
   f = true;
   ChartSetSymbolPeriod(0,Symbol(),PERIOD_CURRENT); // только так работает
   return 0;
  }
 
Print(CopyBuffer(hMA1,0,10,1,buf),"=", buf[0]);
 return rates_total;
}/*****************************************************************/
 

по какому критерию мне надо проводить тестирование если я хочу получить наибольший доход и наибольшую прибыль с минимальными просадками?


мнекажется мне нужно выбрать "Максимум комплексного критерия", я так и сделал но что означает цифра 40 в результате желтого цвета,  при просадке в 26 процентов и прибыли 675

я так понимаю это коэфицент текущего от стартового капитала в процентах дохода?

 
AkaEdie #:

по какому критерию мне надо проводить тестирование если я хочу получить наибольший доход и наибольшую прибыль с минимальными просадками?

мнекажется мне нужно выбрать "Максимум комплексного критерия", 

Выбрать "Максимум пользовательского критерия"

В код советника добавить, что то типа такого.

double OnTester(void)
  {
   double ret = TesterStatistics(STAT_PROFIT) / TesterStatistics(STAT_EQUITY_DD);

   return(ret);
  }
 
AkaEdie #мнекажется мне нужно выбрать "Максимум комплексного критерия", я так и сделал но что означает цифра 40 в результате желтого цвета,  при просадке в 26 процентов и прибыли 675

я так понимаю это коэфицент текущего от стартового капитала в процентах дохода?

Скорее всего, нет. Это просто число, вычисляемое по некоторой формуле из нескольких расчётных характеристик прохода в тестере. Эта формула написана так, что максимальное её значение равно 100. Соответственно, чем ближе к 100 результат, тем лучше. Если вы получаете 40, то это значит, что результаты не особо хороши, ниже средних.

 
Vitaly Muzichenko #:

Проверил.

Ваша конструкция идентична моей, но без ChartSetSymbolPeriod и проверки, что МА не вернула результат

Она начинает работать только вот так

Я не знаю что у вас там не так работает


Что-то гифка нормальная не получается. Ткни в неё…

 
Alexey Viktorov #:

Я не знаю что у вас там не так работает


Что-то гифка нормальная не получается. Ткни в неё…

Вот и Вы ткните, это тоже гифка

Как видим, не работает без ChartSetSymbolPeriod

работает только с родным периодом, на котором создана МА: hMA1=iMA(Symbol(), PERIOD_H1, MA1, 0, Metod_MA, Price_MA);

 

 
Vitaly Muzichenko #:

Вот и Вы ткните, это тоже гифка

Как видим, не работает без ChartSetSymbolPeriod

работает только с родным периодом, на котором создана МА: hMA1=iMA(Symbol(), PERIOD_H1, MA1, 0, Metod_MA, Price_MA);

 

Виталий, я только на гифке заметил что в коде

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  if(rates_total-prev_calculated==0)
    return(rates_total);
  int res=Start(rates_total); // если "0" - то данные от МА не получены
  if(fl && res==0) {
    ChartSetSymbolPeriod(0,Symbol(),PERIOD_CURRENT);
    ChartRedraw();
    fl=false;
    return(0);
  }
  return(rates_total);
}

Такая хрень.

 Удалите эти строки и попробуйте повторить.

Я не понимаю, зачем надо вносить свои поправки и говорить о том, что совет не работает…

потом на гифке у вас не тот индикатор который вы показываете тут…

Причина обращения: