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

 
viktor:
Diga-me onde você pode fazer o download do MT4 1320
Alpari
 

O indicador OBV em mt5 não tem a possibilidade de selecionar o tipo de cálculo de preço

No mt4, esta opção está disponível.

Por quê?

Na verdade, o OBV é calculado como a soma de todo o volume em todo o histórico, onde a vela está em baixo o volume é "negativo"
Então por que em mt4 é possível selecionar o tipo de preço para o cálculo do indicador? se ele não está envolvido no cálculo

 

Há parte do código para calcular o número separado de ordens de compra e venda. (b - ordens de compra, s - ordens de venda)

Em seguida, quero escrever uma condição pela qual, se uma nova ordem for aberta ou uma ordem existente for fechada. Ou seja, precisamos comparar o número de pedidos abertos anteriormente e o número de mudanças subsequentes, mas não sei como escrevê-lo no código. Como posso salvar as mudanças no número de pedidos? Por favor, ajude.

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

O indicador OBV em mt5 não tem a possibilidade de selecionar o tipo de cálculo de preço

No mt4, esta opção está disponível.

Por quê?

Na verdade, o OBV é calculado como a soma de todo o volume em todo o histórico, onde a vela está em baixo o volume é "negativo"
Então por que é possível selecionar o tipo de preço para o indicador durante seu cálculo em mt4? se ele não está envolvido no cálculo

Uma boa pergunta é a metade da resposta.

 
scomoroh:

Há parte do código para calcular o número separado de ordens de compra e venda.

E há um lugar para inseri-lo)

 
Artyom Trishkin:

Uma pergunta bem definida contém a metade da resposta.

Então a escolha do tipo de preço no mt4 ts OBV não significa nada e não afeta nada?
 
MakarFX:

E há um lugar para colocá-lo).

Então vou repetir a pergunta.

Há uma parte do código para calcular o número separado de ordens de compra e venda. (b - ordens de compra, s - ordens de venda)

Então escrevi uma condição pela qual, se uma nova ordem for aberta ou uma ordem existente for fechada, a próxima ação será acionada. Ou seja, temos que comparar o número de pedidos abertos anteriormente e o número de mudanças subsequentes, mas não sei como escrevê-lo no código. Como posso salvar as mudanças no número de pedidos? Por favor, ajude.


   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:

Se alguma coisa, você tem que fazê-lo estaticamente, caso contrário, ele é reiniciado.

Costumo tornar as bandeiras globais. É claro que no corpo da função será necessário redeclarar e Static é necessário. Mas por que ninguém notou que faltam os parênteses entre parênteses)))) impressão e atribuição devem estar entre parênteses)

E sem estática, é claro, ela será impressa em cada chamada de função, uma vez que"printsimbol="" se tornará ZERO e o símbolo será atribuído ao valor atual)

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:

Então vou repetir a pergunta.

Há uma parte do código para calcular o número separado de ordens de compra e venda. (b - ordens de compra, s - ordens de venda)

Então escrevi uma condição pela qual, se uma nova ordem é aberta ou uma ordem existente é fechada, a ação é passada adiante. Ou seja, temos que comparar o número de pedidos abertos anteriormente e o número de mudanças subsequentes, mas não sei como escrevê-lo no código. Como posso salvar as mudanças no número de pedidos? Por favor, ajude.


Eu tentaria fazer isso

//+------------------------------------------------------------------+
#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);
  }
//+------------------------------------------------------------------+
 
Quem sabe por que o assessor do testador trabalha bem, coloca pedidos, etc., mas na conta real, os pedidos não são expostos, embora o robô esteja ativo
Razão: