MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1421

 
viktor:
MT4 1320を ダウンロードできる場所を教えてください。
アルパリ
 

mt5のOBVインジケーターは、価格計算の種類を選択することができません。

mt4では、このオプションが利用できます。

なぜ?

実際には、OBVは、キャンドルがダウンしている場合、ボリュームが "負 "である、全体の歴史のすべてのボリュームの合計として計算されます
だから、なぜmt4でそれが指標の計算の ための価格の種類を選択することが可能ですか?それは計算に関与していない場合

 

買い注文と売り注文の別件数を計算するコードの部分があります。(b-買い注文、s-売り注文)

そして、新しい注文が開かれたり、既存の注文が閉じられたりした場合の条件を書きたいのです。つまり、先に開いた注文の数とその後の変更数を比較する必要があるのですが、これをコードにどう書けばいいのかわかりません。注文数の変更を保存するにはどうすればよいですか?よろしくお願いします。

double LB=0, LS=0;
double 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 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
}
 
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:

どちらかというと、静的にやらないとリセットされてしまうんです。

私は普段、国旗をグローバルにしています。もちろん、関数の本体で再宣言され、Staticが必要です。しかし、なぜ誰も中括弧がないことに気づかなかったのか))) print & assignment should be in brackets))

また、静的でない場合は、printsimbol=""がZEROになり、シンボルに現在 値が割り当てられるので、当然、関数呼び出し ごとに表示されます)

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);
  }
//+------------------------------------------------------------------+
 
テスターのアドバイザーは正常に動作し、要求などを置くが、実際のアカウントでは、ロボットがアクティブであるにもかかわらず、要求が公開されていない理由を誰が知っている