Jump to content
Programmer

Общие вопросы по языку MQL

Recommended Posts

Mighty Mouse
15.01.2019 в 03:07, Ugar68 сказал:

Да, конечно

 

Имеется дата, время некоего бара, можно узнать его OHLC не вычисляя сдвиг относительно края, что требуется для iOpen, iClose и тд?

Есть ли более простое и элегантное решение?

Share this post


Link to post
Share on other sites
Ugar68
36 минут назад, Mighty Mouse сказал:

 

Имеется дата, время некоего бара, можно узнать его OHLC не вычисляя сдвиг относительно края, что требуется для iOpen, iClose и тд?

Есть ли более простое и элегантное решение?

Я не знаю такого. А что iBarShift это не простое и элегантное решение? Мне кажется это очень удобный инструмент. Похоже не только мне, если его добавили в MQL5.


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Mighty Mouse
50 минут назад, Ugar68 сказал:

А что iBarShift это не простое и элегантное решение? Мне кажется это очень удобный инструмент.

 

Спасибо, не знал.

Share this post


Link to post
Share on other sites
torgf
10.01.2019 в 20:09, Ugar68 сказал:

Написал упрощенный вариант (бюджетный) функции. Не проверял. Разбирайтесь. Справочник в помощь.

Спасибо. Самостоятельно до такого, мне ни кода бы не дойти☺️

Share this post


Link to post
Share on other sites
torgf

Как можно записать в цикл следующее?

    int coun=2;
    bool bul=false;
     if(coun==1)
       {
      if( iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]) bul=true;
       }
     if(coun==2)
       {
      if(iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]&&
         iAC(NULL,0,3)<iAC(NULL,0,4)&&Open[2]<Close[2])  bul=true;
       }
     if(coun==3)
       {
      if(iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]&&
         iAC(NULL,0,3)<iAC(NULL,0,4)&&Open[2]<Close[2]&&
         iAC(NULL,0,4)<iAC(NULL,0,5)&&Open[3]<Close[3])  bul=true;
       }

чтобы не дописывать условие для coun=4 и т.д.

Share this post


Link to post
Share on other sites
Ugar68
17 минут назад, torgf сказал:

Как можно записать в цикл следующее?


    int coun=2;
    bool bul=false;
     if(coun==1)
       {
      if( iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]) bul=true;
       }
     if(coun==2)
       {
      if(iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]&&
         iAC(NULL,0,3)<iAC(NULL,0,4)&&Open[2]<Close[2])  bul=true;
       }
     if(coun==3)
       {
      if(iAC(NULL,0,2)<iAC(NULL,0,3)&&Open[1]<Close[1]&&
         iAC(NULL,0,3)<iAC(NULL,0,4)&&Open[2]<Close[2]&&
         iAC(NULL,0,4)<iAC(NULL,0,5)&&Open[3]<Close[3])  bul=true;
       }

чтобы не дописывать условие для coun=4 и т.д.

Надо инвертировать условия. Как то так:

int coun=4, i;
bool bul=true;
for(i=0;i<coun;i++)
   {
   if(iAC(NULL,0,i+2)>=iAC(NULL,0,i+3) || Open[i+1]>=Close[i+1])
      {
      bul=false;
      break;
      }
   }

 

  • Thanks 1

Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Mighty Mouse

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

Так чтобы в выпадающем списке можно было выбрать только что-то одно Buy или Sell.

Пока что приходится использовать две  переменных:

 

input bool    OpenBuy = true;
input bool    OpenSell = false;

 

 

Edited by Mighty Mouse

Share this post


Link to post
Share on other sites
Ugar68
1 час назад, Mighty Mouse сказал:

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

Так чтобы в выпадающем списке можно было выбрать только что-то одно Buy или Sell.

Пока что приходится использовать две  переменных:

 

input bool    OpenBuy = true;
input bool    OpenSell = false;

 

 

Использовать перечисление

enum open_direction(Buy=0,Sell=1);

input open_direction OpenType=0;

Edited by Ugar68
  • Thanks 1

Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Mighty Mouse
24 минуты назад, Ugar68 сказал:

Использовать перечисление

enum open_direction(Buy=0,Sell=1);

input open_direction OpenType=0;

 

Ругается на второй строке

'open_direction' - declaration without type  
 

PS 

При копировании через буфер добавились лишние символы, вопрос решен, спасибо.

Edited by Mighty Mouse

Share this post


Link to post
Share on other sites
Ugar68
21 минуту назад, Mighty Mouse сказал:

 

Ругается на второй строке

'open_direction' - declaration without type 

enum open_direction{Buy=0,Sell=1};
input open_direction OpenType=0;


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Mighty Mouse
2 часа назад, Ugar68 сказал:

enum open_direction{Buy=0,Sell=1};
input open_direction OpenType=0;

 

А можно ли то же самое сделать с тикетами?

Бывают ситуации когда вручную открыто несколько позиций по одной паре, а советнику нужно дать дотралить только одну.

Как при запуске совы выбрать нужную позицию?

Share this post


Link to post
Share on other sites
Ugar68
1 час назад, Mighty Mouse сказал:

 

А можно ли то же самое сделать с тикетами?

Бывают ситуации когда вручную открыто несколько позиций по одной паре, а советнику нужно дать дотралить только одну.

Как при запуске совы выбрать нужную позицию?

Для задания тикетов используется внешняя переменная int или uint.

input uint Ticket=567463578;

Это по простому. Если же хочется сложностей и надо менять значение оперативно и без инициализации, можно использовать окошко редактирования на чарте. В него вписать тикет. Можно так же использовать клик мыши по ордеру на чарте. Можно на чарте соорудить из графических объектов аналог перечисления. Интерактивная менюшка.


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
sviter

Здраствуйте! делаю скриншот экрана через функцию:
WindowScreenShot ("Screenshotname.png",1280,720); но оно все сохраняет в папку Files, а мне надо указать путь в другую папку что бы сохрняло! как это сделать?

Share this post


Link to post
Share on other sites
Ugar68
1 час назад, sviter сказал:

Здраствуйте! делаю скриншот экрана через функцию:
WindowScreenShot ("Screenshotname.png",1280,720); но оно все сохраняет в папку Files, а мне надо указать путь в другую папку что бы сохрняло! как это сделать?

Никак. В целях безопасности функции MQL ограничены песочницей. Для использования путей вне песочниц придётся использовать функции из DLL на других языках.


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
sviter

какой путь короткий, ато не могу подобрать? "\\Files\\Screenshotname.PNG" ???

Share this post


Link to post
Share on other sites
Ugar68
10 часов назад, sviter сказал:

какой путь короткий, ато не могу подобрать? "\\Files\\Screenshotname.PNG" ???

Можно длиннее. Например задать имя файла

Name=StringConcatenate(WindowExpertName(),"\\Screen\\Screenshotname.PNG");

Будет путь с соответствующими подпапками Files\имя программы\Screen\Screenshotname.PNG.

Но за пределы Files без DLL не выйти.


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
laxander

Тестирую мультивалютника на MQL5. Столкнулся со странным поведением CopyRates.

Код:

MqlRates bars[1];
datetime yesterday = TimeCurrent() - PeriodSeconds(PERIOD_D1);    

if(CopyRates("EURSGD", PERIOD_D1, yesterday, 1, bars) != 1) {
   Print("    CopyRates of EURSGD failed, no history");      
}  
for (int i = 0; i < ArraySize(bars); i++) {         
   PrintFormat("EURSGD Open: %f Close: %f", bars[i].open, bars[i].close);      
} 

if(CopyRates("EURNOK", PERIOD_D1, yesterday, 1, bars) != 1) {
   Print("    CopyRates of EURNOK failed, no history");      
}  
for (int i = 0; i < ArraySize(bars); i++) {         
   PrintFormat("EURNOK Open: %f Close: %f", bars[i].open, bars[i].close);      
} 

В журнал пишет:

2019.02.12 23:00:50.300	Core 01	2018.01.01 00:00:00   EURSGD Open: 1.194140 Close: 1.201360
2019.02.12 23:00:50.300	Core 01	2018.01.01 00:00:00   EURNOK Open: 1.194140 Close: 1.201360

Т.е. оно копирует данные по символу, на котором запущено тестирование (в данном случае я его запускал на EURUSD), а не по тому, что я явно указываю первым параметром CopyRates. Что за х? Почему?

Самое странное, что еще неделю назад все работало, как надо. Рейты брались те, которые указаны в символе.

Share this post


Link to post
Share on other sites
sviter

Как сделать разницу между двумя датами??.... То есть к примеру 10.02.19 и к примеру текущую 12.02.19 и что бы выдавало 0 лет, 0 месяцев, 2 дня

Share this post


Link to post
Share on other sites
AntFX
35 минут назад, sviter сказал:

Как сделать разницу между двумя датами??.... То есть к примеру 10.02.19 и к примеру текущую 12.02.19 и что бы выдавало 0 лет, 0 месяцев, 2 дня

(( TimeCurrent() - date ) / 86400 ) = число дней между датами // 86400 - число секунд внутри любого 1 дня 

Edited by AntFX

Статистика спредов | ПАММ-корректировщик | Section Divine

אף אדם לא לבד - כולנו איש אחד בלב אחד

Share this post


Link to post
Share on other sites
torgf
23.01.2019 в 06:24, Ugar68 сказал:

Надо инвертировать условия. Как то так:

 

Спасибо. 

Как, в индикаторе,получать сигнал только на открытии бара?
Открылся бар красным цветом, а потом стал зелёным цветом. Нужно сигналить  только если открылся зелёным.

if(iAC(NULL,0,i+1)<iAC(NULL,0,i)){...}

пыталась так 

 if(timeeeS==Time[i])continue;
  timeeeS=Time[i];
if(iAC(NULL,0,i+1)<iAC(NULL,0,i))

и volume<=1 Не работает

Share this post


Link to post
Share on other sites
AntZ

Здравствуйте. Устанавливаю новостной индикатор *** п.8 ***  в коде ошибка (видно на скрине) , подскажите что не так? Может подскажете хороший проверенный новостной индикатор?

2019-02-14_09-21-30.png

Edited by AntFX
п. 8

Share this post


Link to post
Share on other sites
AntFX

Не увлекайтесь, пожалуйста, ссылками на "независимые" (в кавычках) ресурсы - на них практически всегда идет реклама конкурентных брокеров, а это строго запрещено правилами форума Альпари.


Статистика спредов | ПАММ-корректировщик | Section Divine

אף אדם לא לבד - כולנו איש אחד בלב אחד

Share this post


Link to post
Share on other sites
AntZ
3 минуты назад, AntFX сказал:

Не увлекайтесь, пожалуйста, ссылками на "независимые" (в кавычках) ресурсы - на них практически всегда идет реклама конкурентных брокеров, а это строго запрещено правилами форума Альпари.

ок, удаляйте там сообщения, а индикатор посоветуйте

Share this post


Link to post
Share on other sites
AntFX
8 минут назад, AntZ сказал:

ок, удаляйте там сообщения, а индикатор посоветуйте

Я не спец по новостным индикаторам, может кто-то посоветует.


Статистика спредов | ПАММ-корректировщик | Section Divine

אף אדם לא לבד - כולנו איש אחד בלב אחד

Share this post


Link to post
Share on other sites
Ugar68
5 часов назад, torgf сказал:

Спасибо. 

Как, в индикаторе,получать сигнал только на открытии бара?
Открылся бар красным цветом, а потом стал зелёным цветом. Нужно сигналить  только если открылся зелёным.


if(iAC(NULL,0,i+1)<iAC(NULL,0,i)){...}

пыталась так 


 if(timeeeS==Time[i])continue;
  timeeeS=Time[i];
if(iAC(NULL,0,i+1)<iAC(NULL,0,i))

и volume<=1 Не работает

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


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×