Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2245

 
Vladimir Simakov #:

Общий подход такой

Хм.. А если условный OnStart тоже член класса CSignalAMA, и создание экземпляра класса производится совсем в другом месте и в другое время? (п.с. разговор идёт в рамках архитектуры стандартного советника из примеров)

Каким образом мне переписать мой код чтобы оно скомпилировалось?

Должна получиться вот такая штука за той разницей что все функции - члены класса. Но если их делать членами класса - вылезает 'multiply' - pointer to this function type is not supported yet

typedef int (*TFunc)(int, int);


int multiply(int x, int y) {
   return x * y;
}

int doWork(TFunc callback) {
   return callback(3, 3);
}

void OnStart(){
   Print(doWork(multiply));
 
}

 

Что же теперь маркету надо, кто подскажет?


 

Добрый день всем.

В коде эксперта MQL5 попробовал создать пользовательский инструмент с помощью CustomSymbolCreate

При прогоне в тестере инструмент не создается, GetLastError() выдает ошибку

ERR_FUNCTION_NOT_ALLOWED

4014

Системная функция не разрешена для вызова


Выходит, в коде эксперта нельзя создавать пользовательские инструменты?
 

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

Вот фрагмент моего кода для тестера на mql4

int CH[24][3],D,D1,D2,D3;
double S5[20][7],S6[4000][4],G1=0.002,Sl,bD,X,Pt1;

void OnTick()
{
код
if (Ask>=S5[R][4])
{
D=1;
}
код
}

ПРОБЛЕМА

В большинстве случаев при равенстве Ask и S5[R][4] программа присваивает D единицу. Ask  всегда подходит к S5[R][4]  снизу вверх. Но в некоторый случаях  при равенстве Ask и S5[R][4] программа НЕ присваивает  D единицу , не смотря на то , что  Print() показывает, что   Ask и S5[R][4] равны между собой с точностью до 5 знака. То есть программа почему то не видит их равенства

Если  Ask > S5[R][4] программа присваивает D единицу всегда Для решения этого проблемы я нормализовывал до 5 знака  S5[R][4]. Не помогло.

Программа НЕ присваивает D единицу в  случаях  когда Ask дошла снизу вверх до значения  S5[R][4] , а на последующих тиках  Ask ушла безвозвратно вниз.

Подскажите пожалуйста как сделать так что бы во всех случаях равенства между  Ask и  S5[R][4] программа  присваивала D единицу.
Всем спасибо за помощь.

 
Tretyakov Rostyslav #:

Не знаю с чем это связано, если поставить в RSI  цены открытия, то работает корректно


Ivan Butko #:
Подскажите, пожалуйста, как работать с гистограммой?

Беру объемы, код маленький, вставляю условие (если РСИ текущий больше, чем предыдущий - столбец зеленый) и сам размер столбца - это абсолютная разница между двумя значениями. 

И нифига - рандомные результаты, то размер столбцов не соответсвует движению РСИ, то цвет. 

Пробовал разворачивать буферы, чтобы считались, как тайм-серия, инициализации в 0 всякие. Ничего не помогает. А вот сами объемы правильно ведь рисует


Я балда. Вместо

if (prev_calculated > 0) count = rates_total - prev_calculated + 1;

Написал

if (prev_calculated > 0) count = rates_total - prev_calculated - 1;

перед тем, как обратил массив в тайм-серию

Проблема решена

 
ANDREY #:

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

Вот фрагмент моего кода для тестера на mql4

ПРОБЛЕМА

В большинстве случаев при равенстве Ask и S5[R][4] программа присваивает D единицу. Ask  всегда подходит к S5[R][4]  снизу вверх. Но в некоторый случаях  при равенстве Ask и S5[R][4] программа НЕ присваивает  D единицу , не смотря на то , что  Print() показывает, что   Ask и S5[R][4] равны между собой с точностью до 5 знака. То есть программа почему то не видит их равенства

Если  Ask > S5[R][4] программа присваивает D единицу всегда Для решения этого проблемы я нормализовывал до 5 знака  S5[R][4]. Не помогло.

Программа НЕ присваивает D единицу в  случаях  когда Ask дошла снизу вверх до значения  S5[R][4] , а на последующих тиках  Ask ушла безвозвратно вниз.

Подскажите пожалуйста как сделать так что бы во всех случаях равенства между  Ask и  S5[R][4] программа  присваивала D единицу.
Всем спасибо за помощь.

Вместо прямого сравнивания вещественных чисел сравнивайте нормализованную разницу этих чисел с нулём или допустимым отклонением.

 

Приветствую! Не получается применить шаблон к графику.

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
   {
  long op=-1;
  
   op=ChartOpen("GBPUSD",15);
   
    if(FileIsExist("temp.TPL",FILE_COMMON))
     {
      Print("Шаблон temp.TPL найден в каталоге \\Files'"," op =",op);
      //--- применим найденный шаблон
      if(ChartApplyTemplate(op,"\\Files\\temp.TPL"))
        {
         Print("Применили успешно шаблон 'temp.TPL'");
         //--- принудительно перерисуем график для быстрого показа изменений
         ChartRedraw();
        }
      else
         Print("Не удалось применить шаблон 'temp.TPL', ошибка ",GetLastError());
     }
     else
         Print("Файл 'temp.TPL' не найден в папке "
            +TerminalInfoString(TERMINAL_PATH)+"\\MQL4\\Files");
   }
//+------------------------------------------------------------------+

2023.08.20 19:24:40.236 test USDCAD,H1: Не удалось применить шаблон 'temp.TPL', ошибка 5020

2023.08.20 19:24:40.235 test USDCAD,H1: Шаблон temp.TPL найден в каталоге \Files' op =133370222801469933


 
Alexey Viktorov #:

Вместо прямого сравнивания вещественных чисел сравнивайте нормализованную разницу этих чисел с нулём или допустимым отклонением.

Спасибо за ценную информацию.

 
Galim_V #:

Приветствую! Не получается применить шаблон к графику.

2023.08.20 19:24:40.236 test USDCAD,H1: Не удалось применить шаблон 'temp.TPL', ошибка 5020

2023.08.20 19:24:40.235 test USDCAD,H1: Шаблон temp.TPL найден в каталоге \Files' op =133370222801469933


 Утро вечера мудренее. Разобрался. Спасибо.

 
Galim_V #:

 Утро вечера мудренее. Разобрался. Спасибо.

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

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