Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1085

 
Alexandr Nikolaev:
Получается OrderSelect по тикету из закрытых и удаленных ордеров ищет только среди загруженной в терминал истории? Об этом в справочнике не написано.

да

тут, по сути, ЕА доступны данные лишь те которые Вы можете сами найти в терминале

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


Aleksey Mavrin:

В описании OrdersHistoryTotal  написано.

при выборе ордера по тикету:

Параметр pool игнорируется

https://docs.mql4.com/ru/trading/orderselect
 
Кто нибудь подскажет как можно получить хэндл самого последнего файла в папке, не зная его имени. То есть при запуске скрипта нужно обращаться к самому свеже созданному файлу, что не соображу что нужно засунуть в цикл. MQL4
 
hoka777:
Кто нибудь подскажет как можно получить хэндл самого последнего файла в папке, не зная его имени. То есть при запуске скрипта нужно обращаться к самому свеже созданному файлу, что не соображу что нужно засунуть в цикл. MQL4

FileFindFirstFileFindNext, FileGetInteger

 

что означает такая запись?

int tf=0x0001|0x0002|0x0004|0x0008|0x0010|0x0020|0x0040;
 
Seric29:

что означает такая запись?

Равно что и это:

int tf=1|2|4|8|16|32|64;

Кто-то где-то для чего-то использует флаги. Эта запись говорит, что в переменной tf хранится 7 флагов, и все они взведены.

 

Отслеживание ордеров.

 

Здравия всем , Господа форумчане.

Столкнулся с необходимостью отслеживать ордера для копировщика и был удивлен сложностью вопроса.

 

Задача.

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

 

Возможные варианты решения.

1.  Мониторить весь список ордеров каждый тик пока не очень привлекает.

2. В MQL5 есть хорошие функции OnTrade() и OnTradeTransaction(), но в MQL4 аналогов не нашел.

3. Видится привлекательным отслеживать на графике манипуляции с линиями Last ордеров и их TP и  SL с помощью OnChartEvent, однако эти объекты не видны и не обрабатываются функцией. Может есть способ их "проявить"?

4. Сейчас думаю над возможностью получения информации из общего лога. Там тоже придется мониторить, но меньше.

 

Удовлетворительного решения пока не нашел, может, кто уже копал?

 

 
Artyom Trishkin:

Равно что и это:

Кто-то где-то для чего-то использует флаги. Эта запись говорит, что в переменной tf хранится 7 флагов, и все они взведены.

int tf=1|2|4|8|16|32|64;

А почему они записаны через вертикальную палочку как это использовать? К каждой части этого флага можно обратиться? Вот есть такой код.

    if(_Period==1440){diff=86399; tf=0x0001|0x0002|0x0004|0x0008|0x0010|0x0020|0x0040;}// выбор старшего ТФ, с него скрипт рисует на младших ТФ
    if(_Period==240) {diff=14340; tf=0x0001|0x0002|0x0004|0x0008|0x0010|0x0020;}
    if(_Period==60)  {diff=3540;  tf=0x0001|0x0002|0x0004|0x0008|0x0010;}
    if(_Period==30)  {diff=1740;  tf=0x0001|0x0002|0x0004|0x0008;}
    if(_Period==15)  {diff=840;   tf=0x0001|0x0002|0x0004;}
    if(_Period==5)   {diff=240;   tf=0x0001|0x0002;}  

    cl_timeM1=op_timeM1 + diff ;                    // координата даты и времени бара М1 по цене CLOSE старшего ТФ
    cl_NumBarM1=iBarShift(NULL,PERIOD_M1,cl_timeM1);// индекс бара М1
    cl_priceM1=iClose(NULL,PERIOD_M1,cl_NumBarM1);  // координата цены CLOSE бара М1
      
//--- трендовые линии -----------------------------------------------+ 
   for(i=0;i<1000000;i++){name1="Point_"+i; if(ObjectFind(name1)<0) break;}     // позволяет рисовать множество объектов с одинаковым именем, добавляя к имени порядковый номер
  
   ObjectCreate(0,name1,OBJ_TREND,0,op_timeM1,op_priceM1,cl_timeM1,cl_priceM1); // создать объект трендовая линия с координатами цены и времени  
   ObjectSet(name1,OBJPROP_COLOR,clrWhite);                                     // задать цвет объекта
   ObjectSet(name1,OBJPROP_STYLE,STYLE_DASH);                                   // задать стиль объекта (пунктир, линия...)
   ObjectSet(name1,OBJPROP_RAY,false);
   Строчка ниже будет отрисовываться нужное количество раз или что?
   ObjectSet(name1,OBJPROP_TIMEFRAMES,tf);    
 
Seric29:

А почему они записаны через вертикальную палочку как это использовать? 

пока Вы называете это "вертикальной палочкой", Вы не сможете этот код прочитать

читайте справку https://www.mql5.com/ru/docs/basis/operations/bit

 
Igor Makanu:

пока Вы называете это "вертикальной палочкой", Вы не сможете этот код прочитать

читайте справку https://www.mql5.com/ru/docs/basis/operations/bit

Я почитал(уже не знаю в какой раз) понял плохо потому что нет примеров этого использования и непонятно для чего это нужно. Там есть пример 

int a=305;
int b=a;      
int shift=37; 
shift++; 
a=a>>shift;   // 38 в двоичном представлении будет выглядеть как '100110', младшие 5 бит '00110' представляют число 6 
b=b>>6;

А можно ли как-то эту строчку

if(_Period==1440){diff=86399; tf=0x0001|0x0002|0x0004|0x0008|0x0010|0x0020|0x0040;}

 записать покороче через счётчик?

 
Seric29:

Я почитал(уже не знаю в какой раз) понял плохо потому что нет примеров этого использования и непонятно для чего это нужно. Там есть пример 

Вы не тот пример читали

Побитовая операция ИЛИ

Побитовая операция ИЛИ двоичных представлений x и y. Значение выражения содержит 1 во всех разрядах, в которых x или y не содержит 0, и 0 - во всех остальных разрядах.

b = x | y;

Пример:

 char a='a',b='b';
//--- операция ИЛИ
   char c=a|b;
   Print("a = ",a,"  b = ",b);
   Print("a | b = ",c);
// Результат будет такой:
// a = 97   b = 98
// a | b = 99
Причина обращения: