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

AlexeyVik

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

gince

Местный знаток
Нужна функция, которая руками нанесенные все прямоугольники, при появлении нового бара удлинились до нулевого бара.
Ниже скрипт. Не получается мне его до конца коректно сделать. Прошу помочь.
Первая картинка - это руками рисованные прямоугольники.
Вторая - после использования скрипта.
 

Вложения

  • rectagle shift.mq4
    rectagle shift.mq4
    8,5 КБ · Просмотры: 11
  • prew.png
    prew.png
    51,9 КБ · Просмотры: 53
  • last.jpg
    last.jpg
    319,1 КБ · Просмотры: 42

mobidik

-----
Нужна функция, которая руками нанесенные все прямоугольники, при появлении нового бара удлинились до нулевого бара.
Ниже скрипт. Не получается мне его до конца коректно сделать. Прошу помочь.
Первая картинка - это руками рисованные прямоугольники.
Вторая - после использования скрипта.

1) если нужно изменить только один параметр - не зачем получать все остальные.
2) существующий объект не имеет смысла удалять, а затем строить по новому
3) достаточно изменить время "справа" на текущие, при этом, все остальные параметры объекта остаются прежними.

PS.
загляни в справку на счет переменной Bars.
 

Вложения

  • до.png
    до.png
    22 КБ · Просмотры: 43
  • после.png
    после.png
    21,7 КБ · Просмотры: 49
  • rectagle shift.mq4
    rectagle shift.mq4
    4,6 КБ · Просмотры: 31
Последнее редактирование:

gince

Местный знаток
Есть в mq4 возможност программно переключать профили ?
 

vaverin

Прохожий
Как в MT4 программно переключать шаблоны? Есть какой-нибудь пример кода?
 

gince

Местный знаток
Есть такие функции:
Код:
Expand Collapse Copy
bool  ChartSaveTemplate( 
   long          chart_id,     // идентификатор графика 
   const string  filename      // имя файла для сохранения шаблона 
   );
bool  ChartApplyTemplate( 
   long          chart_id,     // идентификатор графика 
   const string  filename      // имя файла с шаблоном 
   );


https://forexsystemsru.com/showpost.php?p=1315945&postcount=6406
https://www.mql5.com/ru/docs/chart_operations/chartapplytemplate
https://www.mql5.com/ru/docs/chart_operations/chartsavetemplate
 
Последнее редактирование:

Leonup

Новичок форума
Здравствуйте!
Для открытия сделки нужны 2 условия.
Первое условие определяет направление последней сформированной свечи. Такое условие написать не составляет никакого труда, например: Close[1] < Open[1];
А вот совладать со вторым условием никак не могу. Дело в том, что это условие идентично условию (телу) функции. Эта функция у меня возвращает значение экстремума.

double ExtremDN()
{
double ExtremDN = 0;
for(int i=1; i<15; i++)
{
if
(
(Close > Open) &&
(Close[i+1] > Open[i+1]) &&
(Close[i+2] < Open[i+2]) &&
(Close[i+3] < Open[i+3])
)
ExtremDN = Low[i+1];
}
return(ExtremDN);
}

Как отобразить условие, содержащееся в круглых скобках оператора if, совместно с первым услоаием?
Заранее благодарен.
 

vladradon

Программист
Как отобразить условие, содержащееся в круглых скобках оператора if, совместно с первым услоаием?
Заранее благодарен.
Я не совсем понимаю, как используется дальше значение экстремума, но если есть проверка на ненулевое его значение, то можно просто так сделать:
PHP:
Expand Collapse Copy
double ExtremDN()
  {
   double ExtremDN=0;
   for(int i=1; i<15; i++)
     {
      if
      (
       (Close[i]>Open[i]) && 
       (Close[i+1]>Open[i+1]) && 
       (Close[i+2]<Open[i+2]) && 
       (Close[i+3]<Open[i+3]) &&
       Close[1]<Open[1]
      )
      ExtremDN=Low[i+1];
     }
   return(ExtremDN);
  }
В этом случае функция вернет ненулевое значение только при нахождении экстремума и если последняя закрывшаяся свеча будет медвежьей.
 
Последнее редактирование:

Leonup

Новичок форума
В этом случае функция вернет ненулевое значение только при нахождении экстремума и если последняя закрывшаяся свеча будет медвежьей.

Спасибо огромное!!! Оказывается, все просто. Как я сам не додумался? :D
 

skitls

Активный участник
Ребят как реализовать в индикаторе, чтобы можно было прописывать координаты мыши в настройках X, Y, и при появлении сигнала-кружочка курсор тыкал в нужное место на экране?
 

AlexeyVik

Программист mql4 mql5
Ребят как реализовать в индикаторе, чтобы можно было прописывать координаты мыши в настройках X, Y, и при появлении сигнала-кружочка курсор тыкал в нужное место на экране?
Никаких апи не надо уже давно. В документации ведь нормальное описание -https://www.mql5.com/ru/docs/chart_operations/charttimepricetoxy
И функция обработки событий -https://www.mql5.com/ru/docs/event_handlers/onchartevent
Так-же можно перевести из координат x,y в цена/время.
 

mobidik

-----
Никаких апи не надо уже давно. В документации ведь нормальное описание -https://www.mql5.com/ru/docs/chart_operations/charttimepricetoxy
И функция обработки событий -https://www.mql5.com/ru/docs/event_handlers/onchartevent
Так-же можно перевести из координат x,y в цена/время.

Ты не прав, в отличие от gince, т.к. кликать нужно за пределами терминала, в окне браузера, без WinAPI не обойтись. Но одних координат не достаточно, нужен еще сам клик мышкой...
 

AlexeyVik

Программист mql4 mql5
Ты не прав, в отличие от gince, т.к. кликать нужно за пределами терминала, в окне браузера, без WinAPI не обойтись. Но одних координат не достаточно, нужен еще сам клик мышкой...
Покажи мне пожалуйста где говорится о браузере или о рабочем столе виды. Надеюсь ты понимаешь что экран это не только рабочий стол или окно браузера.
Ну, а если это уточняли раньше, то пошёл я
 

Вложения

  • nahui.jpg
    nahui.jpg
    39,8 КБ · Просмотры: 16

skitls

Активный участник
Нужно встроить в этом индюке возможность прописывать координаты на бай и селл при появлении сигнала т индюка, и да верно нужно за пределами МТ4 нажимать в окне браузера по указанным координатам, ребят если можете помогите плиз...
 

Вложения

gince

Местный знаток
Никаких апи не надо уже давно. В документации ведь нормальное описание -https://www.mql5.com/ru/docs/chart_operations/charttimepricetoxy
И функция обработки событий -https://www.mql5.com/ru/docs/event_handlers/onchartevent
Так-же можно перевести из координат x,y в цена/время.

Если в МТ 4 тогда твоя сылка действительна, а если за пределами МТ 4 чарта, тогда ВИНАПИ
 

gince

Местный знаток
Нужно встроить в этом индюке возможность прописывать координаты на бай и селл при появлении сигнала т индюка, и да верно нужно за пределами МТ4 нажимать в окне браузера по указанным координатам, ребят если можете помогите плиз...

За пределами я делал, но не сохранилсь. Проси у mobidik. Я ему давал и может у нево скрипт сохранился.
 

gince

Местный знаток
Здраствуйте. Кто дружит с winApi, Помогите разобратся.
Надо открыть несколько чартов с заданными размерами. И так и сяк делал, но не осилил.
//+------------------------------------------------------------------+
//| lango ismieru keitimas.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| windowresize.mq5 |
//+------------------------------------------------------------------+

#import "user32.dll"

int SetWindowPos(int hWnd,int hWndInsertAfter,int X,int Y,int cx,int cy,int uFlags);
int GetParent(int hWnd);
int GetTopWindow(int hWnd);
int GetWindow(int hWnd,int wCmd);
#import

#define GW_HWNDNEXT 0x0002
#define SWP_NOSIZE 0x0001
#define SWP_NOMOVE 0x0002
#define SWP_NOZORDER 0x0004
#define SWP_FRAMECHANGED 0x0020

int gr2x1_P1[]={PERIOD_D1,PERIOD_W1,PERIOD_H4}; // Period of grafic 1 of 2x1
int CXShift2x1[]={0,0,399}; // Horizontal shift of grafic 1 of 2x1
int CYShift2x1[] = {200,555,200}; // Vertical shift of grafic 1 of 2x1
int CXSize2x1[] = {399,399,200}; // Width of grafic 1 of 2x1
int CYSize2x1[] = {355,377,710}; // Height of grafic 1 of 2x1
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnStart()
{
long charthandle=-1;
int parenthandle;
//for(int i=0; i<3; i++)
//{
ResetLastError();

//Print("ChartFirst = ",ChartFirst());
// Print("ChartNext = ",ChartNext(ChartFirst()));

int i;
for(i=0; i<3; i++)
{
//parenthandle=GetParent(charthandle);
//Print("GetParent = ",parenthandle);

int hChartParent=GetParent((int)ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE));
int hMDIClient = GetParent(hChartParent);
int hChildWindow = GetTopWindow(hMDIClient);

while(hChildWindow>0)
{
SetWindowPos(hMDIClient,0,CXShift2x1,CYShift2x1,CXSize2x1,CYSize2x1,0x0004|0x0010);
SetWindowPos(hMDIClient,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
hChildWindow=GetWindow(hChildWindow,GW_HWNDNEXT);
}
}
}

 

Вложения

Последнее редактирование модератором:

gince

Местный знаток
Здраствуйте. Кто дружит с winApi, Помогите разобратся.
Надо открыть несколько чартов с заданными размерами. И так и сяк делал, но не осилил.

Не ту редакцию кинул. Скрипт открывает дополнительные окна, но изменения велечины окон нет. Велечину меняет только того окна на который кидаем скрипт, а те , которые открыл размеров не меняет.

//+------------------------------------------------------------------+
//| lango ismieru keitimas.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| windowresize.mq5 |
//+------------------------------------------------------------------+

#import "user32.dll"

int SetWindowPos(int hWnd,int hWndInsertAfter,int X,int Y,int cx,int cy,int uFlags);
int GetParent(int hWnd);
int GetTopWindow(int hWnd);
int GetWindow(int hWnd,int wCmd);
#import

#define GW_HWNDNEXT 0x0002
#define SWP_NOSIZE 0x0001
#define SWP_NOMOVE 0x0002
#define SWP_NOZORDER 0x0004
#define SWP_FRAMECHANGED 0x0020

int gr2x1_P1[]={PERIOD_D1,PERIOD_W1,PERIOD_H4}; // Period of grafic 1 of 2x1
int CXShift2x1[]={0,0,399}; // Horizontal shift of grafic 1 of 2x1
int CYShift2x1[] = {200,555,200}; // Vertical shift of grafic 1 of 2x1
int CXSize2x1[] = {399,399,200}; // Width of grafic 1 of 2x1
int CYSize2x1[] = {355,377,710}; // Height of grafic 1 of 2x1
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnStart()
{
long charthandle=-1;
int parenthandle;

//{
ResetLastError();

int i;
for(i=0; i<3; i++)
{
long h=ChartOpen("EURUSD",gr2x1_P1);Print("ChartOpen ",h);

int hMDIClient=GetParent((int)ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE));

Print("hMDIClient ",hMDIClient);

//Sleep(5000);
int hChildWindow=GetTopWindow(hMDIClient);Print("hChildWindow ",hChildWindow);

while(hChildWindow>0)
{
SetWindowPos(hMDIClient,0,CXShift2x1,CYShift2x1,CXSize2x1,CYSize2x1,0x0004|0x0010);
SetWindowPos(hMDIClient,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
hChildWindow=GetWindow(hChildWindow,GW_HWNDNEXT);
}
}
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
 

Вложения

Последнее редактирование:
Верх