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

 
Artyom Trishkin:
これは単純なソフトウェアの制限であり、EA設定ウィンドウのデフォルト設定とは関係ありません。これらの設定はEA設定に 属し、EA自体で制御されています。

ありがとうございました)どのように実装されているのか理解できました。

 
Alexandr Sokolov:
TPやSLに到達したときの損益値をコードで取得する方法は?

例えば、AccountFreeMarginCheck()という関数があり、この関数でマージンを取得 することができます。また、少なくとも指定したシンボル、出来高、注文種別に対してポイント値を決定する機能はない

MQL4

https://www.mql5.com/ru/forum/131859/page3

ここにはたくさんの機能があります。 もしかしたら、自分で何かを直せばうまくいくかもしれません。

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

また、TFグラフを推定する際の再計算機能はどのように設定すればよいのでしょうか。

 
Lomonosov1991:

また、TFグラフを推定する際の再計算機能はどのように設定すればよいのでしょうか。

ドキュメントが あります。たまに覗くことは可能です。UninitializeReason() という関数があり、初期化解除の理由をコードで返します。といった例まであります。

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
//| get text description                                             | //| Expert deinitialization function                                 |
 

こんばんは。友人の依頼で、MT5標準のストキャスティックインジケーター Stoch_HISTOGRAM_MQL5_3を改造したものを作りました。

このバージョンでは、インジケータを棒グラフで表示します。友人は、50以上のバーを緑に、50以下のバーを赤にするよう依頼しました。

バーグラフはなんとか扱えるけど、色の変え方がわからなくて、頭が真っ白になったよ。ヘルプアドバイスplz.

以下にコードを貼り付けて、ファイルを添付します。

//+------------------------------------------------------------------+
//|                                       Stoch_HISTOGRAM_MQL5_3.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009-2017, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_type3   DRAW_HISTOGRAM2
#property indicator_type4   DRAW_HISTOGRAM2
#property indicator_color1  LightSeaGreen
#property indicator_color2  Blue
#property indicator_color3  Green
#property indicator_style2  STYLE_DOT
#property indicator_style3  STYLE_SOLID
//--- input parameters
input int InpKPeriod=5;  // K period
input int InpDPeriod=3;  // D period
input int InpSlowing=3;  // Slowing
//--- indicator buffers
double    ExtMainBuffer[];
double    ExtSignalBuffer[];
double    HISTOGRAM2_1[];
double    HISTOGRAM2_2[];
double    ExtHighesBuffer[];
double    ExtLowesBuffer[];
color     colors[]={clrRed,clrGreen};
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtMainBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,HISTOGRAM2_1,INDICATOR_DATA);
   SetIndexBuffer(3,HISTOGRAM2_2,INDICATOR_DATA);
   SetIndexBuffer(4,ExtHighesBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(5,ExtLowesBuffer,INDICATOR_CALCULATIONS);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- set levels
   IndicatorSetInteger(INDICATOR_LEVELS,3);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,50);
   IndicatorSetDouble(INDICATOR_LEVELVALUE,2,80);
////--- установим пустое значение для HISTOGRAM2
//   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);   
//--- set maximum and minimum for subwindow 
   IndicatorSetDouble(INDICATOR_MINIMUM,0);
   IndicatorSetDouble(INDICATOR_MAXIMUM,100);
//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"Stoch_HISTOGRAM("+(string)InpKPeriod+","+(string)InpDPeriod+","+(string)InpSlowing+")");
   PlotIndexSetString(0,PLOT_LABEL,"Main");
   PlotIndexSetString(1,PLOT_LABEL,"Signal");
   PlotIndexSetString(2,PLOT_LABEL,"UP");
   PlotIndexSetString(3,PLOT_LABEL,"LOW");
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpKPeriod+InpDPeriod);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
   PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,InpKPeriod+InpSlowing-2);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Stochastic Oscillator                                            |
//+------------------------------------------------------------------+
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,k,start;
//--- check for bars count
   if(rates_total<=InpKPeriod+InpDPeriod+InpSlowing)
      return(0);
//---
   start=InpKPeriod-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++)
        {
         ExtLowesBuffer[i]=0.0;
         ExtHighesBuffer[i]=0.0;
        }
     }
//--- calculate HighesBuffer[] and ExtHighesBuffer[]
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double dmin=1000000.0;
      double dmax=-1000000.0;
      for(k=i-InpKPeriod+1;k<=i;k++)
        {
         if(dmin>low[k])  dmin=low[k];
         if(dmax<high[k]) dmax=high[k];
        }
      ExtLowesBuffer[i]=dmin;
      ExtHighesBuffer[i]=dmax;
     }
//--- %K
   start=InpKPeriod-1+InpSlowing-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++) ExtMainBuffer[i]=0.0;
     }
//--- main cycle
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double sumlow=0.0;
      double sumhigh=0.0;
      for(k=(i-InpSlowing+1);k<=i;k++)
        {
         sumlow +=(close[k]-ExtLowesBuffer[k]);
         sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
        }
      if(sumhigh==0.0) ExtMainBuffer[i]=100.0;
         else          ExtMainBuffer[i]=sumlow/sumhigh*100;
      if(ExtMainBuffer[i]>50){
         HISTOGRAM2_1[i]=50; 
         HISTOGRAM2_2[i]=ExtMainBuffer[i]; 
         //colors[i]=clrGreen;
         //PlotIndexSetInteger(2,PLOT_LINE_COLOR,clrGreen);
         } 
      if(ExtMainBuffer[i]<50){
         HISTOGRAM2_1[i]=ExtMainBuffer[i]; 
         HISTOGRAM2_2[i]=50; 
         //colors[i]=clrRed;
         //PlotIndexSetInteger(2,PLOT_LINE_COLOR,clrRed);
         } 
      //PlotIndexSetInteger(2,PLOT_LINE_COLOR,colors[i]);
     }
//--- signal
   start=InpDPeriod-1;
   if(start+1<prev_calculated) start=prev_calculated-2;
   else
     {
      for(i=0;i<start;i++) ExtSignalBuffer[i]=0.0;
     }
   for(i=start;i<rates_total && !IsStopped();i++)
     {
      double sum=0.0;
      for(k=0;k<InpDPeriod;k++) sum+=ExtMainBuffer[i-k];
      ExtSignalBuffer[i]=sum/InpDPeriod;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
ファイル:
 
Sergey Voytsekhovsky:

こんばんは。友人の依頼で、MT5標準のストキャスティックインジケーター Stoch_HISTOGRAM_MQL5_3を改造したものを作りました。

このバージョンでは、インジケータを棒グラフで表示します。友人は、50以上のバーを緑に、50以下のバーを赤にするよう依頼しました。

バーグラフはなんとか扱えるけど、色の変え方がわからなくて、頭が真っ白になったよ。アドバイスで助けてください。

以下にコードを貼り付けて、ファイルを添付します。

とにかくすごいんです。ドキュメントを読んで、DRAW_HISTOGRAM2が表示され、DRAW_COLOR_HISTOGRAM2が表示されないのはなぜでしょうか?

あ、あとバッファが余分に宣言されています。
 
Alexey Viktorov:

とにかくすごいんです。ドキュメントを読んで、DRAW_HISTOGRAM2が表示され、DRAW_COLOR_HISTOGRAM2が表示されないのはなぜでしょうか?

あ、あとバッファは冗長です。

コメントありがとうございます。先生やメンター、経験豊富な仲間などがいないときに、霧の中にいるように感覚で方法や解決策を探していると、文書を読んでいても、どれだけ気づかないことがあるかわからないものです。どうもありがとうございます、すでにDRAW_COLOR_HISTOGRAM2が見つかりました、意味がわかりました、これから作り直します。

エクストラバッファーについて詳しく教えてください。経験は多いに越したことはないが、バッファは多いに越したことはない。:-0

 
Sergey Voytsekhovsky:

コメントありがとうございます。先生やメンター、経験豊富な仲間などがいないときに、霧の中にいるように感覚で方法や解決策を探していると、文書を読んでいても、どれだけ気づかないことがあるかわからないものです。どうもありがとうございます、すでにDRAW_COLOR_HISTOGRAM2が見つかりました、意味がわかりました、これから作り直します。

エクストラバッファーについて詳しく教えてください。経験は多いに越したことはないが、バッファは多いに越したことはない。:-0

まあ...ストキャスが2つのバッファを持っている場合、もし私がすべてのメモリチップを焼き切っていなければ。正確には、そのうちの2つがそうです。したがって、ヒストグラム表示に置き換えて、それだけを保存する必要があります。実際、2つのプロット DRAW_COLOR_HISTOGRAM2 は6つのバッファを必要とします。しかし、数字とは言ったものの、このセリフのことです。

#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_LINE
#property indicator_type3   DRAW_HISTOGRAM2
#property indicator_type4   DRAW_HISTOGRAM2

私見では、こうあるべきだと思います。

#property indicator_buffers 5
#property indicator_plots   2
#property indicator_type1   DRAW_COLOR_HISTOGRAM2 // основная 
#property indicator_type2   DRAW_LINE             // сигнальная
#property indicator_color1  clrGreen,clrRed       // цвет гистограмм
#property indicator_color2  clrBlue               // цвет линии
 

皆さん、こんにちは。
知っていればヒントがある。

緑色(Vigor=0.1154)が赤色(Signal=0.1133)の近くを越えてもいないのに、売られているのがわかります。そして、それは孤立した事例ではありません。

もうひとつご紹介しましょう。

ここでは「統合」されているが、Vigor=0.0543、Signal=0.0525のままである。

どこもかしこも「プロノーマライズ」されている。

この条件のコード: && RVI_S >0 && RVI_S_M < RVI_S && RVI_S_M1 > RVI_S_S1

RVI_S_S(シグナル・レッド)、RVI_S_M(ヴィガー・グリーン)。

どなたか価値あるご意見をお持ちの方がいらっしゃいましたら、ぜひお願いします。

 
KrasAleks:

皆さん、こんにちは。
知っていればヒントがある。

緑色(Vigor=0.1154)が赤色(Signal=0.1133)の近くを越えてもいないのに、売られているのがわかります。そして、それは孤立した事例ではありません。

もうひとつご紹介しましょう。

ここでは「統合」されているが、Vigor=0.0543、Signal=0.0525のままである。

どこもかしこも「プロノーマライズ」されている。

この条件のコード: && RVI_S >0 && RVI_S_M < RVI_S && RVI_S_M1 > RVI_S_S1

RVI_S_S(シグナル・レッド)、RVI_S_M(ヴィガー・グリーン)。

どなたか価値あるご意見をお持ちの方がいらっしゃいましたら、ぜひお願いします。

掛け合わせはあったのでしょうが、描き直されました。
ローソク足が閉じた後にシグナルを確認します。