Что такое в этом коде значит DecreaseFactor>0 - страница 2

 
Movlat Baghiyev:
Открытых сделок не будет ..как две сделки окажутся убыточными советник выгрузится 
да но на следующем запуске - он опять прочитает ту же историю и там будет 2 сделки в минусе - и эксперт опять выгрузится.
 
Movlat Baghiyev:

double LotsOptimized()
  {

   int ContTrade=1; //Не учитывать 2 убыточных - 0
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(
ContTrade!=0)
     {

        int Mn=123456;
        double lot=Lots;
        int    orders=HistoryTotal();     // history orders total
        int    losses=0;                  // number of losses orders without a break


      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         //if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)

         if(OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0 && OrderMagicNumber()==Mn) losses++;
        }
      if(losses>=2)
         ExpertRemove();
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);

}

Что такое  в этом коде значит DecreaseFactor>0  и будет ли ли срабатывать остановка после двух убыточных сделок советника ?
Vladislav Andruschenko
:

DecreaseFactor в данном коде не объявлен, значит вам не ответят на этот вопрос 

эксперт будет удаляться с графика если будет 3 и более убыточных сделок 

Вот так будет учитываться магик-номер и все валютные пары, выгрузка эксперта от 2-х убыточных ордеров подряд, плюс флаг для отключения выгрузки эксперта. Желательно магик и флаг передавать при вызове функции
 
может поможите подчистить сову она уже готова ?
 
Movlat Baghiyev:
может поможите подчистить сову она уже готова ?

Кидайте на фриланс ТЗ. Если кому то конкретно - тогда добавьте ник

Мы же Вам тут уже всё разложили...

 
Renat Akhtyamov:

Кидайте на фриланс ТЗ. Если кому то конкретно - тогда добавьте ник

Мы же Вам тут уже всё разложили...

void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {

OpenPosition(Symbol(),OP_BUY,Lots,Bid-Sl*GetPoint(),Ask+TakeProfit*GetPoint(),"3MA_system ");  между ними разногласия .. добавил прописку комменты не могу прописать mn .Понимаю что нужно тут void OpenPosition изменения ввести .но выходят только ошибки 

 
Movlat Baghiyev:

void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {

OpenPosition(Symbol(),OP_BUY,Lots,Bid-Sl*GetPoint(),Ask+TakeProfit*GetPoint(),"3MA_system ");  между ними разногласия .. добавил прописку комменты не могу прописать mn .Понимаю что нужно тут void OpenPosition изменения ввести .но выходят только ошибки 

Последним параметром при вызове функции открытия ордера у Вас должен быть магик (число), а не комментарий

OpenPosition(Symbol(),OP_BUY,Lots,Bid-Sl*GetPoint(),Ask+TakeProfit*GetPoint(),"3MA_system ");


И почему то у Вас равно нулю в определении функции. Такое не прокатит:

void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {.........

уберите выделенное

 
Renat Akhtyamov:

Последним параметром у Вас должен быть магик (число), а не комментарий

OpenPosition(Symbol(),OP_BUY,Lots,Bid-Sl*GetPoint(),Ask+TakeProfit*GetPoint(),"3MA_system ");



Уберу выделленое комментарии будут потом?
 
Movlat Baghiyev:
Уберу выделленое комментарии будут потом?

Вот это в студию - от скобки до скобки

void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) { ???? }

 
Renat Akhtyamov:

Вот это в студию - от скобки до скобки

void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) { ???? }

//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb;
  int      dg, err, it, ticket=0;
  string   lsComm=WindowExpertName()+" "+GetNameTF(Period());

  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("OpenPosition(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=(int)MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    ot=TimeCurrent();
    if (MarketWatch)
      ticket=OrderSend(sy, op, ll, pp, Slippage, 0, 0, lsComm, mn, 0, clOpen);
    else
      ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (pa==0 && pb==0) Message("Проверьте в Обзоре рынка наличие символа "+sy);
      // Вывод сообщения об ошибке
      Print("Error(",err,") opening position: ",0,", try ",it);
      Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
            " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
  if (MarketWatch && ticket>0 && (sl>0 || tp>0)) {
    if (OrderSelect(ticket, SELECT_BY_TICKET)) ModifyOrder(-1, sl, tp);
  }
}
 
 lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);  какую цифру прописать в MaximumRisk  чтобы с учетом плеча окрывал максимально возможный лот  с десятичным значением ? скажем не 1 стандартный а вплоть до 1.1скажем..Экпериментировал прописыла максимум 1 : 2 или 3  на 1000 лоты разумеется увеличивались ..Но хотел чтобы макс лот вычислял сам  при определнном значении MaximumRisk
Причина обращения: