Спрашивайте! - страница 176

 

PS: напоминаю - 3-й параметр в вызове iCustom() - это имя индикатора. Первый параметр - символ, а второй - желаемый таймфрейм.

mladen:
Сделайте это следующим образом:
array[0]=iClose("EURUSD",0,0); [/PHP]

and so on. That way array will be filled with close prices for symbols you select. If you are using a custom indicator then the form is the following :

[PHP]array[0]=iCustom("EURUSD",0,"indicator name",0,0);
 

MLaden

Я вызываю пользовательский индикатор с помощью icustom в цикле для нескольких пар. Я вижу на вкладке экспертов, что индикатор выгружается, а затем перезагружается для следующей пары. Означает ли это, что вызов iCustom пересчитывает значения для всего максимального количества баров на графике каждый раз, когда он загружается? Также, если вы вызываете его для бара N, а затем для бара N+1 как отдельные последовательные вызовы, требует ли второй вызов полного пересчета? И, наконец, если последовательные вызовы выполняются для разных буферов, пересчитывается ли каждый из них.

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

Спасибо за ответ,

Цуман

 

Цуман,

Metatrader создает новый экземпляр индикатора для каждого нового набора значений параметров (исключение составляют номер буфера и индекс).

Пример - следующие два вызова:

iCustom(NULL,0, "name",1,0,0);

iCustom(NULL,0, "name",2,0,0);

создадут два экземпляра индикатора (даже если вы используете, например, "n" вместо 1 и 2 и присвоите n разные значения перед новым вызовом iCustom(), это создаст отдельные экземпляры. Именно поэтому некоторые адаптивные индикаторы не могут быть написаны с помощью iCustom(), а должны быть выполнены в виде функций).

Это что касается экземпляров. Но если индикатор загружается, а затем выгружается, то это обычно проблема с параметрами (на это обычно указывает часть выгрузки). Если типы параметров не совпадают, то он будет делать трюк "загрузить - выгрузить". Проверьте, не является ли случайно какой-либо из параметров, переданных iCustom, не тем типом, который ожидается (или некоторые параметры случайно опущены, что может привести к смешению типов параметров).

Tzuman:
MLaden

Я вызываю пользовательский индикатор с помощью icustom в цикле для нескольких пар. Я вижу на вкладке экспертов, что индикатор выгружается, а затем перезагружается для следующей пары. Значит ли это, что вызов iCustom пересчитывает значения для всех максимальных баров на графике каждый раз, когда он загружается? Также, если вы вызываете его для бара N, а затем для бара N+1 как отдельные последовательные вызовы, требует ли второй вызов полного пересчета? И, наконец, если последовательные вызовы выполняются для разных буферов, пересчитывается ли каждый из них.

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

Спасибо за ответ,

Цуман
 

Я не хотел прерывать ваши недавние обсуждения

пожалуйста, загляните в эту новую тему

https://www.mql5.com/en/forum/182212

 

Как я вижу, mrtools уже решил эту проблему.

MaaTini:
Я не хотел прерывать ваши недавние обсуждения

Пожалуйста, загляните в эту новую тему

https://www.mql5.com/en/forum/182212
 
mladen:
Цуман,

Metatrader создает новый экземпляр индикатора для каждого нового набора значений параметров (исключение составляют номер и индекс буфера).

Пример - следующие два вызова :

iCustom(NULL,0, "name",1,0,0);

iCustom(NULL,0, "name",2,0,0);

создадут два экземпляра индикатора (даже если вы используете, например, "n" вместо 1 и 2 и присвоите n разные значения перед новым вызовом iCustom(), он создаст отдельные экземпляры. Именно поэтому некоторые адаптивные индикаторы не могут быть написаны с помощью iCustom(), а должны быть выполнены в виде функций).

Теперь это касается экземпляров. Но если индикатор загружается, а затем выгружается, то это обычно проблема с параметрами (на это обычно указывает часть выгрузки). Если типы параметров не совпадают, то он будет делать трюк "загрузить - выгрузить". Проверьте, не является ли случайно какой-либо из параметров, переданных iCustom, не тем типом, который ожидается (или некоторые параметры случайно опущены, что может привести к смешению типов параметров).

Большое спасибо за объяснение. Я предполагал, что загрузка/выгрузка вызвана тем, что Символ меняется на каждой итерации цикла, поэтому ему приходится загружать все новые значения данных,

например, iCustom("EURUSD",0, "name" ,1,0,0); & iCustom("GBPUSD",0,name" ,1,0,0);

Я буду тщательно проверять параметры, но я перешел к написанию собственных функций усреднения MA с некоторым плагиатом. Просто посмотрев на загрузку процессора в диспетчере задач, кажется, что загрузка процессора снизилась на 90-95%. Я счастлив.

 

Здравствуйте, гуру, я новичок в кодинге, не могли бы вы помочь мне в "остановке открытия множественного ордера при достижении тейкпрофита", я пробовал такой код, но он не работает. не могли бы вы мне помочь, пожалуйста.

static datetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy==true || sell==true) && closeT==Time[0]){buy=false; sell=false;} } } }

 

спасибо mladen, я попробую ваш код.

 
RBarias:
Здравствуйте, гуру, я новичок в кодинге, не могли бы вы помочь мне в "остановке открытия нескольких ордеров при достижении тейкпрофита", я пробовал такой код, но он не работает. не могли бы вы мне помочь, пожалуйста.

staticdatetime closeT;

for(int a=OrdersHistoryTotal()-1; a>=0; a--) {if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==true) {if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime()) { closeT=OrderCloseTime(); if((buy==true || sell==true) && closeT==Time[0]){buy=false; sell=false;} } } }

Вы можете попробовать что-то вроде этого (это будет проверять, закрыт ли последний закрытый ордер на текущем баре и был ли установлен тейк-профит ):

datetime closeT= 0;

int ticket=-1;

for(int a=OrdersHistoryTotal()-1; a>=0; a--)

{

if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY))

if(OrderMagicNumber()==magic && OrderSymbol()==symb && closeT<OrderCloseTime())

{

closeT=OrderCloseTime();

ticket=OrderTicket();

}

}

if (ticket>-1)

{

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(iBarShift(symb,0,closeT)==0 && OrderClosePrice()==OrderTakeProfit())

{

buy =false;

sell=false;

}

}
 

Привет, Младен,

Ваш скрипт Symbols.mq4 прекрасно работал в MT4 build 509, но в build 636 (при открытии файла symbols.raw) он выдает ошибку файла.

Не могли бы вы поделиться обновленной версией для MT4 build 636?

Заранее большое спасибо.

С уважением,

Тимо.