Профи помогите !!!! - страница 2

 
Теперь в данный код мне нужно дописать условие открытия ордера и само открытия и советник простецкий готов !
 
VOLDEMAR:

Вот как я это сделал посмотрите может кому поможет

Таким образом теперь что бы включить обычный трал мне не нужно перерывать всю свою базу кодов в поиске нужного кода, или переписывать его с ноля, я просто в советник дописываю Tral ()

и при компиляции мета едитор дописывает нужный фрагмент в моего эксперта .....

Так (директивой #import) включают библиотеки.
 
VladislavVG:

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

Нужное количество, например, рыночных ордеров на покупку получите так OrdCount[OP_BUY]

Гораздо меньше проблем будет.


с чем могут быть проблемы и чем моя функция хуже ???

и ещё вопрос я не работал с массивами не знаю ... если происходит перезагрузка компьютера информация из массивов стирается или каким то образом востанавливается ????

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

 
VOLDEMAR:


с чем могут быть проблемы и чем моя функция хуже ???

и ещё вопрос я не работал с массивами не знаю ... если происходит перезагрузка компьютера информация из массивов стирается или каким то образом востанавливается ????

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

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

Чтобы она выполняла то, что Вы хотите ее нужно немного изменить:

int Orders (int &n=0, int &b=0, int &s=0, int &bs=0,int &ss=0,int &bl=0,int &sl=0)
{
   n=0; b=0; s=0; bs=0; ss=0; bl=0; sl=0;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {if(OrderSelect(i, SELECT_BY_POS))
   {if(OrderSymbol()==Symbol()      )
   {                                                            n ++;    
      if (OrderType()==OP_BUY      &&OrderMagicNumber()==Magic){b ++;}
      if (OrderType()==OP_SELL     &&OrderMagicNumber()==Magic){s ++;}
      if (OrderType()==OP_BUYSTOP  &&OrderMagicNumber()==Magic){bs++;}
      if (OrderType()==OP_SELLSTOP &&OrderMagicNumber()==Magic){ss++;}
      if (OrderType()==OP_BUYLIMIT &&OrderMagicNumber()==Magic){bl++;}
      if (OrderType()==OP_SELLLIMIT&&OrderMagicNumber()==Magic){sl++;}     
   }}}
return(n);
}
 
VladislavVG:
Так (директивой #import) включают библиотеки.


Согласен ... Так и библиотеки имеют расширение mqh .....

Я перепробовал массу способов и заметил что то что написано в документации работает или работало наверно в билдах ниже 300 сейчас в документации много неправды, вот так вот оно и получается ....

 
VOLDEMAR:


Согласен ... Так и библиотеки имеют расширение mqh .....

Я перепробовал массу способов и заметил что то что написано в документации работает или работало наверно в билдах ниже 300 сейчас в документации много неправды, вот так вот оно и получается ....

Нет, библиотеки имеют расширение mq4. Директивой #import подключается код из откомпилированных файлов, то есть с расширением .ex4. Происходит это на этапе исполнения кода. Тогда еще и нужен заголовочный файл - с расширением .mqh. В нем должны быть описания подключаемых функций. Иначе на этапе компиляции Вы подключаемыми функциями не сможете воспользоваться.

В случае же использования #include включение кода происходит на этапе компиляции - это все равно, что Вы внесете код функции в соответствующее место файла - эксперта, индикатора или скрипта. Работать будет быстрее.

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


Странно как то .... Чем эт она бесполезна )))))

 
По поводу работать быстрее ... От чего это зависит от аппаратной части компьютера или от самого кода ???
 

В таком исполнении кода компилятор ругается

int Orders (int &n=0, int &b=0, int &s=0, int &bs=0,int &ss=0,int &bl=0,int &sl=0)

 
VOLDEMAR:


Странно как то .... Чем эт она бесполезна )))))

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