Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 84

 
paladin80:

Те проходы, которые ушли в минус не показываются. Нажмите на каком-нибудь результате оптимизации правой мышкой и снимите галочку при "Пропустить бесполезные результаты".




речь идет не об оптимизации.

тест единичный.

и его результаты в разных вкладках отличаются на 30 как я указывал выше

 
lottamer:


речь идет не об оптимизации.

тест единичный.

и его результаты в разных вкладках отличаются на 30 как я указывал выше

Киньте тут принт-скрин отчёта с проблемными местами, посмотрим. Или загрузите полностью весь отчёт.
 

Уважаемые программисты, объясните такой момент, вот алгоритм по которому вычисляется лот для Money Managment, но проблема в том, что как только, он понимает, что для открытия нужен лот менее 0.01 т.е. допустимого, то естественно следует Order Send Error и до свидания, подскажите что вписать чтобы менее 0.01 лота открывать нельзя даже если того требует алгоритм.

double GetSizeLot()
{  
  if (MM==false) 
      MMLot=Lots;
      
  if (MM==true)
     {
      MMLot=((AccountFreeMargin()*TradeLotRiskPercent)/100000);
     }
  return(MMLot);
}
 
ZahvatkiN:

Уважаемые программисты, объясните такой момент, вот алгоритм по которому вычисляется лот для Money Managment, но проблема в том, что как только, он понимает, что для открытия нужен лот менее 0.01 т.е. допустимого, то естественно следует Order Send Error и до свидания, подскажите что вписать чтобы менее 0.01 лота открывать нельзя даже если того требует алгоритм.

1. Необходимо нормализовывать.

2. И зафиксировать минимальный лот.

MMLot=NormalizeDouble(MathMax((AccountFreeMargin()*TradeLotRiskPercent)/100000,MinLot),2);
 
ZahvatkiN:

Уважаемые программисты, объясните такой момент, вот алгоритм по которому вычисляется лот для Money Managment, но проблема в том, что как только, он понимает, что для открытия нужен лот менее 0.01 т.е. допустимого, то естественно следует Order Send Error и до свидания, подскажите что вписать чтобы менее 0.01 лота открывать нельзя даже если того требует алгоритм.

double GetSizeLot(double TradeLotRiskPercent)
{  
   double MMLot, MinLot, MaxLot;
   //---
   MinLot=MarketInfo(Symbol(),MODE_MINLOT);
   MaxLot=MarketInfo(Symbol(),MODE_MAXLOT);
   //---
   MMLot=AccountFreeMargin()*TradeLotRiskPercent)/100000;
   if (MMLot<=MinLot) return(MinLot);
   if (MMLot>=MaxLot) return(MaxLot);
   else 
   {  MMLot=NormalizeDouble(MMLot,2);
      return(MMLot);
   }
}

У вас в формуле рассчёта MMLot делится на 100000. Скорей всего вы рассчитываете для плеча 1:100 и нормальный счёт, где размер лота 100000 базовой валюты (напр. USD). Если кинете такой советник на центовый счёт (лот = 10000) и/или с другим плечём, то будет неправильно считать лот. Попробуйте такую конструкцию:

double GetSizeLot(double TradeLotRiskPercent)
{  
   double MMLot, MinLot, MaxLot;
   int    LotSize, Leverage;
   //---
   MinLot  =MarketInfo(Symbol(),MODE_MINLOT);
   MaxLot  =MarketInfo(Symbol(),MODE_MAXLOT);
   LotSize =MarketInfo(Symbol(),MODE_LOTSIZE);
   Leverage=AccountLeverage();
   //---
   MMLot=AccountFreeMargin()*TradeLotRiskPercent)/ 100*Leverage/LotSize;
   if (MMLot<=MinLot) return(MinLot);
   if (MMLot>=MaxLot) return(MaxLot);
   else 
   {  MMLot=NormalizeDouble(MMLot,2);
      return(MMLot);
   }
}
 
paladin80 на счёте Alpari_ECN_Live с плечом 1:500 и параметре TradeLotRiskPercent = 10 т.е. 10% от депозита в 1000$ лоты начинают открываться с 0.5 Т.е данная формула расчитана только на плечо 1:100?. Я так понимаю нет универсального кода для любого плеча и счёта?
 
ZahvatkiN:
paladin80 на счёте Alpari_ECN_Live с плечом 1:500 и параметре TradeLotRiskPercent = 10 т.е. 10% от депозита в 1000$ лоты начинают открываться с 0.5 Т.е данная формула расчитана только на плечо 1:100?. Я так понимаю нет универсального кода для любого плеча и счёта?
По-моему моя 2 формула (от 23.08.2013 07:30) правильно рассчитывает лот. Смотри 10% от 1000$ = 100$ (залог), при плече 1:500 брокер даёт вам возможность открыть сделку в 50.000$. 1 лот у брокера это 100.000$, тогда ваши 50.000$ это 0.5 лота.
MMLot=AccountFreeMargin()*TradeLotRiskPercent)/ 100*Leverage/LotSize
MMLot=1000*10/100 * 500/100000 = 100 * 500/100000 = 50000 / 100000 = 0.50
 
paladin80:
По-моему моя 2 формула (от 23.08.2013 07:30) правильно рассчитывает лот. Смотри 10% от 1000$ = 100$ (залог), при плече 1:500 брокер даёт вам возможность открыть сделку в 50.000$. 1 лот у брокера это 100.000$, тогда ваши 50.000$ это 0.5 лота.
MMLot=AccountFreeMargin()*TradeLotRiskPercent)/ 100*Leverage/LotSize
MMLot=1000*10/100 * 500/100000 = 100 * 500/100000 = 50000 / 100000 = 0.50

Сама то формула рассчитывает без ошибки, только по идее 10% от 1000 это лот 0.1 а не 0.5) Тут понятно почему 0.5 т.к. плечо 1:500, было бы плечо 1:100 он открыл бы лот как раз 0.1 поэтому и возникает вопрос, а есть ли универсальный алгоритм расчёта лота для любого плеча и типа счёта, или для каждого он свой?
 

Уважаемые форумчане, помогите найти координаты стрелки

string arrowName=TimeToStr(Time[i]);

ObjectCreate(arrowName+ " Arrow",...);

делаю советник на основе индикатора и через iCustom получаю стрелки, но как найти координаты нескольких самых свежих не пойму.

 
nazar77:
помогите декомпильнуть индикатор. дальше меня декомпил не пойдёт, гарантирую.
В баню, адназначна !!!