Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2611

 
Nikolay Skrigan #:
Типовой код метки без каких-либо проверок. Я даже не подозревал, что они могут понадобиться...
Это функция, покажите обращение к функции
 
Tretyakov Rostyslav #:
Это функция, покажите обращение к функции

Не понял, это ли вы имеет ввиду... Если не это, поясните. Я пользователь, не программист. Пишу так, для себя... по дилетански.
В основном коде обращение 

      if(!HideLabels)

         Labels();

Вызывается блок меток...  Раз в минуту...

//+------------------------------------------------------------------+
//|--- формирование объектов, отображающих настройки робота          |
//+------------------------------------------------------------------+
void Labels()
  {
   ObjectCreate("Trend", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Trend", OBJPROP_CORNER, 1);
   ObjectSet("Trend", OBJPROP_XDISTANCE, 5);
   ObjectSet("Trend", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Trend", "Trade:" + TradeDirection + "|Trend:" + TrendDirection + "|RTT:" + ReadyToTrade + "",
                 SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);

   ObjectCreate("AMRM", OBJ_LABEL, 0, 0, 0);
   ObjectSet("AMRM", OBJPROP_CORNER, 1);
   ObjectSet("AMRM", OBJPROP_XDISTANCE, 5);
   ObjectSet("AMRM", OBJPROP_YDISTANCE, 30);
   ObjectSetText("AMRM", "Vect|AM|CTr|RTT:" + DoubleToStr(TrendVector, 0)
                 + "|" + DoubleToStr(AdaptiveMode, 0)
                 + "|" + DoubleToStr(ContrTrend, 0)
                 + "|" + DoubleToStr(ReverseReadyToTrade * (100 + 10 * RevRTTBuy + RevRTTSell), 0), SizeLabel, "Franklin Gothic Medium", ModifyColorLabel);

   ObjectCreate("TDCM", OBJ_LABEL, 0, 0, 0);
   ObjectSet("TDCM", OBJPROP_CORNER, 1);
   ObjectSet("TDCM", OBJPROP_XDISTANCE, 5);
   ObjectSet("TDCM", OBJPROP_YDISTANCE, 43);
   ObjectSetText("TDCM", "DT|DC|G|DG|RG:" + DoubleToStr(AdaptiveMode && DominantTrend, 0)
                 + "|" + DoubleToStr(AdaptiveMode && DominantTrend && DominantCorrection, 0)
                 + "|" + DoubleToStr(Grid, 0)
                 + "|" + DoubleToStr(Grid && DoubleGrid, 0)
                 + "|" + DoubleToStr(RestartGrid, 0), SizeLabel, "Franklin Gothic Medium", ModifyColorLabel);

   ObjectCreate("GridSt", OBJ_LABEL, 0, 0, 0);
   ObjectSet("GridSt", OBJPROP_CORNER, 1);
   ObjectSet("GridSt", OBJPROP_XDISTANCE, 5);
   ObjectSet("GridSt", OBJPROP_YDISTANCE, 56);
   ObjectSetText("GridSt", "GridStep|GSF: " + DoubleToStr(GridStep, 0)
                 + "|" + DoubleToStr(GridStepFactor, 2), SizeLabel, "Franklin Gothic Medium", ModifyColorLabel);
//------------
   color LevColor;
   if(BlockLeverage)
      LevColor = OrangeRed;
   else
      LevColor = ModifyColorLabel;

   ObjectCreate("Block1", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Block1", OBJPROP_CORNER, 1);
   ObjectSet("Block1", OBJPROP_XDISTANCE, 5);
   ObjectSet("Block1", OBJPROP_YDISTANCE, 69);
   ObjectSetText("Block1", "Leverage|Lim: " + DoubleToStr((AccountMargin()*AccountLeverage()) / (AccountEquity() + (AccountEquity() == 0)), 0)
                 + "|" + DoubleToStr(Leverage, 0), SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);

   color RiskColor;
   if(BlockRiskLimit)
      RiskColor = OrangeRed;
   else
      RiskColor = ModifyColorLabel;

   ObjectCreate("UnLimRisk", OBJ_LABEL, 0, 0, 0);
   ObjectSet("UnLimRisk", OBJPROP_CORNER, 1);
   ObjectSet("UnLimRisk", OBJPROP_XDISTANCE, 5);
   ObjectSet("UnLimRisk", OBJPROP_YDISTANCE, 82);
   ObjectSetText("UnLimRisk", "CurR|Lim|R:" + DoubleToStr(CurrentRisk, 0)
                 + "|" + DoubleToStr(RiskLimitPerc, 0)
                 + "|" + DoubleToStr(RiskTradePerc, 1), SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);

   ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Equity", OBJPROP_CORNER, 1);
   ObjectSet("Equity", OBJPROP_XDISTANCE, 5);
   ObjectSet("Equity", OBJPROP_YDISTANCE, 95);
   ObjectSetText("Equity", "Profit|Eq:" + DoubleToStr(SymbProfit, 0)
                 + "|" + DoubleToStr(AccountEquity(), 0), SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);

   color BreakModCol;
   if(CloseByRT)
      BreakModCol = OrangeRed;
   else
      BreakModCol = ModifyColorLabel;

   ObjectCreate("Block2", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Block2", OBJPROP_CORNER, 1);
   ObjectSet("Block2", OBJPROP_XDISTANCE, 5);
   ObjectSet("Block2", OBJPROP_YDISTANCE, 108);
   ObjectSetText("Block2", "Trgt|PP|P/R:" + DoubleToStr(SymbProfitTarget, 0)
                 + "|" + DoubleToStr(ProfitPerc, 0)
                 + "|" + DoubleToStr(ProfitRiskPerc, 0), SizeLabel,  "Franklin Gothic Medium", BreakModCol);

   ObjectCreate("SymbProfit1", OBJ_LABEL, 0, 0, 0);
   ObjectSet("SymbProfit1", OBJPROP_CORNER, 1);
   ObjectSet("SymbProfit1", OBJPROP_XDISTANCE, 5);
   ObjectSet("SymbProfit1", OBJPROP_YDISTANCE, 121);
   ObjectSetText("SymbProfit1", "ATS|MF:" + DoubleToStr((AdaptiveTrailingStop > 0)*AdaptiveTrailingStop * VGrid, 0)
                 + "|" + DoubleToStr(MFactor, 0), SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);

   ObjectCreate("CliseGroup", OBJ_LABEL, 0, 0, 0);
   ObjectSet("CliseGroup", OBJPROP_CORNER, 1);
   ObjectSet("CliseGroup", OBJPROP_XDISTANCE, 5);
   ObjectSet("CliseGroup", OBJPROP_YDISTANCE, 134);
   ObjectSetText("CliseGroup", "SMC|Lot: " + DoubleToStr(SafeModeClose, 0)
                 + "|" + DoubleToStr(LotsManual, 2), SizeLabel, "Franklin Gothic Medium", ModifyColorLabel);

   ObjectCreate("tPsLPar", OBJ_LABEL, 0, 0, 0);
   ObjectSet("tPsLPar", OBJPROP_CORNER, 1);
   ObjectSet("tPsLPar", OBJPROP_XDISTANCE, 5);
   ObjectSet("tPsLPar", OBJPROP_YDISTANCE, 147);
   ObjectSetText("tPsLPar", "TP|SL|VNL:" + DoubleToStr(TakeProfitLevel, 0)
                 + "|" + DoubleToStr(StopLossLevel, 0)
                 + "|" + DoubleToStr(VolumeNormLevel, 0), SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);

   ObjectCreate("LotsBuySell", OBJ_LABEL, 0, 0, 0);
   ObjectSet("LotsBuySell", OBJPROP_CORNER, 1);
   ObjectSet("LotsBuySell", OBJPROP_XDISTANCE, 5);
   ObjectSet("LotsBuySell", OBJPROP_YDISTANCE, 160);
   ObjectSetText("LotsBuySell", "Lot:L|S: " + DoubleToStr(PermitLong * LRbuyLots, 2)
                 + "|" + DoubleToStr(PermitShort * LRsellLots, 2), SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);

   ObjectCreate("Nb|Ns", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Nb|Ns", OBJPROP_CORNER, 1);
   ObjectSet("Nb|Ns", OBJPROP_XDISTANCE, 5);
   ObjectSet("Nb|Ns", OBJPROP_YDISTANCE, 173);
   ObjectSetText("Nb|Ns", "Nb|Ns|V:" + DoubleToStr(Nb, 0) + "|" + DoubleToStr(Ns, 0)
                 + "|" + DoubleToStr(SymbVolume, 2), SizeLabel,  "Franklin Gothic Medium", ModifyColorLabel);

   color BlockAllColor;
   if(BlockAll)
      BlockAllColor = OrangeRed;
   else
      BlockAllColor = ModifyColorLabel;

   ObjectCreate("Basic4", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Basic4", OBJPROP_CORNER, 1);
   ObjectSet("Basic4", OBJPROP_XDISTANCE, 5);
   ObjectSet("Basic4", OBJPROP_YDISTANCE, 186);
   ObjectSetText("Basic4", "Basic:   " + DoubleToStr((!Basic * (1 + !BC)
                 + Basic * (10000 * (1 + !BC) + 1000 * BTup * !Clbuy + 100 * BTdn * !Clsell + 10 * BClup + BCldn)) * (Bup - Bdn), 0)
                 , SizeLabel, "Franklin Gothic Medium", BlockAllColor);

   ObjectCreate("Long4", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Long4", OBJPROP_CORNER, 1);
   ObjectSet("Long4", OBJPROP_XDISTANCE, 5);
   ObjectSet("Long4", OBJPROP_YDISTANCE, 199);
   ObjectSetText("Long4", "Long:   " + DoubleToStr((!Long * (1 + !LC)
                 + Long * (10000 * (1 + !LC) + 1000 * LTup * !Clbuy + 100 * LTdn * !Clsell + 10 * LClup + LCldn)) * (Lup - Ldn), 0)
                 , SizeLabel, "Franklin Gothic Medium", BlockAllColor);

   ObjectCreate("Medium4", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Medium4", OBJPROP_CORNER, 1);
   ObjectSet("Medium4", OBJPROP_XDISTANCE, 5);
   ObjectSet("Medium4", OBJPROP_YDISTANCE, 212);
   ObjectSetText("Medium4", "Medium:   " + DoubleToStr((!Medium * (1 + !MC)
                 + Medium * (10000 * (1 + !MC) + 1000 * MTup * !Clbuy + 100 * MTdn * !Clsell + 10 * MClup + MCldn)) * (Mup - Mdn), 0)
                 , SizeLabel, "Franklin Gothic Medium", BlockAllColor);

   ObjectCreate("Short4", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Short4", OBJPROP_CORNER, 1);
   ObjectSet("Short4", OBJPROP_XDISTANCE, 5);
   ObjectSet("Short4", OBJPROP_YDISTANCE, 225);
   ObjectSetText("Short4", "Short:   " + DoubleToStr((!Short * (1 + !SC)
                 + Short * (10000 * (1 + !SC) + 1000 * STup * !Clbuy + 100 * STdn * !Clsell + 10 * SClup + SCldn)) * (Sup - Sdn), 0)
                 , SizeLabel, "Franklin Gothic Medium", BlockAllColor);

   ObjectCreate("Local4", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Local4", OBJPROP_CORNER, 1);
   ObjectSet("Local4", OBJPROP_XDISTANCE, 5);
   ObjectSet("Local4", OBJPROP_YDISTANCE, 238);
   ObjectSetText("Local4", "Weekly:   " + DoubleToStr((!Weekly * (1 + !WC)
                 + Weekly * (10000 * (1 + !WC) + 1000 * WTup * !Clbuy + 100 * WTdn * !Clsell + 10 * WClup + WCldn)) * (Wup - Wdn), 0)
                 , SizeLabel, "Franklin Gothic Medium", BlockAllColor);

   ObjectCreate("Daily4", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Daily4", OBJPROP_CORNER, 1);
   ObjectSet("Daily4", OBJPROP_XDISTANCE, 5);
   ObjectSet("Daily4", OBJPROP_YDISTANCE, 251);
   ObjectSetText("Daily4", "Daily:   " + DoubleToStr((
                    + (10000 * (1 + !DC) + 1000 * DTup * !Clbuy + 100 * DTdn * !Clsell + 10 * DClup + DCldn)) * (Dup - Ddn), 0)
                 , SizeLabel, "Franklin Gothic Medium", BlockAllColor);

   ObjectCreate("IDay4", OBJ_LABEL, 0, 0, 0);
   ObjectSet("IDay4", OBJPROP_CORNER, 1);
   ObjectSet("IDay4", OBJPROP_XDISTANCE, 5);
   ObjectSet("IDay4", OBJPROP_YDISTANCE, 264);
   ObjectSetText("IDay4", "IDay:   " + DoubleToStr((
                    + (10000 * (1 + !IC) + 1000 * ITup * !Clbuy + 100 * ITdn * !Clsell + 10 * IClup + ICldn)) * (Iup - Idn), 0)
                 , SizeLabel, "Franklin Gothic Medium", BlockAllColor);

   ObjectCreate("Hourly44", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Hourly44", OBJPROP_CORNER, 1);
   ObjectSet("Hourly44", OBJPROP_XDISTANCE, 5);
   ObjectSet("Hourly44", OBJPROP_YDISTANCE, 277);
   ObjectSetText("Hourly44", "Hourly:   " + DoubleToStr((
                    + (10000 * (1 + !HC) + 1000 * HTup * !Clbuy + 100 * HTdn * !Clsell + 10 * HClup + HCldn)) * (Hup - Hdn), 0)
                 , SizeLabel, "Franklin Gothic Medium", BlockAllColor);

   ObjectCreate("CntrlMan", OBJ_LABEL, 0, 0, 0);
   ObjectSet("CntrlMan", OBJPROP_CORNER, 1);
   ObjectSet("CntrlMan", OBJPROP_XDISTANCE, 5);
   ObjectSet("CntrlMan", OBJPROP_YDISTANCE, 290);
   ObjectSetText("CntrlMan", "CtrlM|T-out: " + DoubleToStr(ManualPositionControl, 0)
                 + "|" + DoubleToStr(TF / 60, 0), SizeLabel, "Franklin Gothic Medium", ModifyColorLabel);
   if(Grid)
     {
      ObjectCreate("LevelUP", OBJ_LABEL, 0, 0, 0);
      ObjectSet("LevelUP", OBJPROP_CORNER, 1);
      ObjectSet("LevelUP", OBJPROP_XDISTANCE, 5);
      ObjectSet("LevelUP", OBJPROP_YDISTANCE, 303);
      ObjectSetText("LevelUP", "Lup: " + DoubleToStr(LevelUp, Digits), SizeLabel, "Franklin Gothic Medium", ModifyColorLabel);

      ObjectCreate("LevelDN", OBJ_LABEL, 0, 0, 0);
      ObjectSet("LevelDN", OBJPROP_CORNER, 1);
      ObjectSet("LevelDN", OBJPROP_XDISTANCE, 5);
      ObjectSet("LevelDN", OBJPROP_YDISTANCE, 316);
      ObjectSetText("LevelDN", "Ldn: " + DoubleToStr(LevelDn, Digits), SizeLabel, "Franklin Gothic Medium", ModifyColorLabel);
     }
  }

 
Tretyakov Rostyslav #:

  

В варианте кода, который вы сделали для меня, вы объявляете переменные внутри основного цикла.
Имеет смысл один раз объявить их в глобальной области? Или это неважно?

      double   VolIhT = GetIndicator(handle_swt_m1, 30, 0);
      double   VolHT = GetIndicator(handle_swt_m1, 11, 0);
      double   VolIT = GetIndicator(handle_swt_m5, 11, 0);
      double   VolDT = GetIndicator(handle_swt_m15, 11, 0);
      double   VolWT = GetIndicator(handle_swt_h1, 11, 0);
      double   VolST = GetIndicator(handle_swt_h4, 11, 0);
      double   VolMT = GetIndicator(handle_swt_d1, 11, 0);
      double   VolLT = GetIndicator(handle_swt_w1, 11, 0);
      double   VolBT = GetIndicator(handle_swt_w1, 13, 0);
 
Пробую определить размер маржинального обеспечения  для символа. Вроде все по документации, но выдает ноль. Где ошибка? В результате не рассчитываются объемы сделки.
marga       =  SymbolInfoDouble(_Symbol, SYMBOL_MARGIN_INITIAL);
 
Nikolay Skrigan #:
Пробую определить размер маржинального обеспечения  для символа. Вроде все по документации, но выдает ноль. Где ошибка? В результате не рассчитываются объемы сделки.

Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().

 
Tretyakov Rostyslav #:

Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().

Т.е. эта функция 

SymbolInfoDouble(_Symbol, SYMBOL_MARGIN_INITIAL);

 не работает в принципе?

 
Nikolay Skrigan #:

Т.е. эта функция 

 не работает в принципе?

SYMBOL_MARGIN_INITIAL

Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте для открытия позиции объемом в один лот. Используется при проверке средств клиента при входе в рынок.

 
Nikolay Skrigan #:
не работает в принципе?
Этот вопрос уже поднимался
Почему SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL) дает 0 (нуль)?
Почему SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL) дает 0 (нуль)?
  • 2014.09.22
  • foxmag
  • www.mql5.com
SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL);и поддерживающей маржи за 1 лот.
 
Tretyakov Rostyslav #:

Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().

Посмотрел. Громоздкая конструкция получается для извлечения одной цифры.

 
Tretyakov Rostyslav #:
Этот вопрос уже поднимался

Попробовал описанную по ссылке конструкцию. Получил тот же ноль. :)

      double lot = 1.0;
      double margin_buy, margin_sell;
      OrderCalcMargin(ORDER_TYPE_BUY, _Symbol, lot, SymbolInfoDouble(_Symbol, SYMBOL_ASK), margin_buy);
      OrderCalcMargin(ORDER_TYPE_SELL, _Symbol, lot, SymbolInfoDouble(_Symbol, SYMBOL_BID), margin_sell);
      //----
      double marga       = (margin_buy + margin_sell) / 2;