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

 
Andrei Sokolov #:
Благодарю за ответ, но не понял, прошу подробнее.
Отлавливать событие в OnTradeTransaction().
Документация по MQL5: OnTradeTransaction / Обработка событий
Документация по MQL5: OnTradeTransaction / Обработка событий
  • www.mql5.com
Вызывается в экспертах при наступлении события TradeTransaction . Функция предназначена для обработки результатов выполнения торгового запроса...
 
Artyom Trishkin #:
Отлавливать событие в OnTradeTransaction().
спасиб
 

Привет. Подскажите, пж: хочу сделать панельку на которой будут вкладки на подобие как в браузерах. Для работы с в кладками планирую делать для каждой объект класса. Будет возможность закрыть любую вкладку. По закрытию будет удаляться ее объект класса и нужно будет заново отрисовать панель, для этого нужно иметь данные о том какие объекты класса (с какими индексами) остались после удаления. Сам вопрос - есть ли возможность получить информацию о классе какие его объекты есть? Или под это дело заводить отдельный динамический массив и в нем вести учет?

Другие рекомендации по этому поводу так-же приветствую.

 
Andrei Sokolov #:

Привет. Подскажите, пж: хочу сделать панельку на которой будут вкладки на подобие как в браузерах. Для работы с в кладками планирую делать для каждой объект класса. Будет возможность закрыть любую вкладку. По закрытию будет удаляться ее объект класса и нужно будет заново отрисовать панель, для этого нужно иметь данные о том какие объекты класса (с какими индексами) остались после удаления. Сам вопрос - есть ли возможность получить информацию о классе какие его объекты есть? Или под это дело заводить отдельный динамический массив и в нем вести учет?

Другие рекомендации по этому поводу так-же приветствую.

Читайте справку по СБ.
Документация по MQL5: CArrayObj / Стандартная библиотека
Документация по MQL5: CArrayObj / Стандартная библиотека
  • www.mql5.com
Класс CArrayObj является классом динамического массива указателей на экземпляры класса CObject и его наследников. Класс CArrayObj обеспечивает...
 
Artyom Trishkin #:
Читайте справку по СБ.
Спасиб
 

Всем доброго времени суток! Вопрос по тестеру МТ4. А точнее по функции AccountBalance()

Во вложенном файле простой код, который на 1 тике открывает 4 ордера
На каждом тике вкладка РЕЗУЛЬТАТЫ показывает РАЗНЫЙ баланс .... как и есть на самом деле
А в ЖУРНАЛЕ на каждом тике показано одно и то значение баланса. А точнее его значение на последней итерации.

ВОПРОС Как нужно изменить код что бы в ЖУРНАЛЕ баланс менялся так же на каждой итерации, как на вкладке РЕЗУЛЬТАЫ Буду признателен если отредактируете нужным образом мой код. Спасибо

Файлы:
7ql0w9.png  332 kb
 
Наверное, используя только функцию AccountBalance(), достичь желаемого результата не получится. В тот тик, когда одновременно срабатывают TP, баланс уже изменился до финального значения. Поэтому внутри OnTick() с помощью AccountBalance() вы сможете получить только финальный баланс.
Если вам все-таки очень надо в логе видеть те же числа, что и в истории ордеров, то придется работать с историей: запоминать начальный баланс, затем в цикле получать закрытые ордера, прибавлять их прибыль к начальному балансу и выводить изменяющуюся кумулятивную сумму.
Если таких пачек ордеров у вас будет не одна, то схема ещё более усложнится - понадобится запоминать время последнего вывода в лог, и на каждом тике брать историю только до этого момента времени.
 
Yuriy Bykov #:
Наверное, используя только функцию AccountBalance(), достичь желаемого результата не получится. В тот тик, когда одновременно срабатывают TP, баланс уже изменился до финального значения. Поэтому внутри OnTick() с помощью AccountBalance() вы сможете получить только финальный баланс.
Если вам все-таки очень надо в логе видеть те же числа, что и в истории ордеров, то придется работать с историей: запоминать начальный баланс, затем в цикле получать закрытые ордера, прибавлять их прибыль к начальному балансу и выводить изменяющуюся кумулятивную сумму.
Если таких пачек ордеров у вас будет не одна, то схема ещё более усложнится - понадобится запоминать время последнего вывода в лог, и на каждом тике брать историю только до этого момента времени.
Cпасибо за ценную информацию.
 
Здравствуйте! Создаю индикатор аллигатор код следующий: 
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_plots   3

//--- drawing setup
#property indicator_label1  "Jaws"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Teeth"
#property indicator_type2   DRAW_COLOR_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

#property indicator_label3  "Lips"
#property indicator_type3   DRAW_COLOR_LINE
#property indicator_color3  clrLime
#property indicator_style3  STYLE_SOLID
#property indicator_width3  2

//--- inputs
input int                InpJawsPeriod=13;               // Jaws period
input int                InpJawsShift=8;                 // Jaws shift
input int                InpTeethPeriod=8;               // Teeth period
input int                InpTeethShift=5;                // Teeth shift
input int                InpLipsPeriod=5;                // Lips period
input int                InpLipsShift=3;                 // Lips shift
input ENUM_MA_METHOD     InpMAMethod=MODE_SMMA;          // Moving average method
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_MEDIAN;   // Applied price

//--- buffers
double JawsBuffer[];
double TeethBuffer[];
double LipsBuffer[];
double ColorJaws[];
double ColorTeeth[];
double ColorLips[];
int    AlligatorHandle;
int BarsMin;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   //--- setup buffers
   SetIndexBuffer(0,JawsBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ColorJaws,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,TeethBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,ColorTeeth,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(4,LipsBuffer,INDICATOR_DATA);
   SetIndexBuffer(5,ColorLips,INDICATOR_COLOR_INDEX);
   //--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//--- setup plots
   BarsMin=MathMax(MathMax(InpJawsPeriod+InpJawsShift,InpTeethPeriod+InpTeethShift),InpLipsPeriod+InpLipsShift);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,BarsMin);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,BarsMin);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,BarsMin);
//---- line shifts when drawing
   PlotIndexSetInteger(0,PLOT_SHIFT,InpJawsShift);
   PlotIndexSetInteger(1,PLOT_SHIFT,InpTeethShift);
   PlotIndexSetInteger(2,PLOT_SHIFT,InpLipsShift);   
//--- get handle
   AlligatorHandle=iAlligator(_Symbol,PERIOD_CURRENT,InpJawsPeriod,InpJawsShift,InpTeethPeriod,InpTeethShift,InpLipsPeriod,InpLipsShift,InpMAMethod,InpAppliedPrice);
   if(AlligatorHandle==INVALID_HANDLE)
     {
      Print("Failed to create Alligator!");
      return(INIT_FAILED);
     }
//--- set arrays
   ArraySetAsSeries(JawsBuffer,true);
   ArraySetAsSeries(TeethBuffer,true);
   ArraySetAsSeries(LipsBuffer,true);
   ArraySetAsSeries(ColorJaws,true);
   ArraySetAsSeries(ColorTeeth,true);
   ArraySetAsSeries(ColorLips,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int32_t rates_total,
                const int32_t prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int32_t &spread[])
  {
//--- check for rates total
   if(rates_total<BarsMin)
      return(0); // not enough bars for calculation
   if(CopyBuffer(AlligatorHandle,0,0,rates_total,JawsBuffer)<=0)
      return(0);
   if(CopyBuffer(AlligatorHandle,1,0,rates_total,TeethBuffer)<=0)
      return(0);
   if(CopyBuffer(AlligatorHandle,2,0,rates_total,LipsBuffer)<=0)
      return(0);  
//---
   int limit = rates_total - prev_calculated;
   if(prev_calculated > 0)
      limit++;

   for(int i=limit-1; i>=0; i--)
     {
      if(i>=rates_total-1)
        {
         // use same color for new bars
         ColorJaws[i] = 0;
         ColorTeeth[i] = 0;
         ColorLips[i] = 0;
         continue;
        }
        
      ColorJaws[i]=0;
      ColorTeeth[i]=0;
      ColorLips[i]=0;
      
              
       } 
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
И по каким то причинам в самом конце линии улетают либо куда-то очень высоко, либо куда-то очень низко: 


В чем может быть проблема?
 
Vladimir #:
В чем может быть проблема?
Рекомендую использовать отладчик для отладки.