Советник перестал открывать сделки - страница 2

 
Vladimir Karputov:

Это на словах якобы будет работать. На самом деле:

1. Не нужно качать всю истории сделок от сотворения мира до сего дня

2. Нужно обязательно проверять ТИП сделки (BUY или SELL), ТИП ВХОДА/ВЫХОДА в рынок.

3. После увеличения лота ОБЯЗАТЕЛЬНО проверить корректность лота - полученный лот должен соответствовать шагу лота, не должен быть больше максимума или меньше минимума 

4. ...

Это да. Проверок нет ни каких. Я выше дополнил, что код далек от идеала. Годится только для того что бы быстро проверить в тестере стратегию.

 
Vitalii Ananev:

Это да. Проверок нет ни каких. Я выше дополнил, что код далек от идеала. Годится только для того что бы быстро проверить в тестере стратегию.

Я понимаю что код не идеален хотя бы потому что я за него не платил, его написали бесплатно. Но это не мешает ему работать, всю прошлую недели и на этой 2 дня он работал без каких либо проблем. потом выскачела эта ошибка. Пытаюсь понять с чем она связана если ничего не менялось. KL всегда  =1. лот всё это время был равен 1 и ML=10 . что случилось и почему перестал работать непонятно. Может как вы говорите не хватает какой то проверки , но вопрос какой и куда её добавить?
 
Vladimir Karputov:

Это на словах якобы будет работать. На самом деле:

1. Не нужно качать всю истории сделок от сотворения мира до сего дня

2. Нужно обязательно проверять ТИП сделки (BUY или SELL), ТИП ВХОДА/ВЫХОДА в рынок.

3. После увеличения лота ОБЯЗАТЕЛЬНО проверить корректность лота - полученный лот должен соответствовать шагу лота, не должен быть больше максимума или меньше минимума 

4. ...

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

 
snithez:

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

Просто торгуйте постоянным лотом, а указанный блок кода выбросьте.

 
snithez:
Я понимаю что код не идеален хотя бы потому что я за него не платил, его написали бесплатно. Но это не мешает ему работать, всю прошлую недели и на этой 2 дня он работал без каких либо проблем. потом выскачела эта ошибка. Пытаюсь понять с чем она связана если ничего не менялось. KL всегда  =1. лот всё это время был равен 1 и ML=10 . что случилось и почему перестал работать непонятно. Может как вы говорите не хватает какой то проверки , но вопрос какой и куда её добавить?

Я выше писал. Что на первый взгляд все должно работать если KL больше нуля. Что бы не было мартингейла KL должен быть равным 1.

Попробуйте сделать так:

if(PositionsTotal()<1 && bars!=Bars(NULL,0))
{
   double LOTS =  NormalizeDouble(Lot(),2);
   if (LOTS>0)
   {
      if(buy)
        {
         sl=NormalizeDouble(Bid-Stop*_Point,_Digits);
         tp=NormalizeDouble(Bid+Take*_Point,_Digits);
         trade.PositionOpen(_Symbol,0,LOTS,Ask,sl,tp);
        }

      if(sell)
        {
         sl=NormalizeDouble(Ask+Stop*_Point,_Digits);
         tp=NormalizeDouble(Ask-Take*_Point,_Digits);
         trade.PositionOpen(_Symbol,1,LOTS,Bid,sl,tp);
        }
      bars=Bars(NULL,0);
   } else
   {
        Print("Объем меньше или равен нулю");
        Тут с помощью функции Print() выведите в журнал значение глобальных переменных и входных параметров влияющих на объем. И проанализируйте. 
   }
 
Причина обращения: