Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1358

 

MakarFX , ¿qué función tiene este enlace: qué función realiza?


input int BarTrade = 5; // Entiendo que este es el número de los períodos de seguimiento de 5.

int TimeBarTrade=BarTrade*Period()*60; //¿Por qué se multiplica por 60?

 
Alexey Belyakov:

MakarFX , ¿qué función tiene este enlace: qué función realiza?


input int BarTrade = 5; // Entiendo que este es el número de los períodos de seguimiento de 5.

int TimeBarTrade=BarTrade*Period()*60; // ¿Cómo se entiende? ¿Por qué se multiplica por 60?

BarTrade*Periodo()*60

número de barras * marco temporal actual * 60 segundos

es decir, la cantidad de barras convertida en segundos

 
MakarFX:

BarTrade*Periodo()*60

número de barras * marco temporal actual * 60 segundos

es decir, el número de compases convertidos en segundos

Puedes hacerlo así.

int TimeBarTrade = PeriodSeconds()*BarTrade;
 
MakarFX:

Si excluye los errores relacionados con

MODE_STOPLEVEL, MODE_TRADEALLOWED, MODE_MINLOT, MODE_LOTSTEP, MODE_MAXLOT

entonces los búhos no golpearán el servidor.

Makar, muchas gracias por señalar las comprobaciones que hay que hacer para no angustiar al servidor y banear al EAJ.

Controles realizados así

mod nivel de parada para la parada

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL);//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }

nivel de parada mod para el beneficio

      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL);// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         


Comprobación de la autorización comercial

//---- ПРОВЕРКА НА РАЗРЕШЕНИЕ ТОРГОВ ПЕРЕД ОТКРЫТИЕМ ОРДЕРОВ
   if(MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
   {// начало есл торговля разрешена
  /*
куча проверок на условия открытия и само открытие ордеров
*/
} // КОЕНЦ ПРОВЕРКИ НА РАЗРЕШЕНИЕ ТОРГОВЛИ
          
          else //ИНАЧЕ ЕСЛИ ТОРГОВЛЯ НЕ РАЗРЕШЕНА 
          
          { // НАЧАЛО ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ 
          
          Print("ТОРГИ НЕ РАЗРЕШЕНЫ- ПЫТАТЬСЯ ОТКРЫТЬ ОРДЕРА НЕ БУДЕМ");
          }  // КОЕНЦ ЭЛС ЕСЛИ ТОРГИ НЕ РАЗРЕШЕНЫ

Comprobación del lote máximo y mínimo

Primero obtuve los valores de lote máximo y lote mínimo en las variables así

  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ

Y entonces compruebo en algún lugar de abajo como escribo el Grial

  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

¿Es esto correcto o estoy equivocado?

No comprobé el cambio de paso de lote porque el lote se calcula como un porcentaje del depósito y allí este valor se multiplica por un punto y se normaliza - esta comprobación puede omitirse - ¿cierto, o debo hacerlo de todos modos? ¿Si todavía tenemos que comprobar cómo escribir este cheque?

El objetivo principal de todas estas comprobaciones es tener siempre el valor correcto de stop, beneficio y tamaño de lote, para poder empezar a abrir órdenes de forma general. Si todos estos parámetros están bien, el Asesor Experto no molestará al servidor; ¿entiendo esto correctamente?

 
DanilaMactep:

Muchas gracias, Makar, por decirme qué comprobaciones hay que hacer para evitar el servidor y banear al EAJ.


//ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА
// ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ

Aquí puede haber un error de 130 debido al deslizamiento.

Yo haría esto

         //ПРОВЕРКА НА МОДЕ СТОП ЛЕВЕЛ- МИНИМАЛЬНЫЙ УРОВЕНЬ СТОПА 
         if(sl<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ СТОПОЛС МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          sl= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;//СТОП  ЛОССУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
      // ПРОВЕРКА ТЕЙК ПРОФИТА НА МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ УСТАНОВКИ
      
  if(tp<MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5) // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО 
         {
          tp= MarketInfo(Symbol(),MODE_STOPLEVEL)*1.5;// ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
         }
         
 

Hola a todos, ¿alguien ha tenido algún problema con los puntos colgantes en el gráfico encontrado a través de iHighest/iLowest?

Prehistoria: Tengo una mínima experiencia en programación, estoy escribiendo un indicador en mql4 que debe mostrar los puntos en el gráfico, encontrados por las condiciones de if y conectarlos con líneas. Lógicamente, busca los puntos correctamente, pero los dibuja con un desplazamiento, luego para 2 barras, luego para 3 barras. He adjuntado el archivo con el código también.


int start()
  {
   int counted_bars=IndicatorCounted(); //хранит количество посчитанных индикатором баров. Функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start().
   int n,limit;
   int val_index;
   
  if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars; //количество последних баров, которые нужно пересчитать.
   if(limit>barsToProcess)
      limit=barsToProcess;

   for(n=0; n<=limit; n++)
     {
      if((Close[n+1]>Open[n+1] && Open[n+2]>=Close[n+2]) || (Close[n+1]>Open[n+1] && Open[n+3]>Close[n+3]))
        {
         val_index=iLowest(NULL,0,MODE_LOW,3,n+1);
         myAZBuffer[n]=Low[val_index];
         ExtLowBuffer[n]=Low[val_index];
        }
      else
         if((Open[n+1]>Close[n+1] && Close[n+2]>=Open[n+2]) || (Close[n+1]<Open[n+1] && Close[n+3]>Open[n+3]))
          {
            val_index=iHighest(NULL,0,MODE_HIGH,3,n+1);
            myAZBuffer[n]=High[val_index];
            ExtHighBuffer[n]=High[val_index];
           }
     }
   return (0);
  }
Archivos adjuntos:
AZforum.mq4  8 kb
 
azolotta:

Hola a todos, ¿alguien ha tenido algún problema con los puntos colgantes en el gráfico encontrado a través de iHighest/iLowest?

Prehistoria: Tengo una mínima experiencia en programación, estoy escribiendo un indicador en mql4 que debe mostrar los puntos en el gráfico, encontrados por las condiciones de if y conectarlos con líneas. Lógicamente, busca los puntos correctamente, pero los dibuja con un desplazamiento, luego para 2 barras, luego para 3 barras. He adjuntado el archivo con el código también.


Los puntos se dibujan correctamente, sin desplazamiento.

Si se cumple la condición y iHighest/iLowest son mayores o menores que el High/Low actual

atrae


 
MakarFX:

los puntos se dibujan correctamente, sin desplazamiento

si se cumple la condición y iHighest/iLowest es mayor o menor que el High / Low actual

y luego dibuja


Así que, creo que estoy empezando a darme cuenta de mi error) Así que, con el fin de mostrar visualmente estos puntos en el lugar correcto, tengo que introducir algún contador separado en lugar de n para myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? pero cómo hacer esto
 
azolotta:
Así que, creo que estoy empezando a darme cuenta de mi error) Resulta que para mostrar visualmente estos puntos en el lugar correcto, necesito introducir algún contador separado en lugar de n para myAZBuffer[n], ExtLowBuffer[n], ExtHighBuffer[n] ? pero cómo hacerlo

No, lo has entendido bien.

la condición utiliza dos o tres barras del historial,

por eso se dibuja después de 2-3 barras cuando se cumple la condición

 
MakarFX:

No, lo has entendido bien.

la condición utiliza dos o tres barras del historial,

por eso se dibuja después de 2-3 barras cuando se cumple la condición

Vale, entonces cómo rehago el código si necesito, por ejemplo, elegir el máximo de las últimas 3 barras (que cumplan las condiciones en el if) y ponerle un punto (¡justo en este máximo!), luego también encontrar el punto mínimo.