Функция на покупку

 

Пытаюсь написать первый советник, необходимо написать функцию,  условие такое:

Если ордеров на продажу равно 1, а ордеров на покупку меньше 10 ,

то выставляем один стоповый ордер (buy limit)  на покупку  на (n- пунктов от реальной цены)  

 
Fizkulitprivet:

Пытаюсь написать первый советник, необходимо написать функцию,  условие такое:

Если ордеров на продажу равно 1, а ордеров на покупку меньше 10 ,

то выставляем один стоповый ордер (buy limit)  на покупку  на (n- пунктов от реальной цены)  

Пишите на MQL5?
 

Vladimir Karputov:
Пишите на MQL5?

 

нет, из терминала мт4 

 
Fizkulitprivet:

Пример функции подсчета ордеров

 

если используете магик ордера то нужно еще вставить проверку 

if(OrderMagicNumber()!=magic)continue;
 

Капец какой-то , не возможно нормально вставить части кода при чередовании текста. Функция подсчета ордеров

int total_order(int type)
  {
   int n=0;
   int total=OrdersTotal();
   for(int i=0; i<total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderType()!=type)continue;
      n++;
     }
   return(n);
  }

 ...

 

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

int total_order(int type)
  {
   int n=0;
   int total=OrdersTotal();
   for(int i=0; i<total; i++)
     {

      if(OrderMagicNumber()!=magic)continue;
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderType()!=type)continue;
      n++;
     }
   return(n);
  }


 
Fizkulitprivet:

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

int total_order(int type)
  {
   int n=0;
   int total=OrdersTotal();
   for(int i=0; i<total; i++)
     {

      if(OrderMagicNumber()!=magic)continue;
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=Symbol())continue;
      if(OrderType()!=type)continue;
      n++;
     }
   return(n);
  }


Неправильно, строчку с проверкой на магик нужно перенести за строчку   OrderSelect.

Читаем справку

Ордер должен быть предварительно выбран с помощью функции OrderSelect()

 
Alekseu Fedotov:

Неправильно, строчку с проверкой на магик нужно перенести за строчку   OrderSelect.

Читаем справку

Ордер должен быть предварительно выбран с помощью функции OrderSelect()

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

Я пользуюсь  языком на уровне копировать - вставить и не испытываю от этого дискомфорта. Я сравниваю несколько советников с открытыми кодами ( в некоторых иногда попадаются хорошие коментарии.

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

Обратившись тут на форуме с просьбой не думаю что я тут кого-то удивил своей супер-пупер навороченной идеей или стратегией которую я тщательно скрываю... 

Спасибо Sergey Gritsay за отдельно написанную функцию подсчета ордеров мне она тоже когда-нибудь пригодится.

 
Fizkulitprivet:

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

Я пользуюсь  языком на уровне копировать - вставить и не испытываю от этого дискомфорта. Я сравниваю несколько советников с открытыми кодами ( в некоторых иногда попадаются хорошие коментарии.

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

Обратившись тут на форуме с просьбой не думаю что я тут кого-то удивил своей супер-пупер навороченной идеей или стратегией которую я тщательно скрываю... 

Спасибо Sergey Gritsay за отдельно написанную функцию подсчета ордеров мне она тоже когда-нибудь пригодится.

   int CountTrades(int otype)
{
   int count =0;     // обнуляем переменную
  
   for(int i = OrdersTotal() - 1; i >= 0; i--)          //    перебор открытых и отложеных ордеров
   {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)   // если получилось выбрать ордер
       {
           if(OrderSymbol() == Symbol() && OrderType() == otype)  // проверяем наш ли ордер
           {
             count++; // плюсуем наши ордера
           } 
       }
   }
   return(count);
}
 

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

 

//-----------------------глобальные переменные------------------------------------

extern int Magic =123;

 

//-----------------------функция подсчета ордеров------------------------------------ 

int CountTrades(int otype,)
{
   int count =0;     // обнуляем переменную
  
   for(int i = OrdersTotal() - 1; i >= 0; i--)          //    перебор открытых и отложеных ордеров
   {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)   // если получилось выбрать ордер
       {
           if(OrderSymbol() == Symbol() && OrderType() == otype && OrderMagicNumber() == Magic)  // проверяем наш ли ордер
           {
             count++; // плюсуем наши ордера
           }
       }
   }
   return(count);
}

//--------------------------------------------------------- 

если честно такой вариант написания кода мне более ближе . 

Но насколько я все правильно понимаю это всего лишь часть функции которую я хочу написать, 

предположу что выше этой функции я должен  написать дополнительно примерно такой код:

 
Fizkulitprivet:

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

 

//-----------------------глобальные переменные------------------------------------

extern int Magic =123;

 

//-----------------------функция подсчета ордеров------------------------------------ 

int CountTrades(int otype,)
{
   int count =0;     // обнуляем переменную
  
   for(int i = OrdersTotal() - 1; i >= 0; i--)          //    перебор открытых и отложеных ордеров
   {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)   // если получилось выбрать ордер
       {
           if(OrderSymbol() == Symbol() && OrderType() == otype && OrderMagicNumber() == Magic)  // проверяем наш ли ордер
           {
             count++; // плюсуем наши ордера
           }
       }
   }
   return(count);
}

//--------------------------------------------------------- 

если честно такой вариант написания кода мне более ближе . 
да верно