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

 
Pineapple88:

修正しました!すべてうまくいっているようです!)

OnInit関数に 2つのMAインジケータを転送しました。

OnInit関数でインジケータハンドルだけを作成し、その他の配列の操作はOnTick関数で行い、1tickごとにチェックするという理解でよろしいでしょうか。

はい、OnInitでインジケーターハンドルを作成しています。そして、それ以外の操作はOnTickで実装されています。

 
Vladimir Karputov:

はい、OnInitでインジケータハンドルが作成されます。そして、残りの作業はOnTickで実装されています。

了解です、ありがとうございます

 
MT5でEAを最適化することは、必要かつ有用なことです。しかし、ここで疑問が生じます。EA事業の収支を将来にわたって保証するための最適なパラメータは、どの期間なのでしょうか?最適化は毎月行う必要があるとされています。しかし、最適化は、少なくとも今後1ヶ月以内に預金が失われないことを保証するのでしょうか?
 
BORIS GOLICIN:
MT5でEAを最適化することは、必要かつ有用なことです。しかし、ここで疑問が生じます。将来的に損益分岐を保証するEAの最適な運用パラメータは、何時の時点のものなのでしょうか?最適化は毎月行わなければならないと考えられています。しかし、最適化は、少なくとも今後1ヶ月以内に預金が失われないことを保証するのでしょうか?

銀行業界への保証のため )

 
BORIS GOLICIN:
MT5でExpert Advisorを最適化することは有用かつ必要なことです。しかし、ここで疑問が生じます。専門家が将来的に損益分岐を保証するための最適なパラメータは、どの期間なのでしょうか?最適化は毎月行う必要があるとされています。しかし、最適化は、少なくとも今後1ヶ月以内に預金が失われないことを保証するのでしょうか?

私の意見では、最適化は無駄です。あくまで、ある期間にどれだけの損失を出し、どれだけの利益を出せたかを推定するのに適しています。さらに、市場の状況がいつ変わるかわからないため、せっかくの最適化が水の泡になってしまう。自動売買でストラテジーを長く機能させるためには、欲張らないことです。市場から最大限搾り取ろうとしないこと。証券会社がそれを許さない。

 

インターネット上で最適化について調べると、こんなことがわかりました。

2000年から2015年までの15年間(最低でも10年間)の歴史の塊があるとします。この作品を次のような時代に分けて考えています。2000~2003年がバックワードテストのチャンク、2003~2012年が最適化期間、2012~2015年がフォワードテストです。最適化の後、最も成功した10〜20セットを選び、通常のフォワードテストを行います。その後、選択したセットをバックワードテストで実行します。フォワードテストと同様の結果を得ることができるはずです。テストに合格したセットは、さらなる比較のために保存されます。そして、履歴の塊全体の残りのセットに対してテストを実行し、他のセットよりも良い結果を示したものを選択します。その結果、最適な設定が1セットになってしまうのです。
第一段階であるフォワードテストでは、どのようにセットを選択するのでしょうか。非常にシンプルに、現段階で最も重要なのは、バランスカーブの種類です。左下から右上に向かって一直線になるのが理想的です。とはいえ、ベストセットをずらりと並べても意味がなく、ほとんど同じようなものが多いのです。

 

皆さん、こんにちは。

ATR指標ハンドラにアクセスすると、最初の30秒間はおかしな値が表示されます。

何が原因かわからない?

int ATRdefinition = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ATRdefinition = iATR(_Symbol,_Period,14);
   if(ATRdefinition == INVALID_HANDLE)
     {
      Print("Ошибка создания Хендла");
     }

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   string signal = "";

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   double ATRarray[];
   ArraySetAsSeries(ATRarray,true);

   CopyBuffer(ATRdefinition,0,0,3,ATRarray);
   
   double ATRValue = NormalizeDouble(ATRarray[0],5);

   Print("ATRVALUE: ",ATRValue);
  }
ファイル:
ATR.png  51 kb
 
Pineapple88:

皆さん、ごきげんよう。

ATR指標ハンドラにアクセスすると、最初の30秒間はおかしな値が表示されます。

その理由は何でしょうか?

インジケーターの準備ができたかどうか確認していますか?

//--- determine the number of values calculated in the indicator 
   int calculated=BarsCalculated(handle); 

(ハンドルネームの代わりに自分のハンドルネームを入れる)

 

このデータ(402082)だけでは、インジケータを計算 できないことが判明したのですが?

BarsCalculated 関数は、計算するための十分なデータがない場合、エラー(-1)を与えるべきと考えました。

ファイル:
ATR2.png  21 kb
 
Pineapple88:

このデータ(402082)だけでは、インジケータを計算 できないことが判明したのですが?

BarsCalculated 関数は、計算するための十分なデータがない場合、エラー(-1)を与えるべきと考えました。

端末が履歴を汲み上げ続けているようで、それぞれ、インジケータが常に再計算されています。あるいは、別の選択肢として、ターミナルで、チャートに表示するバーの数を非常に多く設定し、コンピュータが非常に弱っている場合です。


追加されました。

MetaTrader 5 x64 build 2470で、「バーの表示」設定を100000にして、履歴を長くダウンロードした状態で確認しました。コードは完璧に動作しました。

理由: