新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1421

 
viktor:
告诉我哪里可以下载MT4 1320
阿尔帕里
 

mt5中的OBV指标没有选择价格计算类型的可能性。

在mt4中,这个选项是可用的。

为什么?

事实上,OBV的计算方法是整个历史上所有成交量的总和,在蜡烛下跌的地方,成交量是 "负 "的
那么为什么在mt4中可以选择价格类型来计算指标 呢?如果它不参与计算的话

 

有一部分代码用于计算买入和卖出订单的单独数量。(b - 买入订单,s - 卖出订单)

然后我想写一个条件,如果一个新的订单被打开或一个现有的订单被关闭。也就是说,我们需要比较先前开出的订单数量和随后的变化数量,但我不知道如何在代码中写出这一点。我如何保存订单数量的变化?请帮助。

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

mt5中的OBV指标没有选择价格计算类型的可能性。

在mt4中,这个选项是可用的。

为什么?

事实上,OBV的计算方法是整个历史上所有成交量的总和,在蜡烛下跌的地方,成交量是 "负 "的
那么,在mt4中怎么可能为指标计算 选择价格类型呢?如果它不参与计算

一个好的问题是答案的一半。

 
scomoroh:

有一部分代码是用来计算买入和卖出订单的单独数量的。

并且有一个地方可以插入)

 
Artyom Trishkin:

一个定义明确的问题包含一半的答案。

所以在mt4 ts OBV中选择价格类型没有任何意义,也不影响任何东西?
 
MakarFX:

而且有地方可以放)。

然后,我将重复这个问题。

有一部分代码用于计算买入和卖出订单的单独数量。(b - 买入订单,s - 卖出订单)

然后我写了一个条件,如果一个新的订单被打开或一个现有的订单被关闭,就会触发下一个动作。也就是说,我们必须比较先前开出的订单数量和随后的变化数量,但我不知道如何在代码中写出这一点。我如何保存订单数量 的变化?请帮助。


   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:

如果有的话,你必须静态地做,否则就会重置。

我通常把旗子做成全局性的。当然,在函数的主体中,需要重新声明和静态化。但为什么没有人注意到大括号的缺失呢)))),打印和赋值应该在括号里。)

如果没有静态化,当然会在每次函数调用 时打印出来,因为printsimbol=""会变成零,符号会被分配到当前值)

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:

然后,我将重复这个问题。

有一部分代码用于计算买入和卖出订单的单独数量。(b - 买入订单,s - 卖出订单)

然后我写了一个条件,如果一个新的订单被打开或一个现有的订单被关闭,该动作将被传递。也就是说,我们必须比较先前开出的订单数量和随后的变化数量,但我不知道如何在代码中写出这一点。我如何保存订单数量 的变化?请帮助。


我将尝试这样做

//+------------------------------------------------------------------+
#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);
  }
//+------------------------------------------------------------------+
 
谁知道为什么顾问在测试器中工作正常,提出请求,等等,但在真实账户 中,尽管机器人是活跃的,但请求却没有暴露出来。