初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 219

 
Vitaly Muzichenko:
Vitaly Muzichenko:
void OnTick()
  {
     ......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return (0);
     ......остальной код, в частности для открытия....
  }


выдает ошибку: 'return' - 'void' function returns a value Vitaly Muzichenko:
 
Oventu:
void OnTick()
  {
     ......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
     ......остальной код, в частности для открытия....
  }
 
Vitaly Muzichenko:
Vitaly Muzichenko:
ありがとうございました。
 
こんにちは、OrdersTotal()はどうでしょうか?
いつも注文数-1、つまりOrdersTotal()-1が入っていることを知っていて、すべて動いていたのですが、プログラムを書き始めたら、突然1つの注文がカウントされなくなり、OrdersTotal()に問い合わせたら、3-1ではなく注文数合計=3となってしまいました。
どうなるのでしょうか?

ヘルプにあるループの通常の形

int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}
.

つまり、1次がゼロに等しい。

しかし、いや、実は1次が1なのだ。つまり、ゼロからではなく、1から探索を始めるべきだということか。
メタクオーツが何か悪いことをしたのか、私がバカなのか?

Документация по MQL5: Торговые функции / OrdersTotal
Документация по MQL5: Торговые функции / OrdersTotal
  • www.mql5.com
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
 
Maksim Mihajlov:
こんにちは、OrdersTotal()はどうしたのでしょうか?ずっと
注文数-1、つまりOrdersTotal()-1が入っていることを知っていて、すべて動いていたのですが、プログラムを書き始めたら突然1つの注文がカウントされなくなりました。 OrdersTotal()を求めたら、3-1ではなくtotal orders = 3と出てきました。 どうしたのですか?ヘルプにあるループの通常の形 。



int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}
.

つまり、1次がゼロに等しい。

しかし、いや、実は1次が1なのだ。つまり、ゼロからではなく、1から探索を始めるべきだということか。
メタクォーターが何か悪いことをしたのか、私がバカなのか?

RELATED ORDERSとPOISONSがごちゃごちゃになってますね。参考文献を読む削除されたオーダーとポジションのどちらをカウントするのか、具体的に教えてください。そして、はい、何も変わっていません - 最初の要素のインデックスは '0' で始まります。


追加:例

例:ポジションと未決済注文の計算

How to start with MQL5
How to start with MQL5
  • 2020.03.12
  • www.mql5.com
This thread discusses MQL5 code examples. There will be examples of how to get data from indicators, how to program advisors...
 
Vladimir Karputov:

RELATED ORDERSとPOSITIONSがごちゃごちゃになっています。参考文献を読むより正確には、「退職者数」なのか「役職数」なのか、どちらでしょうか?そして、はい、何も変わっていません - 最初の要素のインデックスは '0' で始まります。


追加:例

例:ポジションと未決済注文の計算

MQL5ではなくMQL4のことです、保留と成行注文に違いはありません

 
Maksim Mihajlov:

MQL5ではなくMQL4のことです!保留と市場保留に分かれていません。

MQl5フォーラムに書き込んでいます。メインセクションに書き込んでいますね。MQL5フォーラムに投稿すると、MQL5に関する回答が得られます。

旧ターミナルに関するご質問は、特別セクション:MQL4とMetaTrader 4に お願いします。これからは、そこに書き込んでください。ご質問はそちらに転送させていただきます。

 

最初のバージョンでは、OrdersTotal()-1を使用して、ゼロから検索を開始しました - エラーが発生しました
. 2番目のバージョンでは、1から開始してOrdersTotal()全体を取得しました - 今回はエラーなし

スクリーンショットでは、OrdersTotal() OrdersTotal()-1ではなく 、実際の注文数を表示していることがわかります ...

問題は
、なぜOrdersTotal()が-1ではなく、実際の 注文 数を表示するのか、このようにあるべきなのか、それとも何か新しい ことがあるのかです。
なぜなら、この場合、ゼロからではなく、イチから探すべきだからです

ファイル:
4.png  181 kb
2.png  186 kb
 
Maksim Mihajlov:

最初のバージョンでは、OrdersTotal()-1を使用して、ゼロから検索を開始しました - エラーが発生しました
. 2番目のバージョンでは、1から開始して、OrdersTotal()全体を取得しました - 今回はエラーなし

スクリーンショットでは、OrdersTotal() OrdersTotal()-1ではなく 、実際の注文数を表示していることがわかります ...

問題は
、なぜOrdersTotal()が-1ではなく、実際の 注文 数を表示するのか、このようにあるべきなのか、それとも何か新しい ことがあるのかです。
なぜなら、この場合、ゼロからではなく、イチから探すべきだからです

自分の間違いがわかったような気がします、すみません・・・。

if (OrderSelect(i-1,SELECT_BY_POS)==true){}
鈍感ですみません、他のプログラムから文字列を取り出し、オフセットに注意を払いませんでした

 
こんにちは。インジケーターの修正に協力してほしい。指標の本質は以下の通りです。直前のバーに対する価格上昇の大きさを計算する。ゼロにはスターバーが必要です。つまり、始値は終値と同じです。コンパイル時はエラーなし、テスト時は80 20文字の行でエラーになります。ま た、信号線の引き方も間違って います。しかし、これがメインバッファの計算を誤らせる原因になっていると思うのです。修 正できるよう、よろしくお願いします。
//+------------------------------------------------------------------+
//|                                                         MSBB.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <MovingAverages.mqh>

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGreen
#property indicator_color2  clrRed
#property  indicator_width1  1
input int            InpMSBBPeriod=3;        // Period
input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA;  // Method
//--- indicator buffers
double         ExtMSBBBuffer[];
double         ExtTempBuffer[];
double         ExtPriceBuffer[];
double         ExtSignalBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- indicator buffers mapping
   IndicatorDigits(Digits-2);
//--- drawing settings
   IndicatorBuffers(4);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMSBBBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,ExtTempBuffer);
   SetIndexBuffer(2,ExtPriceBuffer);
   SetIndexDrawBegin(1,InpMSBBPeriod);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")");
   SetIndexLabel(0,"MSBB");
   SetIndexLabel(1,"Signal");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int    i;//limit;
//------
   if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2)
      return(0);
   /*//--- counting from 0 to rates_total
      ArraySetAsSeries(ExtMSBBBuffer,false);
      ArraySetAsSeries(ExtSignalBuffer,false);
      ArraySetAsSeries(open,false);
      ArraySetAsSeries(high,false);
      ArraySetAsSeries(low,false);
      ArraySetAsSeries(close,false);*/
//---
  // limit=rates_total-prev_calculated;
   //if(prev_calculated>0)
     // limit++;
//--- typical price and its moving average
   for(i=0; i<rates_total; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
      ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2);
      //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i];
      //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]);
      if(ExtTempBuffer[i]==0)
         ExtMSBBBuffer[i]=0.0;
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i] = 0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0)
        {
         double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2);
         if((price_open<0 && price_close>0)||(price_open>0 && price_close<0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open<0 && price_close<0)||(price_open>0 && price_close>0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0)
        {
         double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2);
         double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2);
         if((price_open>0 && price_close<0)||(price_open<0 && price_close>0))
            ExtMSBBBuffer[i]=0.0;
         if((price_open>0 && price_close>0)||(price_open<0 && price_close<0))
            ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open;
        }
      //--- signal line counted in the 2-nd buffer
      //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0);
      SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer);
      Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]);
      //--- done
     }
   /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0)
     {
      ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i];
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   if(ExtPriceBuffer[i]==0)
     {
      ExtMSBBBuffer[i] = 0.0;
      Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]);
     }
   }*/
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Линии индикаторов
  • www.mql5.com
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.