Лот не обнуляется...

 
.......
double   RecLot;

int init()
  {
   RecLot=0;
  }

int start()
  {
.......

//--- Расчет размера лота ------------------------------------------------------------
   RefreshRates();
   double LotsStep=NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP),2);
   double LotsMin=NormalizeDouble(MarketInfo(Symbol(),MODE_MINLOT),2);
   double LotsMax=NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT),2);
   if (LotsStep==0.01) LotsDigit=2; else LotsDigit=1;
   if (Lots==0) WorkLot=NormalizeDouble (AccountEquity()*LotsPercent/100000,LotsDigit);
   else WorkLot=Lots;
  
   RecLot=OrderLots();
   SpyLot=NormalizeDouble(AccountEquity()*LotsPercent/100000,LotsDigit);
   if (Lots==0 && SpyLot<RecLot) WorkLot=RecLot;
   
   if (WorkLot>LotsMax) WorkLot=LotsMax;
   if (WorkLot<LotsMin) WorkLot=LotsMin;
.......

Всем доброго времени суток! Мне необходимо было чтобы лот только увеличивался или оставался прежним, для этого решил записывать лот текущего ордера RecLot, но при тестировании столкнулся с небольшой проблемкой: при изменении параметров лот не обнуляется, а остается прежним. А мне надо чтобы в тестере он при новом прогоне обнулялся. Да и не только в тестере.

Пожалуйста, подскажите, как это исправить?

 
Люди добрые, пожалуйста, подскажите как исправить или другой способ реализации задуманного!!!
 

Непонятно что подразумевается под термином "новый прогон". Это что перезапуск советника, или очередной прогон при оптимизации? Если при перезапуске советника то Всё верно - в блоке инициализации лот инициализируется нулём и с этого значения стартует. Далее с ним можно делатиь что угодно, но только до тех пор, пока тест ни закончится. Если при оптимизации, то можно придумать принудительное обнуление в зависимости от того, поменялся ли какой-нибудь параметр. Например, можно воткнуть счётчик проходов оптимизатора и указать в параметрах значение от 1 до икса. Если этот счётчик изменился (увеличился на 1), то лот обнуляем принудительно.

 
WindSW:

Всем доброго времени суток! Мне необходимо было чтобы лот только увеличивался или оставался прежним, для этого решил записывать лот текущего ордера RecLot, но при тестировании столкнулся с небольшой проблемкой: при изменении параметров лот не обнуляется, а остается прежним. А мне надо чтобы в тестере он при новом прогоне обнулялся. Да и не только в тестере.

Пожалуйста, подскажите, как это исправить?

if (WorkLot>LotsMax) WorkLot=LotsMax;
if (WorkLot<LotsMin) WorkLot=LotsMin;
В любом случая, WorkLot либо максимальному значению, либо минимальному, но не нулю.
 
drknn:

Непонятно что подразумевается под термином "новый прогон". Это что перезапуск советника, или очередной прогон при оптимизации? Если при перезапуске советника то Всё верно - в блоке инициализации лот инициализируется нулём и с этого значения стартует. Далее с ним можно делатиь что угодно, но только до тех пор, пока тест ни закончится. Если при оптимизации, то можно придумать принудительное обнуление в зависимости от того, поменялся ли какой-нибудь параметр. Например, можно воткнуть счётчик проходов оптимизатора и указать в параметрах значение от 1 до икса. Если этот счётчик изменился (увеличился на 1), то лот обнуляем принудительно.



Вся проблема возникает при оптимизации или при смене параметров советника в тестере стратегий. В реальности советник еще не проверялся.
 
rensbit:
В любом случая, WorkLot либо максимальному значению, либо минимальному, но не нулю.


Это означает, что лот не может быть больше или меньше лимитов установленных ДЦ
 
WindSW:

Всем доброго времени суток! Мне необходимо было чтобы лот только увеличивался или оставался прежним, для этого решил записывать лот текущего ордера RecLot, но при тестировании столкнулся с небольшой проблемкой: при изменении параметров лот не обнуляется, а остается прежним. А мне надо чтобы в тестере он при новом прогоне обнулялся. Да и не только в тестере.

Пожалуйста, подскажите, как это исправить?

А зачем его обнулять. Вы же с нулевым лотом открыть ордер не сможете.
 
WindSW:

Вся проблема возникает при оптимизации или при смене параметров советника в тестере стратегий. В реальности советник еще не проверялся.

НУ дык счётчик прогонов Вам в руки.

extern int SchProgonov=1;// счётчик прогонов

 
bolt:
А зачем его обнулять. Вы же с нулевым лотом открыть ордер не сможете.


Обнулить RecLot в самом начале запуска эксперта, точнее его тестирования, чтобы не оставался размер лота от предыдущего раза
 
drknn:

НУ дык счётчик прогонов Вам в руки.

extern int SchProgonov=1;// счётчик прогонов



А как его реализовать?
 
RecLot=OrderLots();

Ордер выбран? Скорее всего проблема здесь. Учитываете, что в начале прогона ордеров может не быть, соответственно OrderSelect вернет false, а OrderLots будет выдавать всякую фигню?

Причина обращения: