Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 328

 

Olá, quero obter uma data de vencimento para os futuros

EXPIRATION=(datetime)SymbolInfoInteger(Symbol(),SYMBOL_EXPIRATION_TIME);

Dá 1970 01 01 00 00

 

Olá, alguém pode aconselhar como fazer uma EA abrir uma ordem em um determinado ponto do gráfico quando você clica em um determinado ponto? Quando você instala um script ou uma EA, a função NormalizeDouble(WindowPriceOnDropped(),Digits); define o ponto quando você clica no mouse. Mas a questão é que isso pode ser feito a qualquer momento a partir de uma EA em funcionamento. Existe tal possibilidade?

Eu vejo uma função ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1) Ainda não sei como usá-lo, é possível determinar para onde (para que ponto) o ponteiro do mouse foi direcionado?

 
Basicprof:

Olá, alguém pode aconselhar como fazer uma EA abrir uma ordem em um determinado ponto do gráfico quando você clica em um determinado ponto? Quando você instala um script ou uma EA, a função NormalizeDouble(WindowPriceOnDropped(),Digits); define o ponto quando você clica no mouse. Mas a questão é que isso pode ser feito a qualquer momento a partir de uma EA em funcionamento. Existe tal possibilidade?

Eu vejo uma função ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1) Mas ainda não descobri como usá-lo. É possível determinar para onde (para que ponto) o ponteiro do mouse foi direcionado?

Use o evento "CHARTEVENT_CLICK".

Você pode obter partes do código a partir daqui

 
Vitaly Muzichenko:

Use o evento "CHARTEVENT_CLICK" clique

Você pode obter os trechos de código a partir daqui


Muito obrigado!!!

 

Mais uma pergunta: eu movi as funções da EA para a biblioteca, quando eu executo a EA, ela trava imediatamente e as mensagens mostram que o terminal não pode carregar a biblioteca Não é possível chamar 'ATP_funkcii.mq4::DrawLABEL', 'ATP_funkcii.mq4' não é carregado

Como resolver este problema?

Eu notei uma coisa! O editor da EA e da biblioteca podem ser vistos, mas no computador, não os vejo nos arquivos do programa por algum motivo. Somente o arquivo do Expert Advisor.

 
Olá, você poderia me dizer como conhecer o índice do próximo elemento de uma matriz?
 
vikzip:
Olá, você poderia me dizer como conhecer o índice de um elemento da matriz para conhecer o índice do próximo elemento da matriz?

O índice de qualquer matriz sempre começa com zero. Ou seja, se o tamanho da matriz for 1, o índice desta célula será 0.

Como você conhece o número 5 para conhecer o número 6?

Conhecendo o dígito 6, como conheço o dígito 7, sabendo que existem apenas 8 dígitos?

Conhecendo o índice 7, como você conhece o próximo índice, sabendo que o tamanho da matriz = 8 ?

 

Olá, eu preciso de ajuda. O indicador não atualiza, quero que ele seja atualizado a cada tique.


//+------------------------------------------------------------------+
//|                                             alx_RSI_BANDS_MA.mq4 |
//|                                                       alx_Babon |
//+------------------------------------------------------------------+
#property copyright "alx_Babon"
#property link      "babon82@gmail.com"

#property indicator_separate_window
#property indicator_buffers 6
#property  indicator_color1 Yellow
#property  indicator_color2 DarkBlue
#property  indicator_color3 White
#property  indicator_color4 White
#property  indicator_color5 White
//---- input parameters
extern int       RSI_Per=8;
extern int       MA_Per=8;
extern int       Bands_Per=20;
extern int       SmoothType=0;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double Sostoyanie;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   string type;
   switch(SmoothType)
   {
   case MODE_EMA: type="EMA";break;
   case MODE_SMMA: type="SMMA";break;
   case MODE_LWMA: type="LWMA";break;
   default: type="LWMA";SmoothType=0;break; // если ни один вариант не подошел
   }

   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);//Свойства RSI
   SetIndexLabel(0,"RSI("+RSI_Per+")");
   SetIndexStyle(1,DRAW_LINE,0,2);
   SetIndexBuffer(1,ExtMapBuffer2);//Свойства MA
   SetIndexLabel(1,"MA ("+MA_Per+"), "+type);
   SetIndexStyle(2,DRAW_LINE,2,1);
   SetIndexBuffer(2,ExtMapBuffer3);//Свойства Bands
   SetIndexLabel(2,"Bands ("+Bands_Per+")");
   SetIndexStyle(3,DRAW_LINE,2,1);
   SetIndexBuffer(3,ExtMapBuffer4);//Свойства Bands
   SetIndexLabel(3,"Bands ("+Bands_Per+")");
   SetIndexStyle(4,DRAW_LINE,2,1);
   SetIndexBuffer(4,ExtMapBuffer5);//Свойства Bands
   SetIndexLabel(4,"Bands ("+Bands_Per+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit,cnt;
   int cnt_rsi,cnt_bb,cnt_ma;
   if (counted_bars==0) 
      {
      limit=Bars-RSI_Per-1;
      for(cnt=limit;cnt>=0;cnt--)
         {
          ExtMapBuffer1[cnt]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,cnt);
         }
      for(cnt=1;cnt<=Bars;cnt++)
         {
          ExtMapBuffer6[cnt]= iMA(NULL,0,MA_Per,0,SmoothType,PRICE_CLOSE,cnt);
                
         }
      for(cnt=limit-MA_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer1,0,MA_Per,0,SmoothType,cnt);
         }          
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer3[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_LOWER,cnt);
         }
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer4[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_UPPER,cnt);
         }  
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer5[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_MAIN,cnt);
         } 
         
      }
      cnt_rsi=limit;
      cnt_bb=limit-Bands_Per;
      cnt_ma=limit-MA_Per;
      Comment(
               "RSI (",RSI_Per,")=",ExtMapBuffer1[1],"\n",
          "Bolinger (",Bands_Per,")=",ExtMapBuffer5[1],"\n",
                "MA (",MA_Per,")=",ExtMapBuffer2[1],"\n"
                //,"MA CNT (",MA_Per,")=",ExtMapBuffer6[8],"\n"
                //,"CNT_MA (",cnt_ma,")"
             );
//----
      //ObjectCreate("Arrow", OBJ_ARROW, 0, 0, 5);
      //ObjectSet("Arrow",OBJPROP_ARROWCODE,OBJ_PERIOD_M15 | OBJ_PERIOD_H1);
      //ObjectSetText("PivotText", "Pivot Point (DJ)", fontsize, "Arial", 
                 //colorPivot);
//----
   return(0);
  }
//+---------------------------------------

 
Artyom Trishkin:

O índice de qualquer matriz sempre começa com zero. Ou seja, se o tamanho da matriz for 1, então o índice dessa célula será 0.

Como você conhece o número 5 para conhecer o número 6?

Como você conhece o dígito 6 para conhecer o dígito 7, sabendo que existem apenas 8 dígitos?

Como, conhecendo o índice 7, como podemos descobrir o próximo índice, sabendo que o tamanho da matriz = 8 ?


Obrigado pela explicação detalhada )))) Portanto, seria correto escrever


double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);                                                 //задан размер массива
       Mas [i] = Price; 
       ArraySort (Mas,WHOLE_ARRAY,0,MODE_DESCEND);                           // Теперь цены открытия упорядочены по убыванию
     }
   } 
   if(ArraySize(Mas)>1)                                                         //Если массив не пустой
   
         { 
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

       int Blizko1; 

Mas[Blizko1]= Blizko2+1;     Это верно??

                                                      //Определен индекс ближайшего меньшего по значению елемента к текущей цене         PriceBlizko1=Mas[Blizko1];
Você pode me dizer, por favor?

 
vikzip:

Obrigado pela explicação detalhada)))) Portanto, seria correto escrever


Você pode me dizer, por favor?

Não há necessidade de ordenar a matriz após cada adição de um elemento da matriz. Seria melhor mover a triagem

double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);                                                 //задан размер массива
       Mas [i] = Price; 
     }
   } 
   if(ArraySize(Mas)>1)                                                         //Если массив не пустой
   
         { 
       ArraySort (Mas,WHOLE_ARRAY,0,MODE_DESCEND);                           // Теперь цены открытия упорядочены по убыванию
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

       int Blizko1; 
        Mas[Blizko1]= Blizko2+1;     Это верно??
                                                      //Определен индекс ближайшего меньшего по значению елемента к текущей цене
        PriceBlizko1=Mas[Blizko1];

A partir da ajuda.

Valor de retorno

Índice de retorno do primeiro elemento encontrado. Se o valor procurado não for encontrado, ele retorna o índice do menor dos elementos mais próximos entre os quais o valor procurado está localizado.

Mas[Blizko2] é o valor menor mais próximo na matriz.

Razão: