Jump to content

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


Recommended Posts

brokers14

Здравствуйте. Подскажите, пожалуйста, как прописать в советнике подтверждающий индикатор? Один индикатор главный, а второй подтверждающий.

Link to post
Share on other sites
  • Replies 7.6k
  • Created
  • Last Reply

Top Posters In This Topic

  • AntFX

    577

  • sergey1294

    569

  • Ugar68

    517

  • Programmer

    419

Top Posters In This Topic

Popular Posts

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

На счёт проверок, это правильно. Я больше очень практикую, то же нарывался. Но в моём случае у меня советник открывал ордер минимальным лотом вместо нормального, когда замечал, доливаться было поздно.

Основной советник выставляет "сигнальный" отложенный ордер далеко от текущей цены и каждую например, минуту модифицирует у него время экспирации: это может быть текущее время плюс 1 час, или плюс 1 су

Posted Images

AntFX

Здравствуйте. Подскажите, пожалуйста, как прописать в советнике подтверждающий индикатор? Один индикатор главный, а второй подтверждающий.

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

 

Проверка нескольких условий в MQL4 производится с помощью условного оператора if и логических операторов && (и) || (или)

Edited by AntFX

1

Link to post
Share on other sites
OmegaS
 

 не знаю как разрулить (( прощу помощи.


Вопрос отпал, пошел через  GlobalVariableGet()

Edited by OmegaS
Link to post
Share on other sites
ZeleBoba

Вопрос к профи в ООП.

Проконсультируйте пожалуйста, будет ли правильно работать в MQL неявное преобразование типов при переприсвоении указателя на объект (дескриптор) в следующей конструкции?

 

class X
 { private:
     int a;
     int b;
   public:
   int sum() { return(a+b ) ; }
 };
 
X    *a, *b;
ulong c; 
int   d;
 
a = new X;
c = a;
b = c;
 
d = b.sum();
 
или всё же надо указывать явное преобразование?
Edited by ZeleBoba

Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
kazakov.v

 

 

или всё же надо указывать явное преобразование?

 

А зачем промежуточная переменная? b=a да и всё.


Никому верить нельзя.

Мне - можно.

 

Link to post
Share on other sites
AntFX
Проконсультируйте пожалуйста, будет ли правильно работать в MQL неявное преобразование типов при переприсвоении указателя на объект (дескриптор) в следующей конструкции?

Вы пытаетесь присвоить переменной типа указателя на объект значение типа целое и переменной типа целое - значение типа указателя на объект, это конечно работать не будет. 

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

Edited by AntFX

1

Link to post
Share on other sites
STre

Вы пытаетесь присвоить переменной типа указателя на объект значение типа целое и переменной типа целое - значение типа указателя на объект, это конечно работать не будет. Явное приведение не поможет.

 

Неявное конечно работать не должно.

А вот явное - вполне может. Зависит от того, какого типа в MQL поинтеры, это я не помню.

Link to post
Share on other sites
AntFX
А вот явное - вполне может. Зависит от того, какого типа в MQL поинтеры, это я не помню.

Явное тоже работать не будет. Зато вот так можно сделать:

 
   a = new X;
   c = StringToInteger(StringFormat("%i", a));
 
Получится порядковый номер динамического объекта. Я так делал для отслеживания ошибок, связанных с удалением динамических объектов... Вряд ли товарищу нужно именно это
Edited by AntFX

1

Link to post
Share on other sites
ZeleBoba

А зачем промежуточная переменная? b=a да и всё.

 

 

Явное тоже работать не будет. Зато вот так можно сделать:

 
   a = new X;
   c = StringToInteger(StringFormat("%i", a));
 
Получится порядковый номер динамического объекта. Я так делал для отслеживания ошибок, связанных с удалением динамических объектов... Вряд ли товарищу нужно именно это

 

 

Неявное конечно работать не должно.

А вот явное - вполне может. Зависит от того, какого типа в MQL поинтеры, это я не помню.

Всем спасибо за ответ.

Проблем в следующем. Есть базовый, от него в производных методы все по коду "один в один", только отличаются типом возвращаемого значения (указатели на объекты разных классов). Вот и хотел, чтоб в каждом наследнике не городить "клонов", оставить всё в базовом.


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
STre

Всем спасибо за ответ.

Проблем в следующем. Есть базовый, от него в производных методы все по коду "один в один", только отличаются типом возвращаемого значения (указатели на объекты разных классов). Вот и хотел, чтоб в каждом наследнике не городить "клонов", оставить всё в базовом.

Ну, простым ответом было бы использование спп-шных шаблонов. Но надо пробовать насколько они реализованы в MQL,

Link to post
Share on other sites
AntFX
Проблем в следующем. Есть базовый, от него в производных методы все по коду "один в один", только отличаются типом возвращаемого значения (указатели на объекты разных классов). Вот и хотел, чтоб в каждом наследнике не городить "клонов", оставить всё в базовом.

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

Edited by AntFX

1

Link to post
Share on other sites
ZeleBoba

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

Мне необходимо создавать стеки для объектов различных классов. Конструктивно стек и элемент стека для объектов определенного класса ничем не отличается от стека для объектов другого класса. "Один-в-один". Вот только элемент стека отличается типом одного компонента - указателя на объект, и соответственно методы стека устанавливающие и возвращающие этот указатель отличаются только типом этого указателя, хотя сам он по размеру везде одинаковый (8 байт).

 

Есть базовый класс элемента и стека с виртуальными методами  (прототипы)

Приходится в производных классах прописывать методы "один-в-один" по коду, только возвращают (или получают) указатель на объект соответствующего класса.

 

И еще вопрос в догонку: подскажите как узнать открыт ли по инструменту хоть один график? Или перебирать запросом окна по всем тайм-фреймам?

stack.mq4

Edited by ZeleBoba

Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
AntFX

Вообще-то похоже на классическую задачу базового класса и его наследников. Вы сначала прописываете базовый класс, потом "наследуете" от него все остальные классы. Далее Вы можете передавать как указатель на базовый класс указатели на все производные классы. Наследование

 

Однако переменную - указатель на объект базового класса привести явно или неявно к указателю на объект производного класса можно только так:

void Func(CBaseClass *obj)

{

   CDerived *obj2=obj;

   // Далее работаем с obj2

}

 

Варианты типа (CDerived *)obj... не проходят в mql4

Edited by AntFX

1

Link to post
Share on other sites
ZeleBoba

Вообще-то похоже на классическую задачу базового класса и его наследников. Вы сначала прописываете базовый класс, потом "наследуете" от него все остальные классы. Далее Вы можете передавать как указатель на базовый класс указатели на все производные классы. Наследование

 

Однако переменную - указатель на объект базового класса привести явно или неявно к указателю на объект производного класса можно только так:

void Func(CBaseClass *obj)

{

   CDerived *obj2=obj;

   // Далее работаем с obj2

}

 

Варианты типа (CDerived *)obj... не проходят в mql4

Спасибо, это уже кое-что. буду думать и пробовать с этим вариантом.


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
kazakov.v

Спасибо, это уже кое-что. буду думать и пробовать с этим вариантом.

 

Можно из МТ5 позаимствовать стандартную библиотеку: там есть уже готовые массивы, списки объектов - чтобы велосипед не изобретать.


Никому верить нельзя.

Мне - можно.

 

Link to post
Share on other sites
OmegaS

добрый день! не могу понять одну вещь, сначала ведь должен выполниться весь цикл , а затем то что после цикла. В тестере все ок работает, при постанове советника на реал начинает косить((.

Смысл кода: в цикле подсчитываем общий профит открытых сделок, после цикла если общий профит больше 0, то закрываем все сделки. В тестере все нормально, в реале условие по общему профиту говорит что сумма сделок больше 0, хотя только одна сделка в плюсе :oops: , предположение что условие срабатывает быстрее чем цикл по открытым ордерам. 

 for (i=0; i<OrdersTotal(); i++)
        {tt=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
          if (OrderSymbol()==Symbol()) 
              {                       
                Ob_Profit=Ob_Profit+OrderProfit()+OrderSwap()+OrderCommission();
           }} 
     
     
     if ((Ob_Profit>0) && (Stavok>=2))  Close_All=1;
Link to post
Share on other sites
AntFX
не могу понять одну вещь, сначала ведь должен выполниться весь цикл , а затем то что после цикла. В тестере все ок работает, при постанове советника на реал начинает косить((.

В этом куске ошибок не видно, значит они до или после. Переменные Ob_Profit и Close_All определяются до, обработка Close_All происходит после, где-то там и закрались ошибки. 

Edited by AntFX

1

Link to post
Share on other sites
AntFX

 

 

сумма сделок больше 0, хотя только одна сделка в плюсе

Достаточно того, чтобы 1 сделка была в плюсе, перекрывающем минус всех остальных, чтобы условие сработало. 


1

Link to post
Share on other sites
OmegaS

В этом куске ошибок не видно, значит они до или после. Переменные Ob_Profit и Close_All определяются до, обработка Close_All происходит после, где-то там и закрались ошибки. 

Да Ob_Profit определена перед циклом, Close_All- глобальная , когда ставок=0 Close_All обнуляется. странно просто что в тестере все работает(.

Edited by OmegaS
Link to post
Share on other sites
AntFX
Close_All- глобальная , когда ставок=0 Close_All обнуляется

То есть там перед циклом есть строчка if(Stavok==0) Close_All=0? 

Ob_Profit нужно объявлять перед циклом так: double Ob_Profit=0;

Короче весь код в студию или велкам в клуб

Edited by AntFX

1

Link to post
Share on other sites
OmegaS

То есть там перед циклом есть строчка if(Stavok==0) Close_All=0? 

Ob_Profit нужно объявлять перед циклом так: double Ob_Profit=0;

Короче весь код в студию или велкам в клуб

О точно, спасибо за подсказку, у меня было объявлено так: double Ob_Profit;  без присвоения 0, видимо в этом ошибка..

Link to post
Share on other sites
  • 2 weeks later...
SIBARIT

Всем Привэт. Подскажите пожалуйста как прописать?: Если low четырёх последних свечей не отличаются более чем на 5 пунктов.

Link to post
Share on other sites
AntFX
Если low четырёх последних свечей не отличаются более чем на 5 пунктов.

 

Например так:

 

double diff=50*Point;

if(fabs(Low[5]-Low[4])

{

// some actions

}

 

или так

 

double diff=50*Point;

int num=4;

bool cond=true;

for(int i=1; i

{

if(fabs(Low[i+1]-Low)>diff)

{

cond=false;

break;

}

if(cond==true)

{

// some actions

}

Edited by AntFX
  • Thanks 1

1

Link to post
Share on other sites
qee

Можно еще поэкспериментировать с этим:

 

if (iLow(NULL,0,iHighest(NULL,0,MODE_LOW,4,1))-iLow(NULL,0,iLowest(NULL,0,MODE_LOW,4,1))<0.00005)

  • Thanks 2
Link to post
Share on other sites
NewAlex

здравствуйте!

подскажите, пож-та, по High[0], Low[0] и т.д...

1. что вернет, напр, High[0],  если бар еще не закрылся? самое большое значение "на текущий момент"?

2. что вернет, напр, High[0], в тестере, если бар еще не закрылся? не может такого быть, что при тестировании вернется максимальное значение, когда бар закроется, т.е. "из будущего"? наткнулся на уж больно подозрительно хороший советник, и вот там такое...

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...