Ваши вопросы по языку MQL4

AlexeyVik

Программист mql4 mql5
Здравствуйте!
Хочу задать такой вопрос по поводу ограничения работы советников во времени.
Если мы хотим ограничить торговлю советника в режиме реального времени, то это можно сделать с помощью условия в начале void OnTick() { if(TimeCurrent() > D'дата и время') return;.....}. Но только вот до этой даты советника можно тестировать в тестере стратегий МТ4, т.к. текущее время моделируется на период теста. Можно ли как-то сделать, чтоб при достижении указанной даты нельзя было также использовать советника и в тестере стратегий?
Спасибо.
Не сочти за грубость, но вот вопрос: А вместо написания всего этого не мог проверить как работает TimeCurrent() в тестере? Религия не позволяет? Зачем слушать всякую ахинею по поводу dll и прочих извращений?
В твоём вопросе полный ответ на него. И условие написано правильно, и понимание что время моделируется... Всё есть кроме смелости проверить.
 

ansol

Местный знаток
Не сочти за грубость, но вот вопрос: А вместо написания всего этого не мог проверить как работает TimeCurrent() в тестере? Религия не позволяет? Зачем слушать всякую ахинею по поводу dll и прочих извращений?
В твоём вопросе полный ответ на него. И условие написано правильно, и понимание что время моделируется... Всё есть кроме смелости проверить.

Ты вопрос не понял, видимо. Например, сов работает до 15.02.2016 с помощью TimeCurrent(). После 15.02.2016 он работать перестает, но тестер до 15.02.2016 гонять можно легко даже летом 2016 года.
Как это запретить, я не знаю, ты, похоже, тоже не знаешь, да еще хамишь.
 

AlexeyVik

Программист mql4 mql5
Ты вопрос не понял, видимо. Например, сов работает до 15.02.2016 с помощью TimeCurrent(). После 15.02.2016 он работать перестает, но тестер до 15.02.2016 гонять можно легко даже летом 2016 года.
Как это запретить, я не знаю, ты, похоже, тоже не знаешь, да еще хамишь.
Чтобы моё возмущение не приняли за хамство, я написал: "Не сочти за грубость".
Ну видимо я действительно не так понял вопрос. В таком случае ответ однозначный "НИКАК". Мне кажется уже не осталось таких пользователей которые не умеют перевести дату компьютера взад. И никакие dll и прочие извращения не помогут по той простой причине, что это время не читается по солнцу, а устанавливается шаловливыми руками. Ну разве что через свой сервер на котором поменять дату можешь только сам.
Тогда возникает другой вопрос: "А какова цель такого запрета". Ну потестируют до указанной даты несколько раз... Потом надоест видеть одно и то-же и полетит советник мимо корзины.
 

RoboMaks

Элитный участник
сов работает до 15.02.2016 с помощью TimeCurrent(). После 15.02.2016 он работать перестает, но тестер до 15.02.2016 гонять можно легко даже летом 2016 года.

А откуда в тестере данные TimeCurrent() лета 2016 года? Он сегодня даже ещё и 15.02.2016 смоделировать не может...
 

Andy200577

Новичок форума
Спасибо за ответы. По поводу нафига надо, отвечаю, что это надо, т.к. тестирование это основное назначение советника ( советник для бинарных опционов, не для форекса), а торговля это уже как приложение. Тестирование как раз делается в обычном тестере мт4 и в журнал выводятся результаты. Поэтому вопрос с ограничением работы тестера остается открытым. Подскажите с помощью какой dll можно прочитать дату с какого либо сервера, естественно не с компьютера. Есть ли штантные dll windows такие вроде user32, kernel32....и встроенные в них функции для этого? Спасибо.
 

Ugar

Гуру форума
Спасибо за ответы. По поводу нафига надо, отвечаю, что это надо, т.к. тестирование это основное назначение советника ( советник для бинарных опционов, не для форекса), а торговля это уже как приложение. Тестирование как раз делается в обычном тестере мт4 и в журнал выводятся результаты. Поэтому вопрос с ограничением работы тестера остается открытым. Подскажите с помощью какой dll можно прочитать дату с какого либо сервера, естественно не с компьютера. Есть ли штантные dll windows такие вроде user32, kernel32....и встроенные в них функции для этого? Спасибо.
Эта функция возьмёт GMT время с компа. Тестером оно моделироваться не будет. То есть будет всегда локальное время без поправки на часовой пояс, независимо от того на каком участке времени тестируется.
#import "Kernel32.dll"
void GetSystemTime(int& a0 []);
#import
 
Последнее редактирование:

RoboMaks

Элитный участник
После 15.02.2016 он работать перестает, но тестер до 15.02.2016 гонять можно легко даже летом 2016 года.
Как это запретить

Возможно не так здесь и поняли вопрос, но ведь и вопрос надо задавать немного конкретнее... Сам по себе советник, конечно, работать уже не будет после указанной даты, но тестер будет продолжать "крутить" и дальше. Можно, в принципе, программно остановить дальнейшую работу тестера после этой даты, нажав на ПАУЗУ тестера (из сова).
Попробуйте так.
 

Вложения

  • EA.mq4
    1,7 КБ · Просмотры: 24

innovision

Новичок форума
Ctrl+D в окне данных видим:

Gold
EMA (2) 0.77643
EMA (3) 0.77670
DeepSkyBlue
... и далее.

к сожалению разделить в "окне данных" так как хочется - не получится..
только так:
Gold EMA (2) 0.77643
Gold EMA (3) 0.77670
...
в общем получилось так как на скрине.
Прилагаю компил(билд 910) и исходник
Там все те же 3 выборки...
Предлагаю, раз хочется научиться програмить - допишите оставшиеся 4 блока по известному алгоритму из 3-х уже написанных..
если что не понятно - спрашивайте)
 

Вложения

  • 14-02-2016 14-01-42.png
    14-02-2016 14-01-42.png
    62,6 КБ · Просмотры: 37
  • RainbowMMA.mq4
    17,6 КБ · Просмотры: 19
  • RainbowMMA.ex4
    35,2 КБ · Просмотры: 16
Последнее редактирование:

Understanding

Активный участник
Предлагаю, раз хочется научиться програмить - допишите оставшиеся 4 блока по известному алгоритму из 3-х уже написанных..
если что не понятно - спрашивайте)
Супер) Спасибо за работу и исходник) Сейчас изучу) Если что, буду спрашивать) Спасибо, правда)

Дополнение к сообщению. Вот только не знаю пока еще, как ввести отдельно взятые линии в радугу. Чтоб МА-шка 200-периодная и 274 были отдельно настраиваемые от общей радуги. А с остальными цветами сейчас "покумекаю" как их добавить сюда.
 
Последнее редактирование:

innovision

Новичок форума
как ввести отдельно взятые линии в радугу. Чтоб МА-шка 200-периодная и 274 были отдельно настраиваемые от общей радуги.
Все тоже самое как и несколько линий (как один блок)
Посмотрев код, думаю все станет легко)
Пробуйте

Алгоритм простой.. 4-й блок:
1. Прописываем входные параметры по 4 блоку
2. добавляем 4-й массив - перевод параметров из строки в массив целых
3. наращиваем кол-во буферов
#property indicator_buffers 38 - плюс 12 4-го блока
4.задаем массивы инд.буферов, начиная с 39-го
5. Init
читаем параметры из строки в массив 4-го блока
рассчитываем наименование для всех линий 4-го блока
устанавливаем соответствие линии и инд.буфера и + задаем наимен. линий
6. Start
рассчитываем значения буферов по параметрам 4-го блока

добавляйте блоки по одному - проверяйте на ошибки компила, данные в "окне данных" и визуализацию
нет ошибок - след. блок..
могу проверить Ваш результат по итогу

===
если не ясно назначение какой-то переменной/функции/присваивания - пишите))
 
Последнее редактирование:

Understanding

Активный участник
innovision, сделал)) Шик и блеск просто)) Теперь все линии в одном индикаторе) Просто прелесть) Спасибо за такой красивый и лаконичный код) Ах да, а где в коде строки отвечающие за вывод названия цвета по Ctrl+D? Как убрать? А то широковатая менюшка получается. Как можно сделать сокращение цвета? Например Gold = Gd, DeepSkyBlue = DSB, MediumOrchid = MOrch, Pink = Pn и далее ко всем цветам? Это уже дописывать надо неизвестные мне строки в данном коде, да? И как добавить возможность к линии 200 и 274 выбирать стиль линии (чтоб появилась возможность сделать линию толще). Помогите с данным кодом, пожалуйста. тогда индикатор будет просто шикарен))
 

Вложения

  • RainbowMMA.mq4
    28,2 КБ · Просмотры: 18
Последнее редактирование:

innovision

Новичок форума
а где в коде строки отвечающие за вывод названия цвета по Ctrl+D?
такой функции в коде нет..
label=(string)InpMAcolor01;StringReplace(label,"clr","");label+=" "+method;
это пример 1-го "блока"
здесь убирается только текст "clr" из наименования цвета
"clr" заменяется на пустоту.. сокращается
для сокращения названия нужно писать отдельную функцию по алгоритму
string MethodToString(int MAMethod)
где задавать короткое имя каждому из уже известных цветов
но получится не универсально
если цвет в новой функции известен - замена произойдет..
если будет новый цвет - замены не будет
==
проще, предполагаю, сделать не по цветам, а по "блокам"
функция будет алгоритмически выглядеть как
string MethodToString(int MAMethod)
в зависимости от цвета - возвращаем его сокращение
 
Последнее редактирование:

Understanding

Активный участник
проще, предполагаю, сделать не по цветам, а по "блокам"
функция будет алгоритмически выглядеть как
string MethodToString(int MAMethod)
в зависимости от цвета - возвращаем его сокращение

покажите, пожалуйста, кодом (в спойлере или как удобно) как добавить к несколько блокам эту функцию и чтоб подошло к отдельной линии (200 и 274) которые, к слову, я тоже вынес в блоки 06 и 07 соотв. И как присвоить возможность выбирать стиль (толщину) линии 200 и 274? Где дописать и что именно? А то сбрасывается стиль на тот, что в коде. наверное, в строках надо заменить NULL на 2 или 3 или 4 для изменения ширины? ExtMapBuffer67=iMA(NULL,0,Period7[0],0,InpMAMethod07,InpMAPrice07,i); --> ExtMapBuffer67=iMA(2,0,Period7[0],0,InpMAMethod07,InpMAPrice07,i); -->?
 
Последнее редактирование:

innovision

Новичок форума
И как добавить возможность к линии 200 и 274 выбирать стиль линии (чтоб появилась возможность сделать линию толще). Помогите с данным кодом, пожалуйста. тогда индикатор будет просто шикарен))
толщина задается в
SetIndexStyle
сделал толщину всем блокам
"1" заменил на InpMAwidth
посмотрите как это выглядит
==
теперь каждому блоку можно назначить "свою" толщину
сделал по умолчанию "тройку" двум последним
==
по цветам .. сейчас порисую
 

Вложения

  • RainbowMMA.mq4
    29,5 КБ · Просмотры: 20
Последнее редактирование:

innovision

Новичок форума
заменить NULL на 2 или 3 или 4 для изменения ширины?
нет.. не верно)
став курсором на строку "iMA" и нажав "F1" - увидите в хелпе что значит каждый параметр
в Вашем варианте ExtMapBuffer67=iMA(NULL,0,Period7[0],0,InpMAMethod07,InpMAPrice07,i);
нет толщины - там параметры для расчета iMA
толщину выше описал

---
предлагаю ф-ю по сокращению цвета перенести на завтра)))
 

Understanding

Активный участник
нет.. не верно)
став курсором на строку "iMA" и нажав "F1" - увидите в хелпе что значит каждый параметр
в Вашем варианте ExtMapBuffer67=iMA(NULL,0,Period7[0],0,InpMAMethod07,InpMAPrice07,i);
нет толщины - там параметры для расчета iMA
толщину выше описал

---
предлагаю ф-ю по сокращению цвета перенести на завтра)))


Спасибо за все) Можно и завтра с цветом доработать. основное уже сделано) Можно чтоб просто х01 вместо цвета писалось в окне данных. не обязательно цвет выводить сокращенный, чтоб не играться долго с кодом. это уже много надо, наверное, чтоб каждый цвет который поставится, грамотно сокращался. А чтоб х01, х02 и далее вывести вместо цвета в окно данных - долго сейчас с этим, да?)
 

innovision

Новичок форума
Пожалуйста) Главное чтобы на пользу и на Душе радость
) Можно чтоб просто х01 вместо цвета писалось в окне данных.
можно и так.. это проще всего
имена в окне данных формируются в строках "label=" и далее по строке каждому блоку
чтоб не играться долго с кодом.
играться можно столько - сколько нужно... главное результат в кармане

подсказка: переходите на ренджи... там все лаконичнее стандартов метаквотов
--
все же предложу завтра продолжить .. )
--
определитесь как Вам визуально лучше/проще/короче в окне - так и будем делать
код - это не проблема (просто решите для себя так - так и произойдет со временем)
 
Последнее редактирование:

Understanding

Активный участник
все же предложу завтра продолжить .. )
да, конечно) Я тоже спать отпраляюсь уже. Так что завтра продолжим) Спасибо за это все!) Реально круто и мне очень нравится что так понятно все оказалось по объяснениям и то, что я достаточно быстро вник, хоть и знания по MQL4 (да и по языкам программирования в целом) минимальные. А я завтра спрошу у Вас, как сделать чтоб по сокращению цвета и по названиям групп, чтоб эти данные выводились в окно данных. По-моему, по группам будет проще сделать, но по цветам было бы логичнее, наверное... хотя, кому как. Разберемся) Спасибо) До связи)
 

innovision

Новичок форума
как сделать чтоб по сокращению цвета
Приветствую, Understanding
поскольку сокращение цвета у нас будет происходить 7 раз - сделаем это присваивание в виде функции

Код:
string ColorToShortString(color Color)
  {
    string cColor=NULL;                                     // сColor - строковое возвращаемое значение функции..
   switch(Color)                                            // ставим переключатель для заранее известных значений цветов
    { case clrGold              : cColor="Gold";break;      // назначаем цвету его короткое имя
      case clrDeepSkyBlue       : cColor="Blue";break;
      case clrLime              : cColor="Lime";break;
      case clrPink              : cColor="Pink";break;
      case clrMediumOrchid      : cColor="Orchid";break;
      case clrWhite             : cColor="White";break;
      case clrLightSlateGray    : cColor="Gray";break;
      default                   : cColor="ERROR:color no case";break;
    }
   return(cColor);
  }

Ф-я принимает цвет в переменную Color (вх.параметр: color Color)
И возвращает строку "string ColorToShortString" с помощью переменной string cColor
В зависимости от заранее известных цветов переключатель switch присваивает текстовое значение переменной cColor и возвращает ее как результат в строковом выражении
Возвращаемое значение - это и есть наш цвет в более сокращенном виде
если нужно еще короче - меняем внутри скобок
"Gold" -> "Gd"
"Gray" -> "Gr"
и т.д.
Надеюсь понятно описал)

=====

далее
в коде, написанном ранее, часть наименования, связанная с цветом, для каждого блока формируется в строке
label=(string)InpMAcolor01;StringReplace(label,"clr","");
здесь сначала мы строковой переменной label присваиваем наименование цвета блока, преобразовав его из типа "цвет" в тип "строка" : label=(string)InpMAcolor01; здесь, к примеру clrGold - цвет станет "clrGold" - строка
затем StringReplace(label,"clr",""); - здесь мы в значении переменной label ищем подстроку "clr" и заменяем ее на пустоту - сокращаем - и получаем просто "Gold"
---
при появлении функции "короткое имя цвета" (ColorToShortString) этот ранний код не используем
label=(string)InpMAcolor01;StringReplace(label,"clr","");
и заменим его на вызов нашей новой функции
label=ColorToShortString(InpMAcolor01);
 

Вложения

  • RainbowMMA.mq4
    30,6 КБ · Просмотры: 19
Последнее редактирование:

Understanding

Активный участник
innovision, и Вам здравствовать!

Вот, уже с цветом покороче выходит. Хороший вариант, как для сокращения цвета.

А может, все-таки сделать без упоминания цвета в окне данных? Например, на планшетах с Windows 10 экран ~10" (у ныне существующих), и окно данных занимает немалую часть экрана, в случае с выводом названия цвета. А если сделать вариант такой: Group [1], Group [2]?... - тоже достаточно понятно смотрится.

Индикатор вышел красивый и настраиваемый полностью, только вот при переключении периодов (М1, М5 и т.д.) он дольше чем тот, что из 11 файлов "думает". Может, его можно как-то оптимизировать? Наверное, это как раз вычисление цвета и вывод имени цвета "кушает" время при переключении таймфреймов? Вариант с Group [1], Group [2] должен быть побыстрее? Как код будет выглядеть в случае варианта Group [1], Group [2]?

И спасибо за работу и помощь с данным вопросом!
 
Верх