[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 561

 
Vinsant:

Помогите разобраться в логике этого индикатора.

За декомпил здесь могут и забанить.
 
Reshetov:
За декомпил здесь могут и забанить.
А где видно что это декомплит? ) К сожалению автора я не нашел а этот индикатор в 2006 году показывал хорошие входы в рынок, сегодня я о нем вспомнил )) и хочу понять на чем основана его логика.
 
sergeev:

обрабатывайте через MinLot и LotStep

Мне нужно сделать например вот так - NormalizeDouble(lots,точность);

Что это даст, не могу понять (MinLot и LotStep)?

 
Vinsant:
А где видно что это декомплит? )
Модератор придет и разберется в логике выложенного Вами кода. Поэтому лучше спрячьте от греха подальше, пока Вам в упор не показали, где видно, а где не видно.
 
Reshetov:
Модератор придет и разберется в логике выложенного Вами кода. Поэтому лучше спрячьте от греха подальше, пока Вам в упор не показали, где видно, а где не видно.
Последовал Вашему совету.
 
fore-x:

Мне нужно сделать например вот так - NormalizeDouble(lots,точность);

Что это даст, не могу понять (MinLot и LotStep)?

Набросал на скорую руку. Примерно так:
double minlot = MarketInfo(Symbol, MODE_MINLOT);

int d = 0;
 
if (minlot < 0.9999) {
  if (minlot < 0.09999) {
    d = 2;
  } else {
    d = 1;
  }
}

 ... 

NormalizeDouble(lots, d);
 
Reshetov:
Набросал на скорую руку. Примерно так:

А, понятно, методом научного тыка значит. Параметр не хранится ни где, будем знать.

 
fore-x:

А, понятно, методом научного тыка значит. Параметр не хранится ни где, будем знать.

Он не может нигде храниться в терминале, т.к. плечо может быть плавающим и знать об этом может только сервер. Наиболее правильный вариант расчета, на мой взгляд, такой:

double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
double lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);

double SMALL = 0.0000001;

double lot, nextlot;

//обнуляем внутреннюю переменную ошибки
GetLastError();

//смотрим, насколько дают открыться
for(lot=0; lot<maxlot+SMALL && GetLastError()!=ERR_NOT_ENOUGH_MONEY; lot = nextlot)
{
   if(lot<minlot) nextlot = minlot;
   else nextlot = lot+lotstep;
   AccoutFreeMarginCheck(Symbol(), OP_BUY, nextlot);
}

// ответ на вопрос уже в переменной lot, а если вообще открыться нельзя, то там 0. Осталось нормализовать.
// Нормализацию правильно проводить от lotstep, а не от minlot, т.к. встречаются ситуации когда, например, 
// minlot = 3.0, а lotstep = 0.1

int dig = -MathFloor(MathLog(lotstep)/MathLog(10));

lot = NormalizeDouble(lot, dig);

 

Скажите почему может быть ошибка 130

ticket1 = OrderSend(Symbol(),OP_BUYLIMIT,Lot,Level,Slippage,0,0,0,MagicNumber,0,Green);
 
sss2019:

Скажите почему может быть ошибка 130


ticket1 = OrderSend(Symbol(),OP_BUYLIMIT,Lot,Level,Slippage,0,0,0,MagicNumber,0,Green);
                                                                ^
                                                          Что за хрень?
Причина обращения: