初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 170

 
barabashkakvn:
インジケーターのコード、OnCalculate()関数を見てください。

以下を行うこと。

int limit=rates_total-prev_calculated;
   double pr=close[0];
   //----
   if(rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
      //----
   for(int i=limit-1;i>=0;i--)
     {
      CopyBuffer(ma1Handle,0,i,1,ma1Val);
      ExtMapBuffer1[i]=ma1Val[0]-pr;
     }
何もかもがうまくいかない。MQL4ではすべてがクリアになっています。私はMQL5をよく知りません。価格を取得するために、何らかの関数を呼び出す必要があるのではないでしょうか?
 
forexman77:

次のとおりです。

何もかもがうまくいかない。MQL4ではすべてがクリアになっています。MQL5をよく知らないのですが。もしかして、価格を知るためには、何らかの関数を呼び出す必要があるのでは?

OnInitに書き込む。

//--- установим индексацию для буфера как в таймсерии 
ArraySetAsSeries(ma1Val,true); 
 
forexman77:

次のとおりです。

何もかもがうまくいかない。MQL4ではすべてがクリアになっています。MQL5をよく知らないのですが。もしかして、価格を知るためには、何らかの関数を呼び出す必要があるのでは?

CopyRatesCopyBufferに 類似)を使用して価格履歴にアクセスすることができます。

現在のアスク、ビッド価格はSymbolInfoTick またはSymbolInfoDoubleSpread indicatorと 同様)を使用して取得することができます。

 
barabashkakvn:

OnInitに書き込む。

オートマティック・トレーディング
CopyRatesCopyBufferに 類似)を使用して、価格履歴にアクセスすることができます。アスク、ビッドの現在値は、SymbolInfoTickを 使用して取得できます。

何もかもがうまくいかない。これがすべてのコードです。

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_label1  "BUY TP"
input int Period_=34;
int ma1Handle;
double ma1Val[1];
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,Period_);
   ArraySetAsSeries(ExtMapBuffer1,true);
   ma1Handle=iMA(_Symbol,_Period,Period_,0,MODE_EMA,PRICE_CLOSE);
   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 limit=rates_total-prev_calculated;
   //----
   if(rates_total-prev_calculated>=Period_)
      limit=limit-Period_;
      //----
   for(int i=limit-1;i>=0;i--)
     {
       MqlTick latest_price;       // Будет использоваться для текущих котировок
      if(!SymbolInfoTick(_Symbol,latest_price))
          {
          Alert("Ошибка получения последних котировок - ошибка:",GetLastError(),"!!");return(0);
          }
      double iclose=latest_price.bid;
      CopyBuffer(ma1Handle,0,i,1,ma1Val);
      ExtMapBuffer1[i]=iclose - ma1Val[0];
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
forexman77:

何もかもがうまくいかない。これがすべてのコードです。

なぜダメなのか?私には効果的です。

インジケーターが効いていますね!?

ファイル:
test.mq5  3 kb
 
Вbarabashkakvn:

なぜダメなのか、わからない。私には効果的です。

ビジュアル的には、一見すると正しいように見えます。しかし、価格と移動平均の差を再計算すると、全く違う数字が出る。

EURUSD/1.36421-1.36168=0.00253 で確認したところ、インジケータは 0.00157 と表示されました。

 

こんにちは。

KimIVがMQL4 http://forum.mql4.com/ru/38949 で持っていたような、MQL5言語での 既成の関数コードはどこかないでしょうか?

Только "Полезные функции от KimIV". - MQL4 форум
  • www.mql5.com
Только "Полезные функции от KimIV". - MQL4 форум
 
forexman77:

ビジュアル的には、一見すると正しいように見えます。しかし、価格と移動平均の差を再計算してみると、全く違う数値が得られる。

EURUSD/1.36421-1.36168=0.00253 で確認したところ、インジケータは 0.00157 スクリーンショットを添付しました。

ああ、そうか、もっと正確に要望を伝える必要があるんだな。これで正しくカウントされるようになりました。
ファイル:
test.mq5  3 kb
 
abeiks:

こんにちは。

KimIVがMQL4 http://forum.mql4.com/ru/38949 で持っていたような、MQL5言語での 既成の関数コードはどこかないでしょうか?

mql5では関数コードではなく、オブジェクトライブラリが使用されています。関数は接続が難しいですが、OOPでは簡単です。必要なライブラリを接続し、オブジェクトを作成して、その中に必要なメソッドを取得します。これはアルゴリズム言語における関数と同じです。
 
シグナルを申し 込んだのですが、端末が起動していること、口座が開いていることが必要なのか教えてください。