Мани-менеджмент и ordersend

 

Я добавил в сову функцию расчёта лота и вынес размеры колен лота во внешние параметры. Странно. Но рабочий мани-менеджмент не работает не отрабатывается в сове.

Вот что я добавил в глобальные переменные в начало кода:

extern double mode_1 = 0.1;
extern double mode_2 = 0.2;
extern double mode_3 = 0.4;
extern double mode_4 = 0.8;
extern double mode_5 = 1.6;
extern double mode_6 = 3.2;
double LotsArray[6];

Вот этот код я добавил в int init():

LotsArray[0] = mode_1;
 LotsArray[1] = mode_2;
 LotsArray[2] = mode_3;
 LotsArray[3] = mode_4;
 LotsArray[4] = mode_5;
 LotsArray[5] = mode_6;

Вот сама функция расчёта лота double Lots():

double Lots()
 {
 //  double LotsArray[]={mode_1,mode_2,mode_3,mode_4,mode_5,mode_6};
 //  double LotsArray[]= {0.1,0.2,0.3,0.4,0.5,0.6};
   int LossCount = 0;
   double LotM=LotsArray[0];
   int total = OrdersHistoryTotal();
   for (int i = total-1; i >= 0; i--)
    {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
       {
         if (OrderProfit() > 0)
          {
            LotM=LotsArray[0];
            break;
          }         
          else
           {
            LotM=LotsArray[LossCount+1];
            LossCount++;
           }
       }
    }
   return(LotM);

Ну и есс-но что в каждый ordersend() я добавил функцию Lots() сова торгует постоянным лотов 0.1 без увеличения лота при лосе. Как такое может. Ведь больше тут ничего на лот не зависит как я понимаю.

Вот кусок отчёта с тестера:

108     2012.07.05 14:53        s/l     15      0.10    1.24544 1.24544 1.24787 -12.60  9995.40
109     2012.07.05 14:53        buy stop        16      0.10    1.24650 1.24590 1.24770 0.00    9995.40
110     2012.07.05 14:53        modify  16      0.10    1.24552 1.24429 1.24672 0.00    9995.40
111     2012.07.05 14:53        modify  16      0.10    1.24535 1.24412 1.24655 0.00    9995.40
112     2012.07.05 14:53        buy     16      0.10    1.24535 1.24412 1.24655 0.00    9995.40
113     2012.07.05 14:57        s/l     16      0.10    1.24412 1.24412 1.24655 -12.60  9982.80
114     2012.07.05 14:57        buy stop        17      0.10    1.24517 1.24457 1.24637 0.00    9982.80
115     2012.07.05 14:57        modify  17      0.10    1.24420 1.24297 1.24540 0.00    9982.80
116     2012.07.05 14:57        modify  17      0.10    1.24405 1.24282 1.24525 0.00    9982.80
117     2012.07.05 14:57        modify  17      0.10    1.24390 1.24267 1.24510 0.00    9982.80
118     2012.07.05 14:57        modify  17      0.10    1.24375 1.24252 1.24495 0.00    9982.80
119     2012.07.05 14:57        modify  17      0.10    1.24358 1.24235 1.24478 0.00    9982.80
120     2012.07.05 14:57        modify  17      0.10    1.24342 1.24219 1.24462 0.00    9982.80
121     2012.07.05 14:57        buy     17      0.10    1.24342 1.24219 1.24462 0.00    9982.80
122     2012.07.05 15:01        s/l     17      0.10    1.24219 1.24219 1.24462 -12.60  9970.20
123     2012.07.05 15:01        buy stop        18      0.10    1.24325 1.24265 1.24445 0.00    9970.20
124     2012.07.05 15:01        modify  18      0.10    1.24228 1.24105 1.24348 0.00    9970.20
125     2012.07.05 15:01        buy     18      0.10    1.24228 1.24105 1.24348 0.00    9970.20
126     2012.07.05 15:02        modify  18      0.10    1.24228 1.24314 1.24363 0.00    9970.20
127     2012.07.05 15:02        modify  18      0.10    1.24228 1.24330 1.24379 0.00    9970.20
128     2012.07.05 15:02        modify  18      0.10    1.24228 1.24345 1.24394 0.00    9970.20
129     2012.07.05 15:03        modify  18      0.10    1.24228 1.24361 1.24410 0.00    9970.20
130     2012.07.05 15:03        modify  18      0.10    1.24228 1.24376 1.24425 0.00    9970.20
131     2012.07.05 15:03        modify  18      0.10    1.24228 1.24392 1.24441 0.00    9970.20
132     2012.07.05 15:03        s/l     18      0.10    1.24392 1.24392 1.24441 16.10   9986.30
133     2012.07.05 15:03        buy stop        19      0.10    1.24494 1.24434 1.24614 0.00    9986.30
134     2012.07.05 15:03        modify  19      0.10    1.24397 1.24274 1.24517 0.00    9986.30
135     2012.07.05 15:03        buy     19      0.10    1.24397 1.24274 1.24517 0.00    9986.30
136     2012.07.05 15:13        s/l     19      0.10    1.24274 1.24274 1.24517 -12.60  9973.70
137     2012.07.05 16:33        buy stop        20      0.10    1.23780 1.23720 1.23900 0.00    9973.70


Файлы:
mmm2.1.1w.mq4  21 kb
 

А попробуйте так:

double Lots()
 {
 //  double LotsArray[]={mode_1,mode_2,mode_3,mode_4,mode_5,mode_6};
 //  double LotsArray[]= {0.1,0.2,0.3,0.4,0.5,0.6};
   int LossCount = 0;
   double LotM=LotsArray[0];
   int total = OrdersHistoryTotal();
   for (int i = total-1; i >= 0; i--)
    {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
       {
         if (OrderProfit() > 0)
          {break;}         
          else
           {
            LossCount++;
            LotM=LotsArray[LossCount];
           }
       }
    }
   return(LotM);

если я Вас правильно понял.

 
У меня тут тока комп заработал. Неделю не было.. Кстати, я заметил, TarasBY, что ты исправил функцию второй раз. Первый раз они было чуток другой, но тоже работало. Логика у тебя верная. Всё заработало. Благодарю!
 
hoz:
У меня тут тока комп заработал. Неделю не было.. Кстати, я заметил, TarasBY, что ты исправил функцию второй раз. Первый раз они было чуток другой, но тоже работало. Логика у тебя верная. Всё заработало. Благодарю!
Код должен быть НЕ ТОЛЬКО верным, НО и КРАТКИМ. Во второй раз просто "укоротил". :)
Причина обращения: