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

 
Northwest:

1.すべて元に戻し、コンピュータを拷問しない ように。

申し訳ありませんが、それはできません。インジケータは左から右に数える必要があります。

迷惑をかけず、本来の用途で使っています。

2.iBandsOnArray, iStdDevOnArray は、配列に格納されたデータを用いて算出される

はい、bbMacd[]配列のデータを使って計算されていますね。

3.1ループで配列が埋まる

1では、それとも1では?

1つの配列を埋めるために、この配列が満たされる個人ループが必要だと言っているのでしょうか?

が満たされ、他の操作ができなくなるのでは?


なぜインジケータが遅くなるのか、その場所をどう計算するのかが重要なんです。

質問は増えるが、答えはない。

残念ながら、あなたは何の手がかりも示していない。

配列を使用して何かを構築する場合、既に存在する配列を使用して構築する必要があります。これは配列の準備の1サイクルと、この配列によるインジケータの描画の2サイクル目である。これは一般的なケースです。例えば、計算された1つのバーのみから値を返す関数を作成することができます。

//+------------------------------------------------------------------+
//| BandsOnArray                                                     |
//+------------------------------------------------------------------+
double BandsOnArray(const int rates_total,const int index,const int period,const double deviation_bb,const double &array[],const int line,const bool as_series=true)
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period-1 : index>=period-1);
   if(period<1 || !check_index)
      return 0;
   //--- calculate StdDev
   double dev=StdDevOnArray(rates_total,index,period,array);
   //--- base line
   double mid=0;              
   for(int i=0; i<period; i++)
      mid+=array[index+i];    
   mid/=period;               
   //--- upper line
   double top=mid+dev*deviation_bb;
   //--- lower line
   double btm=mid-dev*deviation_bb;
   return(line==UPPER_BAND ? top : line==LOWER_BAND ? btm : mid);
  }  
//+------------------------------------------------------------------+
//| StdDevOnArray                                                    |
//+------------------------------------------------------------------+
double StdDevOnArray(const int rates_total,const int index,const int period,const double &array[],const bool as_series=true)
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period-1 : index>=period-1);
   if(period<1 || !check_index)
      return 0;
//--- calculate value
   double avg=0;              
   for(int i=0; i<period; i++)
      avg+=array[index+i];    
   avg/=period;               
   double sd=0;
   for(int i=0; i<period; i++)
      sd+=(avg-array[index+i])*(avg-array[index+i]);
   return(sqrt(sd/period));
  }  
//+------------------------------------------------------------------+

ただし、StdDevOnArrayとBandsOnArrayはSimple-smoothingを 使用しており、Period smoothingの値と同じ充填データが必要なため、入力として既に用意されているデータ配列も必要である。

 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MQL4初心者のための質問、アルゴリズムやコードに関するヘルプとディスカッション

アルチョム・トリシキン さん 2018.11.18 20:21

PlotIndexSetInteger(0,PLOT_ARROW,140);

ただし、週数と同じ数のバッファを作成 する必要があります。そして、それぞれのバッファには、140から149までのアローコード(1,2,3,4,5,6,7,8,9,10)を与えなければならないのですが、10週で1年間分ですか?たった70日のことだ。それとも、どうしたかったのでしょうか?


SetIndexArrowをケースでオーバーライドすることは可能ですか?

せめてヒストグラムで数値を表示するとか?


トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MQL4初心者の質問、ヘルプ、アルゴリズムやコードに関するディスカッションなど何でもOK

アルチョム・トリシキン さん 2018.11.18 20:02

バッファには、1時間分の値が格納される。また、時分が0であればヒストグラムは描画されません。そこで、時間がゼロであるかどうかを確認し(設定でゼロ時間を検索するように設定しています)、ゼロであれば、時間の値(ゼロ)の代わりに0.1をバッファに入力する必要があります - ヒストグラムの列を表示するためです。これは、インジケータDigitsが0に設定 されているため、データウィンドウに0.1ではなく、0という値が表示されます。


今、わかりました、ありがとうございます。

 
psyman:

SetIndexArrowはケースで上書きできますか?

せめて棒グラフで数字を表示するとか?



今、わかりました、ありがとうございます。

バッファ 全体に一度に作用します。

ファウンドバーに週番号のアイコンを置いて、そこに1年の週番号を表示させる必要があります。Wingdingsでは、数字の矢印が明らかに欠けています。

オブジェクトテキストでターンアウトし、週番号の値でバーをマークすることは可能ですが、バッファのアイコンを32に設定します - 空文字です。値はバー上に表示されますが、表示されません。そして、値はその年の週番号にすることができ、オブジェクトには好きなことを書けば、そのオブジェクトは見つかったバーに表示されます。

 

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MQL4に関する初心者向けの質問、アルゴリズムやコードに関するヘルプやディスカッションなど

アルチョム・トリシキン さん 2018.11.19 10:50 AM

バッファ 全体に一度に作用します。

ファウンドバーに週番号のアイコ ンをつけて、そこに1年の週番号を表示させる必要があります。Wingdingsでは、数字の矢印が明らかに欠けています。

あなたは、オブジェクト-テキストを使用して、週の数の値を持つバーをマークすることによって得ることができますが、32を設定するバッファのためのアイコン - 空の文字。値はバー上に表示されますが、表示されません。そして、値はその年の週番号にすることができ、オブジェクトには好きなことを書けば、そのオブジェクトは見つかったバーに表示されます。


月、火、水という曜日を書きましたが、数字ではありません。チャートのマークは5種類でOKです。

 
psyman:

月、火、水という曜日を書きましたが、数字ではありません。チャートのマークは5種類あればいい。

そうすると、5つのバッファが必要で、それぞれに140から144までの異なるアローナンバーを割り当てることになりますね。

 
Artyom Trishkin:

配列を使用して何かを構築する場合、既に用意されている配列を使用して構築する必要があります。そして、これが配列の準備の1サイクルであり、この配列によるインジケータの描画の2サイクル目である。これは一般的なケースです。例えば、計算された1つのバーのみから値を返す関数を作成することができます。

ただし、StdDevOnArrayとBandsOnArrayはSimple-smoothingを 使用しており、Period smoothingの値と同じ充填データが必要なため、入力として既に用意されているデータ配列も必要である。

状況を明確にしていただき、ありがとうございます。
 

こんにちわ

手動で取引を確認/キャンセルするためのボタンが付いたポップアップウィンドウを作成するにはどうすればよいですか?

 
Andrey Sokolov:

こんにちわ

手動で取引を確認/キャンセルするためのボタンが付いたポップアップウィンドウを作成するにはどうすればよいですか?

メッセージボックス()
 

感謝

 

皆さん、こんにちは。

テスターのように最大ドローダウンの割合を求めるにはどうしたらよいですか?

以下はそのコードです。

double  MaxPeak,DD, MaxDD, DD2, MaxDD2;
--------------------------------------
--------------------------------------
это вывод:

 SM("Maximal drawdown        : " + DoubleToString(MaxDrawdown_Money(), 2)+ " (" + DoubleToString(MaxDrawdown_Protsent(), 2) +" %)");

-------------------------------------
-------------------------------------

//--------------------Рассчет % относительной просадки----------
double MaxDrawdown_Protsent()
{
if (AccountEquity() > MaxPeak)
{
MaxPeak = AccountEquity();
}
if (AccountEquity() < MaxPeak)
{
DD2 = NormalizeDouble((MaxPeak - AccountEquity())/MaxPeak*100,2);
}
if (MaxDD2< DD2)
{
MaxDD2 = DD2;
}
return (MaxDD2);
}
//---------------------Рассчет суммы максимальной просадки--------
double MaxDrawdown_Money()
{
if (AccountEquity() > MaxPeak)
{
MaxPeak = AccountEquity();
}
if (AccountEquity() < MaxPeak)
{
DD = NormalizeDouble(MaxPeak - AccountEquity(),2);
}
if (MaxDD< DD)
{
MaxDD = DD;
}
return (MaxDD);
}

最大ドローダウンの量はテスターと同じ、相対ドローダウンの割合もテスターと同じです。

テスターの ように最大ドローダウンのパーセンテージを得るにはどうしたらいいですか?