Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 153

 

есть у меня код с классами с информационной панелью!!! 
НО есть проблема!
у меня есть label на ней и через выносные настройки я могу ее реактировать.... так вот когда 2-3 раза настройки меняешь, то сама панель разъезжается в разные стороны!!! и когда меняешь таймфрэйм 2-3 раза!! как от этого избавится???


Еще немного дополнительной информации:
Нашел, что если в файле Dialog.mqh в функции CAppDialog::Destroy(const int reason) закоментировать строки
   if(m_deinit_reason!=WRONG_VALUE)
      return;
то панелька при переключении таймфреймов нормально уничтожается и заново инитится.

Файлы:
TradePanel.mq4  15 kb
 

Здравствуйте. Пишу индикатор на MT4, который работает только с графическими объектами, а также отслеживает положение графических объектов, созданных таким же индикатором, работающем на другом периоде. При перемещении вручную вертикальной линии старшего периода перерисовываются трендовые линии от нового положения верт. линии, а также перерисовывается вертикальная линия младшего периода. Все это обрабатывается в событии OnChartEvent. Проблема в том, что при перемещении верт. линии на старшем периоде иногда объекты младшего периода не перерисовываются сразу, а перерисовываются только когда я повторно сделаю двойной щелчок мышью на верт. линии индикатора, работающего на старшем периоде. Причем на другом более мощном ПК такое происходит реже. В коде после перерисовки объектов применяю функцию ChartRedraw(). 

Может ли такое происходить из-за недостатка ресурсов ПК?

Я хочу попробовать запускать индикаторы на разных графиках и с помощью EventChartCustom генерировать пользовательское событие из индикатора работающего на старшем периоде во второй индикатор. Может это ускорит  работу программы? 

 

Как быстро обнулить (очистить) все элементы структуры?


Структура глобальная. В определенные моменты должна обнуляться чтоб потом наполниться новыми данными. 

Я понимаю, что можно поэлементно приравнять все к нулю. Есть другой способ?


struct ABC{

int a1;

int a2;

int a3;

};

ABC a;

Нужно что то вроде такого

a = 0; //все элементы в структуре стали равны нулю

 
Sergey Likho:

Как быстро обнулить (очистить) все элементы структуры?


Структура глобальная. В определенные моменты должна обнуляться чтоб потом наполниться новыми данными. 

Я понимаю, что можно поэлементно приравнять все к нулю. Есть другой способ?


struct ABC{

int a1;

int a2;

int a3;

};

ABC a;

Нужно что то вроде такого

a = 0; //все элементы в структуре стали равны нулю

ZeroMemory(a);
 
у кого нить есть траллинг, который срабатывает через N пунктов, а потом идет за ценой?
У меня есть, но он срабатывает через N пунктов, и останавливается на безубытке....
исправьте плиз, ато я голову сломал!!!
void TrailingSL()
{
int    er;
if(shagtrala==0) return;
for(int i = 0; i < OrdersTotal(); i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY && NormalizeDouble(Ask-OrderOpenPrice(), Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(Ask-OrderStopLoss(), Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() + (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
         if(OrderType()==OP_SELL && NormalizeDouble(OrderOpenPrice()-Bid,Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(OrderStopLoss()-Bid, Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() - (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
        }
     }
  }
return;
}

 
 
ponochka:
у кого нить есть траллинг, который срабатывает через N пунктов, а потом идет за ценой?
У меня есть, но он срабатывает через N пунктов, и останавливается на безубытке....
исправьте плиз, ато я голову сломал!!!

 

вот у мой трал работает, работает:

//____________________________________________________________________________________
bool trailingpos(int magic_,int trail_p){
   string sym=Symbol(); bool res = true; double sl,slnew,tpips = trail_p*Point; int i,k=OrdersTotal();
   for(i=0;i<k;i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==sym && OrderMagicNumber()==magic_){
            switch(OrderType()){
               case OP_BUY:
                           slnew = NormalizeDouble(Ask - tpips,Digits);
                           sl = OrderStopLoss();
                           if(OrderOpenPrice() <slnew)
                              if((sl < slnew) || (sl == 0.0)){
                                    if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                                                   {res = false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                           }
                           break;
               case OP_SELL:
                           slnew = NormalizeDouble(Bid + tpips,Digits);
                           sl = OrderStopLoss();
                           if(OrderOpenPrice()> slnew)
                              if((sl > slnew) || sl ==0.0){
                                    if(!OrderModify(OrderTicket(),OrderOpenPrice(),slnew,OrderTakeProfit(),OrderExpiration(),clrNONE))
                                                   {res = false; Print(__FUNCTION__,"OrderModify завершилась с ошибкой № ",GetLastError());}
                           }
                           break;
              }
           }
        }
     }
return(res);}
//____________________________________________________________________________________

вызов ф-ции 2 параметра магикномер и пп трала

 
Sergey Likho:

Как быстро обнулить (очистить) все элементы структуры?


Структура глобальная. В определенные моменты должна обнуляться чтоб потом наполниться новыми данными. 

Я понимаю, что можно поэлементно приравнять все к нулю. Есть другой способ?

// Обнуляет любую простую структуру
template <typename T>
void SetNull( T &Value )
{
  static T NullValue = {0};
  
  Value = NullValue;
}
 

Здравствуйте! есть ли код для общего заработка по всем ордерам за один день?

у меня есть такой:

double getProfitFromTime(datetime time)
  {
   double profit = 0;
   
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
        {
         if(OrderCloseTime() < time)
            break;
         
         profit += OrderProfit() + OrderCommission() + OrderSwap();
        }
   
   return(profit);
  }

ссылаться к нему надо так:

getProfitFromTime(iTime(NULL, PERIOD_D1, 0);

Можно его как нить изменить, что бы можно было видеть, прибыль по одной валютной паре за день и общую по все валютным парам?

 
ponochka:

 и общую по все валютным парам?

уберите OrderSymbol() == Symbol() в условии:

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
тогда эта часть кода будет считать все ордера в истории терминала только по магикномеру, если  магикномера  по разным валютам одинаковы, если убрать OrderMagicNumber() == magic то будет считать все ордера без учета магикномера
 

Привет всем. Подскажите новичку. Хочу провести небольшое исследование поведения спреда. Есть код который считает суммарный спред. Все пишется, все работает ок.

void ModifySpread()
{
  int Spread = (Ask - Bid) / Point;
  
    
  Sumsp = SumSp + Spread;
  Vol++;
  
  PrevTime = Time[0];
  
  return;
}

Хочу из подсчета убрать моменты, когда спред не производит никаких телодвижений, то есть бид и аск не изменялись. 
Делаю так:

void ModifySpread()
{
  int Spread = (Ask - Bid) / Point;
  if ((prevsbid == Bid)) && (prevsask == Ask))return;
   
  SumSp = SumSp + Spread;
  Vol++;
  
  

  prevsask = Ask;
  prevsbid = Bid;
  PrevTime = Time[0];
  return;
}

Но ничего не меняется. Где я туплю?

Причина обращения: