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

vladradon

Программист
15 минутный таймер будет работать с интервалом, привязан к моменту инициализации, а не к началу минуты. Системый таймер не работает в тестере. Увеличивает интервалы при тормозах, особенно влияет тормоза связанные с диском. Уж лучше тогда таймер ставить на секунду или меньше и проверять время. Тогда будет отвязан от тика и можно привязаться к началу минуты.
Что он привязан к моменту запуска я писал выше, а вот что он не работает в 4-м терминале в тестере я не знал - не приходилось использовать, зато в 5-м работает без проблем (см. скрин). При этом никаких тормозов - выводится время срабатывания функции OnTimer(), которая выводит алертом текущее на тот момент время. Надо разобраться, почему метаквотовцы не запустили таймер в тестере 4-го терминала.
 

Вложения

  • TestTimer.png
    TestTimer.png
    7,1 КБ · Просмотры: 12
Последнее редактирование:

Ugar

Гуру форума
зато в 5-м работает без проблем (см. скрин). При этом никаких тормозов - выводится время срабатывания функции OnTimer(), которая выводит алертом текущее на тот момент время. Надо разобраться, почему метаквотовцы не запустили таймер в тестере 4-го терминала.
А я не знал что в пятом тестере работает. Тормоза, обычно не на персоналках, а на серверах реальных и виртуальных. Где куча юзеров ломятся на один диск. У меня были заказчики с реальными серверами, у них таймер не работал вообще, задач на сервере было не мерено, хотя процессор многоядерный и не загружен полностью, память 4 канальная, а рейд массив дисков один на всех. Вот из за здоровенной очереди к диску таймер не клацал вообще.
 

ibragimovanton

Прохожий
Здравствуйте, подскажите пожалуйста, можно ли, и как если можно, реализовать в коде свой RSI Тиковый? Такой как на Olimp Trade. Прям вот именно такой же как на изображении - период 14 на время 50 мин(потому что при уменьшении увеличении времени RSI меняется). Или это невозможно в MQL4?
 

Вложения

  • Безымянный.jpg
    Безымянный.jpg
    256,5 КБ · Просмотры: 34

Ugar

Гуру форума
Здравствуйте, подскажите пожалуйста, можно ли, и как если можно, реализовать в коде свой RSI Тиковый? Такой как на Olimp Trade. Прям вот именно такой же как на изображении - период 14 на время 50 мин(потому что при уменьшении увеличении времени RSI меняется). Или это невозможно в MQL4?
Создать или найти индикатор создающий офлайновый тиковый график. Открыть этот график и поставить на него индикатор. Это если нужно смотреть на этот индикатор. А если нужно получить значения RSI на тиках, можно сделать проще. Накопить тики в массив и получить значения функцией iRSIOnArray.
 

ibragimovanton

Прохожий
Будьте любезны, я не такой уж программист, гуглил и не нашел как Накопить тики в массив?:please:
 

Ugar

Гуру форума
Будьте любезны, я не такой уж программист, гуглил и не нашел как Накопить тики в массив?:please:
static double Tick[0];
int ArrSize=ArraySize(Tick);
ArrSize++;
for(int i=ArrSize-1; i>0; i--)Tick=Tick[i-1];
Tick[0]=Bid;
С каждым тиком массив Tick будет становиться длиннее. В 0 ячейке последний тик. Это простейший вариант.
 
Последнее редактирование:

Leonup

Новичок форума
Параметры свечи

Добрый день! Решаю такую вот задачу. Имеется паттерн из 5 свечей: например, 2 черных свечи и после них 3 белых свечи:
iClose(Symbol(),0,4) < iClose(Symbol(),0,5) &&
iClose(Symbol(),0,3) > iClose(Symbol(),0,4) &&
iClose(Symbol(),0,2) > iClose(Symbol(),0,3) &&
iClose(Symbol(),0,1) > iClose(Symbol(),0,2);
После этого паттерна через несколько белых свечей (восходящий тренд) появляется черная свеча.
Не могу сообразить, как мне программно выявить параметры этой черной свечи, например, ее High.
Ведь неизвестно, через какое количество белых свечей она появится, может сразу, а может через 10.
Помогите, пожалуйста.
В приведенном коде значение shift указано в качестве примера.
 

Ugar

Гуру форума
Не задал размер массива.

Есть ещё некоторый нюансы, которые надо учесть что бы по массиву вызывать индикатор. Нужно сделать массив динамическим и поменять индексацию. Так же желательно ограничить длину массива что бы не забивать память ненужными тиками. По идее период + shift+ 1 тик должно хватить.

int PerionRSI=14, ShiftRSI=1;

double Tick[];
int start()
{
ArraySetAsSeries(Tick,true);
static int ArrSize=0;
if(ArrSize<PerionRSI+ShiftRSI+1)ArrSize++;
ArrayResize(Tick,ArrSize);

for(int i=ArrSize-1; i>0; i--)Tick=Tick[i-1];
Tick[0]=Bid;
double yot=iRSIOnArray(Tick,0,PerionRSI,ShiftRSI);

}
вот как то так. Это пример, писал даже не в редакторе, разбирайтесь.
 

Bullra

Новичок
Требуется синхронизация двух индикаторов в подвале по оси Х без потери данных по Y. Нашел пример, где с помощью функций iRSI и iWPR совмещены центры тяжести соответствующих индикаторов... но у него вынесено много настроек во входные параметры. Поэтому интересуюсь, если с настройками не заморачиваться, то индикатор примет настройки родительских индикаторов по дефолту?
 
Последнее редактирование:

MrGreen86

Гуру форума
Требуется синхронизация двух индикаторов в подвале по оси Х без потери данных по Y. Нашел пример, где с помощью функций iRSI и iWPR совмещены центры тяжести соответствующих индикаторов... но у него вынесено много настроек во входные параметры. Поэтому интересуюсь, если с настройками не заморачиваться, то индикатор примет настройки родительских индикаторов по дефолту? Еще вот такая сложность, один индикатор исчисляется в целых единицах, а второй в тысячных долях их вообще реально синхронизировать?

В iRSI и iWPR без настроек никак, но их необязательно выносить во входные параметры. Можно прописать константами прямо в функции.

Синхронизовать более менее можно, просто второй умножте на тысячи.
 

Слава Кучер

Ушел в подполье
Всем привет!
Может кто подсказать в чем проблема...
Модификация тэйка для множества ордеров на EURUSD, GBPUSD происходит нормально, при открытии нового ордера, а вот на USDCHF, USDJPY такая вот картина, как скрине.
 

Вложения

  • Toolwiz20194-5-23-21-34.png
    Toolwiz20194-5-23-21-34.png
    85,4 КБ · Просмотры: 16

Ugar

Гуру форума
Всем привет!
Может кто подсказать в чем проблема...
Модификация тэйка для множества ордеров на EURUSD, GBPUSD происходит нормально, при открытии нового ордера, а вот на USDCHF, USDJPY такая вот картина, как скрине.
Предположительно, расчётное значение оказалось между пунктами, из за погрешности хранения и вычисления double данных, то в одну сторону перевешивает, то в другую.
 

Слава Кучер

Ушел в подполье
к посту выше.
Уровни безубытка и саму модификацию делаю так как на скринах...
При этом если расчитывать уровни безубытка иначе все норм работает, но не учитывается своп, комиссия...
 

Вложения

  • Toolwiz20194-5-23-42-8.png
    Toolwiz20194-5-23-42-8.png
    50,5 КБ · Просмотры: 23
  • Toolwiz20194-5-23-44-1.png
    Toolwiz20194-5-23-44-1.png
    35 КБ · Просмотры: 18

Слава Кучер

Ушел в подполье
Предположительно, расчётное значение оказалось между пунктами, из за погрешности хранения и вычисления double данных, то в одну сторону перевешивает, то в другую.

спасибо! Это можно как-то обойти? как делаю все расчеты и модификацию показал постом выше.
Или как вариант делать модификацию только при открытии нового ордера и во время начисления свопов?
 

Ugar

Гуру форума
спасибо! Это можно как-то обойти? как делаю все расчеты и модификацию показал постом выше.
Или как вариант делать модификацию только при открытии нового ордера и во время начисления свопов?
Понял. В расчётах используется стоимость пункта в валюте депозита, а она меняется в зависимости от курса базовой валюты к валюте депозита. Если счёт в USD то на парах XXXUSD валюта счёта совпадает с базовой, по этому ничего не гуляет. Если нужно поставить тейк и не трогать, независимо от изменения курса, то лучше ставить тейк только после открытия.
 
Последнее редактирование:

Слава Кучер

Ушел в подполье
Понял. В расчётах используется стоимость пункта в валюте депозита, а она меняется в зависимости от курса базовой валюты к валюте депозита. Если счёт в USD то на парах XXXUSD валюта счёта совпадает с базовой, по этому ничего не гуляет. Если нужно поставить тейк и не трогать, независимо от изменения курса, то лучше ставить тейк только после открытия.

понял, принял. Спасибо еще раз!
А более универсальной формулы нет, кроме как сумму цен открытия, умноженных на лот, и деленную на сумму лотов?
Потому как для некоторых советников вариант модификации при открытии подходит, а вот для советников, где есть частичное закрытие какого-то ордера из сетки, каждый раз прописывать вызов функции модификации муторновато... Проще поставить проверку на каждом тике:)
Или же сделать какой-то определенный шаг изменения цены для модификации можно?
 

Ugar

Гуру форума
понял, принял. Спасибо еще раз!
А более универсальной формулы нет, кроме как сумму цен открытия, умноженных на лот, и деленную на сумму лотов?
Потому как для некоторых советников вариант модификации при открытии подходит, а вот для советников, где есть частичное закрытие какого-то ордера из сетки, каждый раз прописывать вызов функции модификации муторновато... Проще поставить проверку на каждом тике:)
Или же сделать какой-то определенный шаг изменения цены для модификации можно?
Тут вариант считать безубыток только по валюте котировки, но тогда свопы и комиссии не учитываются, так как они в валюте депозита.
Если же считать в валюте депозита, что бы учесть свопы и комиссии, то придётся смириться с тем что результат будет гулять. Как вариант, что бы не гонять на каждом тике реальные тейки, применить виртуальные.
 

AlexeyVik

Программист mql4 mql5
Всем привет!
Может кто подсказать в чем проблема...
Модификация тэйка для множества ордеров на EURUSD, GBPUSD происходит нормально, при открытии нового ордера, а вот на USDCHF, USDJPY такая вот картина, как скрине.
А разве не достаточно поставить проверку на направление изменения нового значения относительно старого?
То-есть, если тейк надо двигать в сторону увеличения предполагаемой прибыли, то двигать тейк в сторону уменьшения прибыли двигать не надо. Вот и поставить такое условие: если увеличение - двигаем, если будет меньше чем есть или равно - двигать не надо.
 

Слава Кучер

Ушел в подполье
А разве не достаточно поставить проверку на направление изменения нового значения относительно старого?
То-есть, если тейк надо двигать в сторону увеличения предполагаемой прибыли, то двигать тейк в сторону уменьшения прибыли двигать не надо. Вот и поставить такое условие: если увеличение - двигаем, если будет меньше чем есть или равно - двигать не надо.

Получается было 5 ордеров, а через минуту стало 6, и тэйк полюбому уже будет меньше/больше(в зависимости от направления торговли) относительно старого значения, тогда нужно проверять и другие условия, типа если ордеров столько же, и тэйк изменился например на столько то, то не модифицируем. Проверки разные то сделать можно, просто интересовала возможность расчета уровня безубытка корректного для каждой валютной пары, без танцев с бубном, с учетом комиссий, свопом и прочего. И разбор проблемы с расчетом, который использую я, и который используется еще в куче разных советников.
 
Последнее редактирование:
Верх