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

 
viktor:
Dime dónde se puede descargar MT4 1320
Alpari
 

El indicador OBV en mt5 no tiene la posibilidad de seleccionar el tipo de cálculo del precio

En mt4 esta opción está disponible.

¿Por qué?

De hecho, el OBV se calcula como la suma de todo el volumen en toda la historia, donde la vela es hacia abajo, el volumen es "negativo"
Entonces, ¿por qué en mt4 es posible seleccionar el tipo de precio para el cálculo del indicador? si no está involucrado en el cálculo

 

Hay una parte del código para calcular el número separado de órdenes de compra y venta. (b - órdenes de compra, s - órdenes de venta)

Entonces quiero escribir una condición por la cual si se abre una nueva orden o se cierra una orden existente. Es decir, necesitamos comparar el número de órdenes abiertas anteriormente y el número de cambios posteriores, pero no sé cómo escribir esto en el código. ¿Cómo puedo guardar los cambios en el número de pedidos? Por favor, ayuda.

doble LB=0, LS=0;
doble RaznSB=0, RaznBS=0;
int b=0,s=0;
int izmb=0, izms=0;
for (int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol())
{
int punta = OrderType();
if (tip==OP_BUY)
{
LB += OrderLots();
b++;
}
if (tip==OP_SELL)
{
LS += OrderLots();
s++;
}
}
}
}
if (izmb>b ||izmb<b || izms>s | izms<s) {
izmb=b;
izms=s
}
 
Roman Sharanov:

El indicador OBV en mt5 no tiene la posibilidad de seleccionar el tipo de cálculo del precio

En mt4 esta opción está disponible.

¿Por qué?

De hecho, OBV se calcula como la suma de todo el volumen en toda la historia, donde la vela es abajo el volumen es "negativo"
Entonces, ¿por qué es posible seleccionar el tipo de precio para el indicador durante su cálculo en mt4? si no está involucrado en el cálculo

Una buena pregunta es la mitad de la respuesta.

 
scomoroh:

Hay una parte del código para calcular un número separado de órdenes de compra y de venta.

Y hay un lugar para insertarlo)

 
Artyom Trishkin:

Una pregunta bien definida contiene la mitad de la respuesta.

¿Así que la elección del tipo de precio en mt4 ts OBV no significa nada y no afecta a nada?
 
MakarFX:

Y hay un lugar donde ponerlo).

Entonces repetiré la pregunta.

Hay una parte de código para calcular el número de órdenes de compra y venta por separado. (b - órdenes de compra, s - órdenes de venta)

Entonces he escrito una condición por la cual, si se abre una nueva orden o se cierra una orden existente, se activa la siguiente acción. Es decir, tenemos que comparar el número de órdenes abiertas anteriormente y el número de cambios posteriores, pero no sé cómo escribir esto en el código. ¿Cómo se guardan los cambios en el número de pedidos? Por favor, ayuda.


   double LB=0,LS=0;
   int b=0,s=0;
   int izmb=0, izms=0;
   
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol())
         { 
            int tip = OrderType(); 
            if (tip==OP_BUY)             
             {  
               LB  += OrderLots();
               b++; 
             }                                         
            if (tip==OP_SELL)        
             {
               LS  += OrderLots();
               s++;
            } 
         }
     }     
   }
   if (izmb>b ||izmb<b || izms>s || izms<s){ //условие сравнения количества ордеров, изменилось или нет,
    izmb=b;                                   //если изменилось то присваиваем новое значение, как его сохранить? Ведь с новым тиком
    izms=s                                    // оно опять будет равно "0"???
     }
 
Vitaly Muzichenko:

En todo caso, hay que hacerlo de forma estática, de lo contrario se reinicia.

Suelo hacer las banderas globales. Por supuesto, en el cuerpo de la función se redeclara y se necesita Static. Pero por qué nadie se ha dado cuenta de que faltan los corchetes )))) print & assignment deberían ir entre corchetes)

Y sin estática por supuesto que se imprimirá en cada llamada a la función ya queprintsimbol="" se convertirá en CERO y se asignará al símbolo el valor actual)

static string symbol, printsimbol="";
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
         if(ChartGetInteger(currChart,CHART_BRING_TO_TOP,0)==true) 
           { 
            if(ChartSymbol(currChart)!=symbol)
                {
                 symbol=ChartSymbol(currChart);
                 if(printsimbol!=symbol)
                   { Print(symbol);printsimbol=symbol;}
                }
           } 
         currChart=ChartNext(currChart);  i++;
        }
 
scomoroh:

Entonces repetiré la pregunta.

Hay una parte de código para calcular el número de órdenes de compra y venta por separado. (b - órdenes de compra, s - órdenes de venta)

Entonces he escrito una condición por la cual, si se abre una nueva orden o se cierra una orden existente, se pasa la acción. Es decir, tenemos que comparar el número de órdenes abiertas anteriormente y el número de cambios posteriores, pero no sé cómo escribir esto en el código. ¿Cómo puedo guardar los cambios en el número de pedidos? Por favor, ayuda.


Yo trataría de hacer esto

//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
int izmb,izms;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(200);

   izmb=0; izms=0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CountOrders(0,0)!=izmb){izmb=CountOrders(0,0);}
   if(CountOrders(0,1)!=izms){izms=CountOrders(0,1);}
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
//|  0 - ордера типа BUY          1 - ордера типа SELL               |
//|  2 - ордера типа BUYLIMIT     3 - ордера типа SELLLIMIT          |
//|  4 - ордера типа BUYSTOP      5 - ордера типа SELLSTOP           |
//|  6 - ордера типа Balance     -1 - Все типы ордеров               |
//+------------------------------------------------------------------+
int CountOrders(string symb="", int or_ty=-1) 
  {
   int cnt=0;
   if(symb=="0") symb=_Symbol;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==symb || symb=="")
           {
            if(or_ty<0 || or_ty==OrderType()) cnt++;
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
 
A saber por qué el asesor en el tester funciona bien, pone peticiones, etc., pero en la cuenta real, las peticiones no se exponen aunque el robot esté activo
Razón de la queja: