Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 153

 

eu tenho um código com classes com painel informativo!!!
MAS eu tenho um problema!
eu tenho um rótulo e posso reagir através de configurações remotas Então quando você muda as configurações 2-3 vezes, o próprio painel se move em direções diferentes!!! e quando você muda o cronograma 2-3 vezes!!! como eu posso me livrar disso???


um pouco mais de informação:
Descobri que se no arquivo Dialog.mqh em função CAppDialog::Destroy(const int razão) para comentar linhas
if(m_deinit_reason!=WRONG_VALUE)
retornar;
então o painel será normalmente destruído e reiniciado ao mudar os períodos de tempo.

Arquivos anexados:
TradePanel.mq4  15 kb
 

Olá. Estou escrevendo um indicador MT4 que só funciona com objetos gráficos e também rastreia a posição dos objetos gráficos criados pelo mesmo indicador trabalhando em um período diferente. Quando movo manualmente a linha vertical do período maior, as linhas de tendência da nova posição da linha vertical do período maior são redesenhadas, e também a linha vertical do período menor é redesenhada. Tudo isso é tratado no evento OnChartEvent. O problema é que ao mover a linha vertical de um período alto, às vezes os objetos de um período baixo não são redesenhados imediatamente, mas somente quando eu faço um duplo clique na linha vertical de um indicador, trabalhando em um período alto, eles são redesenhados. E em outro PC mais potente isto acontece com menos freqüência. Eu aplico a função ChartRedraw() no código após o redesenho de objetos.

Isso pode acontecer devido à falta de recursos do PC?

Quero tentar executar os indicadores em diferentes gráficos e usar o EventChartCustom para gerar um evento personalizado a partir do indicador trabalhando em um período superior para o segundo indicador. Talvez isso acelere a operação do programa?

 

Como posso zerar (limpar) rapidamente todos os elementos de uma estrutura?


A estrutura é global. Em certos momentos, ela tem que ser liberada para ser preenchida com novos dados posteriormente.

Eu entendo que você pode elementar por elemento igualar tudo a zero. Existe outra forma?


estrutura ABC{

int a1;

int a2;

int a3;

};

ABC a;

Precisamos de algo como isto

a = 0; // todos os elementos da estrutura são zero

 
Sergey Likho:

Como posso zerar (limpar) rapidamente todos os elementos de uma estrutura?


A estrutura é global. Em certos momentos, ela tem que ser liberada para ser preenchida com novos dados posteriormente.

Eu entendo que você pode elementar por elemento igualar tudo a zero. Existe outra forma?


estrutura ABC{

int a1;

int a2;

int a3;

};

ABC a;

Precisamos de algo como isto

a = 0; // todos os elementos da estrutura são zero

ZeroMemory(a);
 
Alguém tem um comércio de reboque que aciona depois de N pips e depois vai atrás do preço?
Eu tenho um, mas ele aciona após N pips e pára no breakeven....
conserte por favor, estou fora da minha cabeça!!!
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:
alguém tem uma rede de arrasto que aciona depois de N pips e depois vai atrás do preço?
Eu tenho um, mas funciona após N pips e pára no breakeven....
conserte por favor, estou fora da minha cabeça!!!

aqui minha rede de arrasto funciona, ela funciona:

//____________________________________________________________________________________
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);}
//____________________________________________________________________________________

chamar a função 2 parâmetros número mágico e arrasto np

 
Sergey Likho:

Como posso zerar (limpar) rapidamente todos os elementos de uma estrutura?


A estrutura é global. Em certos momentos, ela tem que ser liberada para ser preenchida com novos dados posteriormente.

Eu entendo que você pode elementar por elemento igualar tudo a zero. Existe outra maneira?

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

Olá! existe um código para o total de ganhos em todos os pedidos em um dia?

Eu tenho um:

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);
  }

É referido desta forma:

getProfitFromTime(iTime(NULL, PERIOD_D1, 0);

Posso modificá-lo de alguma forma, para que eu possa ver o lucro para um par de moedas em um dia e o lucro total para todos os pares de moedas?

 
ponochka:

e total para todos os pares de moedas?

RemoverOrderSymbol() == Símbolo() da condição:

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
então esta parte do código só contará todas as ordens no histórico do terminal por número mágico se o número mágico para diferentes moedas for o mesmo; se você removerOrderMagicNumber() == magic então todas as ordens serão contadas sem considerar o número mágico
 

Olá a todos. Uma palavra de conselho para um recém-chegado. Quero fazer uma pequena pesquisa sobre o comportamento de propagação. Eu tenho algum código que calcula o spread total. Tudo está escrito, tudo funciona bem.

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

Quero remover momentos em que a propagação não realiza nenhum movimento, ou seja, licitar e pedir não mudar.
Eu faço isso:

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;
}

Mas nada muda. Para onde estou indo devagar?