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

سيرجي كيروف

Местный знаток
учусь вот разбиратьтся как что работает в граалях
и хочу чтобы помогли мне привернуть время торговли
в советник ниже
тоесть время в которое сделки открываются
а закрытие всегда
 

Вложения

  • Kirov.mq4
    6 КБ · Просмотры: 33
Последнее редактирование:
  • Angry
Реакции: D@IW

AlexeyVik

Программист mql4 mql5
AlexeyVik
Вы тут _http://forum.mql4.com/ru/65341/page29
приводили пример, как доработать код в советнике, чтобы появилась возможность ручного подтверждения открытия ордеров, которая при обновлении с 670 на 745 билд канула в лету...
Я не настолько силен, чтоб понять куда и чего...
Использую простой шаблон, где гоняю условия. Подскажите, плиз, куда и чего, что бы было ручное подтверждение открытия/закрытия ордеров.
С уважением.

P.S. Шаблон прилагаю.
В тестере MessageBox() не работает поэтому не проверял. Проверил только аналогичное применение в скрипте, работает нормально.
Вставил только в открытие ордеров, закрытие осталось как было.

На будущее, для доработки советников и индикаторов есть соответствующая ветка.
http://forexsystemsru.com/yazyk-pro...tka-botov-sovetnikov-indikatorov-vol-2-a.html
 

Вложения

  • A.mq4
    13,9 КБ · Просмотры: 36
Последнее редактирование модератором:

ctmcn

Новичок форума
AlexeyVik
Так в тестере шаблон на автомате прогоняется - там это не актуально.
При реальных котировках надо - использую как "квакер" - есть сигнал - смотрим где, потому и спрашивал. Потому что Тестер от реала отличается однако - для динамических уровней надо мне это смотреть.
Опция была очень нужная, зачем убрали в новых билдах непонятно.
Теперь очень неудобно стало, как и многое другое...
P.S. А для закрытия ордеров по аналогии добавить ?
 

hollydiger

Прохожий
Код:
input int timerSeconds = 1;

MqlDateTime str1;

int OnInit()
  {
   EventSetTimer(timerSeconds);
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
   EventKillTimer();
   Comment("");
  }
void OnTick()
  {
   
  }
void OnTimer()
  {
   TimeLocal(str1);
   Comment(str1.sec);
  }
Ларчик просто открывался

Спасибо за попытку. Но за таймером замечена особенность, когда время уже таймера обновляется, новый бар открывается только через 10-15 секунд... Может это можно как-нибудь решить? :please:
 

matro3

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

gince

Местный знаток
Привет всем.
Кто может написать условие (можно в функцию засунуть) по индикатору.
Условия
Появилась первая синяя точка выше белой линии (перед тем на прошлом баре была ниже) и, если нет голубой, открываемся по направлению от других индикаторов.
Если есть голубая, ждем следующей синей точки и открываемся по направлению от других индикаторов.
Картинки и индикатор ниже.
 

Вложения

  • std1.PNG
    std1.PNG
    24,5 КБ · Просмотры: 38
  • std2.PNG
    std2.PNG
    21 КБ · Просмотры: 31
  • gi_BB-Width.mq4
    5 КБ · Просмотры: 33

ansol

Местный знаток
Можно ли из основного куска программы, которая OnTick() вызывать специальные подпрограммы, типа OnInit() и OnDeinit() ?
Как бы, логика подсказывает, что можно, а реально там никаких подводных камней не заложено?
 

AlexeyVik

Программист mql4 mql5
Можно ли из основного куска программы, которая OnTick() вызывать специальные подпрограммы, типа OnInit() и OnDeinit() ?
Как бы, логика подсказывает, что можно, а реально там никаких подводных камней не заложено?
Никаких.
Ну если страшно, сделай отдельную функцию и вызывай из init или deinit ну и соответственно из OnTick()
 

ansol

Местный знаток
Никаких.
Ну если страшно, сделай отдельную функцию и вызывай из init или deinit ну и соответственно из OnTick()

Да не страшно и вроде бы уже работает. Глупо как-то два одинаковых куска кода вставлять в OnDeinit() и еще куда-то.
Вызвал деинит с кодом 5
PHP:
OnDeinit(5);
И всех делов
 

egorr007

Новичок форума
Привет всем.
Кто может написать условие (можно в функцию засунуть) по индикатору.
Условия
Появилась первая синяя точка выше белой линии (перед тем на прошлом баре была ниже) и, если нет голубой, открываемся по направлению от других индикаторов.
Если есть голубая, ждем следующей синей точки и открываемся по направлению от других индикаторов.
Картинки и индикатор ниже.

HTML:
//---------------------------------------------------------------+
   double buf2 = iCustom(NULL,0,"i-BB-Width",2,0);// Blue
   double buf4 = iCustom(NULL,0,"i-BB-Width",4,0);// Aqua
   double buf5 = iCustom(NULL,0,"i-BB-Width",5,1);// белая линия
//----------------------------------------------------------------+
//   if(buf2 !=0)// синяя точка 
//   if(buf2 !=0 && buf2 > buf5)// синяя точка над белой линией 
//   if(buf4 !=0)// голубая точка  
//----------------------------------------------------------------+
 

egorr007

Новичок форума
HTML:
учусь вот разбиратьтся как что работает в граалях
и хочу чтобы помогли мне привернуть время торговли 
в советник ниже
тоесть время в которое сделки открываются


а закрытие всегда
 

Вложения

  • Kirov.mq4
    7,7 КБ · Просмотры: 27

Дмитрий007

Гуру форума
Подскажите, есть такая функция, которая бы добавляла/отнимала количество пунктов последней свечи к значению индикатора?

Например, значения RSI на рассматриваемой свече упало, при этом нам нужно к этому значению еще добавить количество пунктов закрытой свечи. Если долго, объяснять не надо...
 

DiZin

Местный знаток
Подскажите, есть такая функция, которая бы добавляла/отнимала количество пунктов последней свечи к значению индикатора?

Например, значения RSI на рассматриваемой свече упало, при этом нам нужно к этому значению еще добавить количество пунктов закрытой свечи. Если долго, объяснять не надо...

Два оператора - "+" - для добавления, "-" - для "отнимания"
 

mogul

Новичок форума
Здравствуйте все, программисты и учащиеся.
Прошу помощи, долго бьюсь не выходит, или знаний мало или того хуже.

Получаю из внешнего .csv файла с разделителем ";", как я понял последовательно такие данные:
1.2498;1.2517;1.2575;1.2703;1.2971;1.2507;1.2562;1.2768;1.1977;1.2021;1.2106;1.2321;1.1885;1.2064;1.2223;1.2414

но не получается найти hi и low среди них, вернее получилось только hi, хотя думаю и то как то неправильно, мног оперепробовал, то hi найдет, то где то в середине, low не выходит никак.
low приходиться сечас руками подставлять и прекомпилировать каждые новые данные.
if (hi <= cena) {hi = cena++;} - тут находит hi
// if (lo<=0) {lo = cena--;} тут закоментировал, т.к. ничего невышло.

ну и второй вопрос, так же из внешнего файла данные: 123, 15, 65, 87, 94 ... и т.п.
получаю новые данные, цифры там естественно другие, как мне сравнить новые со старыми, к примеру отнять от большего нового, меньшее старое или наоборот.

прошу, не откажите в просьбе.
 

mogul

Новичок форума
спасибо огромное, но .. опять lo не нашел, 0 выдает по lo, hi прекрасно находит.
 

mogul

Новичок форума
так все выглядит, двойных ;; точно нет, эту болезнь поборол

for ( i = 0; i < 480; i++){
optiontype = FileReadString(hFile);
cena = StrToDouble(FileReadString(hFile));
if (cena < 1) {i--;} вроде тут 0.0. и 0 убирается
--------------- ваш код------------------
if (hi < cena) hi = cena;
if (lo<0.000001 || lo>cena) lo = cena;

}
Comment (" ",hi," ",lo); --- сдесь получаю hi и 0 по lo
------------------------- так данные идут из файла ------------
call;1.2531;
call;1.2656;
call;1.2712;
call;1.2418;
call;1.2544;
put;1.1988;
put;1.2135;
put;1.2399;
put;1.2076;
put;1.2366;
 

AlexeyVik

Программист mql4 mql5
так все выглядит, двойных ;; точно нет, эту болезнь поборол

for ( i = 0; i < 480; i++){
optiontype = FileReadString(hFile);
cena = StrToDouble(FileReadString(hFile));
if (cena < 1) {i--;} вроде тут 0.0. и 0 убирается
--------------- ваш код------------------
if (hi < cena) hi = cena;
if (lo<0.000001 || lo>cena) lo = cena;

}
Comment (" ",hi," ",lo); --- сдесь получаю hi и 0 по lo
------------------------- так данные идут из файла ------------
call;1.2531;
call;1.2656;
call;1.2712;
call;1.2418;
call;1.2544;
put;1.1988;
put;1.2135;
put;1.2399;
put;1.2076;
put;1.2366;
А разве ArrayMaximum() _http://docs.mql4.com/ru/array/arraymaximum
и ArrayMinimum() _http://docs.mql4.com/ru/array/arrayminimum
не подходят?

Второй вариант:
В цикле как и хотел ты сделать, только надо чуток поменять весь алгоритм.
Код:
double lo = 0, hi = 0;

for (i = 0; i < 480; i++)
{
    optiontype = FileReadString(hFile);
    cena = StrToDouble(FileReadString(hFile));
   // Как я понял, то при каждой итерации цикла читается следующая строка файла...
    if (cena > hi) hi = cena;
    if (lo > 0.0 && cena < lo) lo = cena;
}
  // После выхода из цикла имеем hi и lo...
 
Последнее редактирование:

mogul

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