Скачать MetaTrader 5

Глушем минуса

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
jhon
186
jhon 2013.02.22 16:41 

Здравствуйте ребята. 

 Помогите написать одну функцию а то что-то никак не могу понять почему не работает, по моему все верно делаю ну а на деле показывается что нет. Где ошибка понять не могу! Может Вам будет виднее. Смысл функции в следующем... Хочу научить советник уменьшать лот после пятого лосса. Вот как это выглядит в коде... Принты для откладки нужны были. Так и не понял где баг но вроде бы все правильно. 

int getminusorder( int magic)
{
   
   int history = OrdersHistoryTotal();
   for(int i = history; i>=0;i--)   
   if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
   if(OrderSymbol() == Symbol())
   if(OrderMagicNumber() == magic)
   if(OrderType())
   {
      Print("OrderProfit:", OrderProfit());
      Print("Total:", history);
      if(OrderProfit() < 0)
      {
         xyz++;  
         Print("xyz:", xyz);
      }
      else if(OrderProfit() > 0) 
      {
         xyz = 0;
         Print("xyz:", xyz);
         return (xyz);
      }
   }
   
   return (xyz);
}
Alekseu Fedotov
893
Alekseu Fedotov 2013.02.22 16:51  
jhon:

Здравствуйте ребята. 

 Помогите написать одну функцию а то что-то никак не могу понять почему не работает, по моему все верно делаю ну а на деле показывается что нет. Где ошибка понять не могу! Может Вам будет виднее. Смысл функции в следующем... Хочу научить советник уменьшать лот после пятого лосса. Вот как это выглядит в коде... Принты для откладки нужны были. Так и не понял где баг но вроде бы все правильно. 

Попробуй так..
int getminusorder( int magic)
{
   
   int history = OrdersHistoryTotal();
   for(int i = history; i>=0;i--)   
   if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
   if(OrderSymbol() == Symbol())
   if(OrderMagicNumber() == magic)
   {
      Print("OrderProfit:", OrderProfit());
      Print("Total:", history);
      if(OrderProfit() < 0)
      {
         xyz++;  
         Print("xyz:", xyz);
      }
      else if(OrderProfit() > 0) 
      {
         xyz = 0;
         Print("xyz:", xyz);
         return (xyz);
      }
   }
   
   return (xyz);
}
TarasBY
1739
TarasBY 2013.02.22 17:06  

Туточки единички не хватает:

int history = OrdersHistoryTotal() - 1;
pako
3319
pako 2013.02.22 17:16  
jhon:

Здравствуйте ребята. 

 Помогите написать одну функцию а то что-то никак не могу понять почему не работает, по моему все верно делаю ну а на деле показывается что нет. Где ошибка понять не могу! Может Вам будет виднее. Смысл функции в следующем... Хочу научить советник уменьшать лот после пятого лосса. Вот как это выглядит в коде... Принты для откладки нужны были. Так и не понял где баг но вроде бы все правильно. 


for (int i=0; i<OrdersHistoryTotal(); i++) 
Alexey Subbotin
4998
Alexey Subbotin 2013.02.22 18:17  
pako:

Так нельзя. Перебирать надо с конца.
Alexey Subbotin
4998
Alexey Subbotin 2013.02.22 18:21  
jhon:

Здравствуйте ребята. 

 Помогите написать одну функцию а то что-то никак не могу понять почему не работает, по моему все верно делаю ну а на деле показывается что нет. Где ошибка понять не могу! Может Вам будет виднее. Смысл функции в следующем... Хочу научить советник уменьшать лот после пятого лосса. Вот как это выглядит в коде... Принты для откладки нужны были. Так и не понял где баг но вроде бы все правильно. 


Что конкретно неверно пашет?

Если вы хотите посчитать количество лосей подряд, то зачем тогда возвращать ноль из-под else if () ?

TarasBY
1739
TarasBY 2013.02.22 18:29  
alsu:

Что конкретно неверно пашет?

Если вы хотите посчитать количество лосей подряд, то зачем тогда возвращать ноль из-под else if () ?

согласен. Очевиднее так:

//| Функция возвращает количество последних "лосей"
int fGet_LossOrder (int magic)
{
    int history = OrdersHistoryTotal() - 1, xyz = 0;
    Print ("Total: ", history);
//----
    for (int i = history; i >= 0; i--)
    { 
        if (!OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderMagicNumber() != magic) continue;
        Print ("OrderProfit:", OrderProfit());
        if (OrderProfit() <= 0)
        {
            xyz++;  
            Print ("xyz:", xyz);
        }
        else break;
    }
//----
    return (xyz);
}
...и, как я понимаю, при превышении лимита "лосей" что-то производится с лотом следующего открываемого ордера.
Дмитрий
1460
Дмитрий 2013.02.22 22:05  
alsu:

Так нельзя. Перебирать надо с конца.

Кому как. Разницы не вижу, только "-1" в коде.
Boris
3896
Boris 2013.02.22 22:22  
grell:

Кому как. Разницы не вижу, только "-1" в коде.

А почему бы не ввести счётчик и после подряд следущего лося ++, и когда дойдёт до 5-ти лот уменьшить, и всё!

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

Дмитрий
1460
Дмитрий 2013.02.22 22:27  
borilunad:
А почему бы не ввести счётчик и после подряд следущего лося ++, и когда дойдёт до 5-ти лот уменьшить, и всё!

А я тут причем? Я просто обратил внимание, что хистори капризная штука. Сортировка может быть разной.
Дмитрий
1460
Дмитрий 2013.02.22 22:28  
borilunad:
А почему бы не ввести счётчик и после подряд следущего лося ++, и когда дойдёт до 5-ти лот уменьшить, и всё!

На мой взгляд правильней мониторить историю, чем хранить счетчик. Запись/чтение из файла тоже никто не отменял.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий