Советники: Martin - страница 13

 
NightTrader:
Скажите, если не сложно, а какая связь между этой строчкой и дублем. ?

Кстати, я недавно в тестере такую картину получил

а перед этим была такая картина

Справка MQL4:

1. AccountFreeMargin - Возвращает значение свободных средств, разрешенных для открытия ордеров на текущем счете.

2. Оператор возврата return - Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе.

Когда не хватает средств для открытия ордера, советник выводит инфу и дальше по коду ничего не делает. Т.е. если не было дубля в начале инфа бы не обновлялась(в случае нехватки средств). А если не было бы дубля внизу, инфа бы поздно обновлялась - позднее на один бар(свечу) по таймфрейму.

Можно было сделать так:

...
   timeprev=Time[0];
   if(AccountFreeMargin()<10)
     {
      if(Balance!=AccountBalance() || OrdTot!=OrdersTotal())
        {
         DateTime = TimeCurrent(); ordprof1 = 0;
         ordprof2 = 0; ordprof3 = 0;
         Deposit1 = 0; Withdraw1 = 0;
         Deposit2 = 0; Withdraw2 = 0;
         Deposit3 = 0; Withdraw3 = 0;
         for(int cnt=0; cnt<OrdersHistoryTotal(); cnt++)
           {
            OSt=OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY);
            if(OrderCloseTime()<TimeCurrent()-2629800) continue;
            if(StringFind(OrderComment(),"Deposit")>=0) Deposit3+=OrderProfit()+OrderCommission();
            if(StringFind(OrderComment(),"Withdraw")>=0) Withdraw3+=OrderProfit()+OrderCommission();
            ordprof3+=OrderProfit()+OrderCommission()+OrderSwap();
            if(OrderCloseTime()<TimeCurrent()-604800) continue;
            if(StringFind(OrderComment(),"Deposit")>=0) Deposit2+=OrderProfit()+OrderCommission();
            if(StringFind(OrderComment(),"Withdraw")>=0) Withdraw2+=OrderProfit()+OrderCommission();
            ordprof2+=OrderProfit()+OrderCommission()+OrderSwap();
            if(OrderCloseTime()<TimeCurrent()-86400) continue;
            if(StringFind(OrderComment(),"Deposit")>=0) Deposit1+=OrderProfit()+OrderCommission();
            if(StringFind(OrderComment(),"Withdraw")>=0) Withdraw1+=OrderProfit()+OrderCommission();
            ordprof1+=OrderProfit()+OrderCommission()+OrderSwap();
           }
         ordprof1 = ordprof1 - Deposit1 - Withdraw1;
         ordprof2 = ordprof2 - Deposit2 - Withdraw2;
         ordprof3 = ordprof3 - Deposit3 - Withdraw3;
         Balance=AccountBalance(); OrdTot=OrdersTotal();
        }
      ObjectDelete(ChartID(),"buyline");
      ObjectDelete(ChartID(),"sellline");
      ObjectDelete(ChartID(),"fon1");
      ObjectDelete(ChartID(),"fon2");
      ObjectCreate(ChartID(),"buyline",OBJ_HLINE,0,0,b);
      ObjectSetInteger(ChartID(),"buyline",OBJPROP_COLOR,Blue);
      ObjectSetInteger(ChartID(),"buyline",OBJPROP_STYLE,STYLE_DASH);
      ObjectCreate(ChartID(),"sellline",OBJ_HLINE,0,0,s);
      ObjectSetInteger(ChartID(),"sellline",OBJPROP_COLOR,Red);
      ObjectSetInteger(ChartID(),"sellline",OBJPROP_STYLE,STYLE_DASH);
      ObjectCreate(ChartID(),"fon1",OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(ChartID(),"fon1",OBJPROP_XDISTANCE,100);
      ObjectSetInteger(ChartID(),"fon1",OBJPROP_YDISTANCE,12);
      ObjectSetInteger(ChartID(),"fon1",OBJPROP_XSIZE,700);
      ObjectSetInteger(ChartID(),"fon1",OBJPROP_YSIZE,30);
      ObjectSetInteger(ChartID(),"fon1",OBJPROP_BGCOLOR,Gray);
      ObjectSetInteger(ChartID(),"fon1",OBJPROP_BACK,false);
      ObjectCreate(ChartID(),"fon2",OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(ChartID(),"fon2",OBJPROP_XDISTANCE,100);
      ObjectSetInteger(ChartID(),"fon2",OBJPROP_YDISTANCE,45);
      ObjectSetInteger(ChartID(),"fon2",OBJPROP_XSIZE,300);
      ObjectSetInteger(ChartID(),"fon2",OBJPROP_YSIZE,70);
      ObjectSetInteger(ChartID(),"fon2",OBJPROP_BGCOLOR,Gray);
      ObjectSetInteger(ChartID(),"fon2",OBJPROP_BACK,false);
      ChartSetInteger(ChartID(),CHART_FOREGROUND,0,false);
      double Usd_per_Rub=MarketInfo("USDRUB",MODE_BID);
      if(Comment_for_cent==true)
        {
         Comment("                                  Баланс: ",DoubleToString(NormalizeDouble(AccountBalance()*Usd_per_Rub/100,2),2),
                 "р., Средства: ",DoubleToString(NormalizeDouble(AccountEquity()*Usd_per_Rub/100,2),2),"р., Прибыль: ",
                 DoubleToString(NormalizeDouble(AccountProfit()*Usd_per_Rub/100,2),2),"р., Свободно: ",
                 DoubleToString(NormalizeDouble(AccountFreeMargin()*Usd_per_Rub/100,2),2),"р., Lot: ",l,", ",bl,", ",sl,", Всего ордеров: ",
                 OrdersTotal(),", Ордеров по символу: ",CountTrades(),"\n                                  Плечо: ",AccountLeverage(),", Дата обновления: ",
                 TimeToStr(TimeCurrent()),"\n\n                                                                       История счета\n    ",
                 "                              ------------------------------------------------------------------------------------------------",
                 "\n                                    Сегодня: ",DoubleToString(NormalizeDouble(ordprof1*Usd_per_Rub/100,2),2),
                 "р., Пополнение: ",DoubleToString(NormalizeDouble(Deposit3*Usd_per_Rub/100,2),2),"р. (за месяц)\n                                    Неделя: ",
                 DoubleToString(NormalizeDouble(ordprof2*Usd_per_Rub/100,2),2),"р., Снятие: ",DoubleToString(NormalizeDouble(Withdraw3*Usd_per_Rub/100,2),2),
                 "р. (за месяц)\n                                    Месяц: ",DoubleToString(NormalizeDouble(ordprof3*Usd_per_Rub/100,2),2),"р., Дата обновления: ",
                 TimeToStr(DateTime));
        }
      if(Comment_for_cent==false)
        {
         Comment("                                  Баланс: ",DoubleToString(NormalizeDouble(AccountBalance()*Usd_per_Rub,2),2),
                 "р., Средства: ",DoubleToString(NormalizeDouble(AccountEquity()*Usd_per_Rub,2),2),"р., Прибыль: ",
                 DoubleToString(NormalizeDouble(AccountProfit()*Usd_per_Rub,2),2),"р., Свободно: ",
                 DoubleToString(NormalizeDouble(AccountFreeMargin()*Usd_per_Rub,2),2),"р., Lot: ",l,", ",bl,", ",sl,", Всего ордеров: ",
                 OrdersTotal(),", Ордеров по символу: ",CountTrades(),"\n                                  Плечо: ",AccountLeverage(),", Дата обновления: ",
                 TimeToStr(TimeCurrent()),"\n\n                                                                       История счета\n    ",
                 "                              ------------------------------------------------------------------------------------------------",
                 "\n                                    Сегодня: ",DoubleToString(NormalizeDouble(ordprof1*Usd_per_Rub,2),2),
                 "р., Пополнение: ",DoubleToString(NormalizeDouble(Deposit3*Usd_per_Rub,2),2),"р. (за месяц)\n                                    Неделя: ",
                 DoubleToString(NormalizeDouble(ordprof2*Usd_per_Rub,2),2),"р., Снятие: ",DoubleToString(NormalizeDouble(Withdraw3*Usd_per_Rub,2),2),
                 "р. (за месяц)\n                                    Месяц: ",DoubleToString(NormalizeDouble(ordprof3*Usd_per_Rub,2),2),"р., Дата обновления: ",
                 TimeToStr(DateTime));
        }
      return (0);
     }
   In= Interval+MarketInfo(Symbol(),14); Tp = TakeProfit+MarketInfo(Symbol(),14);
...