[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 250

 
Включил. Щас.
 
Брат пришол.
 
void IndicatorBuffers( int count)

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

Т.е. допустимо так?

#property  indicator_buffers 9

double     ind_buffer1[]; // Массив для дополнительных расчётов
double     ind_buffer2[];
double     ind_buffer3[];
double     ind_buffer4[];
double     ind_buffer5[];
double     ind_buffer6[];
double     ind_buffer7[];
double     ind_buffer8[];
double     ind_buffer9[];   

SetIndexBuffer(0,ind_buffer2);
SetIndexBuffer(1,ind_buffer3);
SetIndexBuffer(2,ind_buffer4);
SetIndexBuffer(3,ind_buffer5);
SetIndexBuffer(4,ind_buffer6);
SetIndexBuffer(5,ind_buffer7);
SetIndexBuffer(6,ind_buffer8);
SetIndexBuffer(7,ind_buffer9);


 

Кто нибудь может проконсультировать в личке как написать эксперта? В частности: как к трейлинг стопу приписать двойной лот?

 
Leo59:
void IndicatorBuffers( int count)

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

Т.е. допустимо так?...

Нет.
#property indicator_buffers 9
"Количество буферов не может превышать 8" - ключевые слова и для #property indicator_buffers, и для IndicatorBuffers.
В #property indicator_buffers указывается количество рисующих буферов, тогда IndicatorBuffers = #property indicator_buffers+количество нерисующих буферов для расчета. Если все буфера рисуют, то IndicatorBuffers = #property indicator_buffers. В этом случае использование IndicatorBuffers необязательно.
 

Прошу помощи знатоков. Уже пару раз задавал этот вопрос тут, давал работу на mql5.com/ru/job, на данный момент убито уйма времени, денег и сил, но результата нет.. :(

Цель поставленной задачи - написать функцию, которая должна проверять существование ордера в диапазоне цен.

Еще проще - на вопрос, есть ли в диапазоне от 0.9995 до 1.0005 ордер bay, к примеру.

Выложившему здесь рабочее решение,... ну к примеру 15$...

МТ4..

 
granit77:
Нет.
#property indicator_buffers 9
"Количество буферов не может превышать 8" - ключевые слова и для #property indicator_buffers, и для IndicatorBuffers.
В #property indicator_buffers указывается количество рисующих буферов, тогда IndicatorBuffers = #property indicator_buffers+количество нерисующих буферов для расчета. Если все буфера рисуют, то IndicatorBuffers = #property indicator_buffers. В этом случае использование IndicatorBuffers необязательно.

Уважаемый granit77! Если Вас не затруднит, внесите исправления прямо в код, если что не так, пожалуйста. Это будет наглядно и понятно.

#property  indicator_buffers 8

double     ind_buffer1[]; // Массив для дополнительных расчётов
double     ind_buffer2[];
double     ind_buffer3[];
double     ind_buffer4[];
double     ind_buffer5[];
double     ind_buffer6[];
double     ind_buffer7[];
double     ind_buffer8[];
double     ind_buffer9[];   

int init()
  {

IndicatorBuffers(9);

SetIndexBuffer(0,ind_buffer2);
SetIndexBuffer(1,ind_buffer3);
SetIndexBuffer(2,ind_buffer4);
SetIndexBuffer(3,ind_buffer5);
SetIndexBuffer(4,ind_buffer6);
SetIndexBuffer(5,ind_buffer7);
SetIndexBuffer(6,ind_buffer8);
SetIndexBuffer(7,ind_buffer9);

   return(0);
  }
 
 
w_ersoc:

Прошу помощи знатоков. Уже пару раз задавал этот вопрос тут, давал работу на mql5.com/ru/job, на данный момент убито уйма времени, денег и сил, но результата нет.. :(

Цель поставленной задачи - написать функцию, которая должна проверять существование ордера в диапазоне цен.

Еще проще - на вопрос, есть ли в диапазоне от 0.9995 до 1.0005 ордер bay, к примеру.

Выложившему здесь рабочее решение,... ну к примеру 15$...

МТ4..

В цикле перебирайте все открытые позиции, если тип выбранного ордера равен переданному в функцию, если магик ордера равен магику советника, если символ ордера равен переданному в функцию, если цена открытия ордера попадает в заданный диапазон (больше, либо равно 0.9995 и меньше, либо равно 1.0005), то ф-ция возвращает true, иначе - возвращает false.

Это ж простой перебор ордеров с проверкой на совпадение условий.

ЗЫ. На 15 баксов бабе мороженное, детям - цветы... или наоборот ... :)

 
artmedia70:

В цикле перебирайте все открытые позиции, если тип выбранного ордера равен переданному в функцию, если магик ордера равен магику советника, если символ ордера равен переданному в функцию, если цена открытия ордера попадает в заданный диапазон (больше, либо равно 0.9995 и меньше, либо равно 1.0005), то ф-ция возвращает true, иначе - возвращает false.

Это ж простой перебор ордеров с проверкой на совпадение условий.

ЗЫ. На 15 баксов бабе мороженное, детям - цветы... или наоборот ... :)

угу. все элементарно. но не работает.

рассуждать можно, но уже столько человек говорили, что фигня а в итоге ничего ((

 
w_ersoc:

угу. все элементарно. но не работает.

рассуждать можно, но уже столько человек говорили, что фигня а в итоге ничего ((


Нате вам :

//+------------------------------------------------------------------+
//|          Function  : GetOrdersInThePrice(min,max,&tickets[])bool |
//|          Copyright © 2012, XrustSolution.  mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
//|   Description: Пишет в массив тикеты ордеров с ценою открытия    |
//| между максимальной и минимальной ценой, если ордеров нет = false |
//+------------------------------------------------------------------+
bool GetOrdersInThePrice(double pr1,double pr2,int &tickets[]){int i,ii;double min,max;
   min = MathMin(pr1,pr2);
   max = MathMax(pr1,pr2);
   ArrayResize(tickets,100);
   for(i=OrdersTotal()-1;i>=0;i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()!=Symbol()){continue;}
         if(OrderOpenPrice()>max){continue;}
         if(OrderOpenPrice()<min){continue;}
         tickets[ii] = OrderTicket();
         ii++;
      }
   }
   if(ii<1){return(false);}
   ArrayResize(tickets,ii);
   return(true);
}
Причина обращения: