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

 
Vasiliy Pushkaryov #:

6201バーの情報を表示

そこには何と書いてある?

printf((string)TerminalInfoInteger(TERMINAL_MAXBARS));
インジケータが正しく計算されるようにするためです。
 
MrBrooklin #:

フォーラムのメンバーからのヒントを考慮して、このバージョンのスクリプトを作成した:

ありがとう、ウラジミール。

スクリプトの中で非常に重要な点を一つ完全に見落としていました。それは、ロットを正規化する必要があったことです。これが修正版だ:

//+------------------------------------------------------------------+
//|                            Lot_Size_Depending_On_Risk_And_SL.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
input uint Risk=6;         // Размер риска (> 0, но не более 100 %)
input uint Stop_Loss=1000; // Размер стоп-лосса (> 0, но не более 4294967295)
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot_Size_Depending_On_Risk_And_SL()
  {
//--- блок проверки входных параметров на корректность
   if(Risk==0 || Risk>100 || Stop_Loss==0)
     {
      Print("<===== Введены не корректные размеры риска и/или стоп-лосса! =====>");
      return(0.0);
     }
//--- блок определения размера лота
   double trading_account_currency=SymbolInfoDouble(_Symbol,SYMBOL_POINT)*
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   double lot=NormalizeDouble((AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/
                              (Stop_Loss*trading_account_currency),2);
//--- блок проверки размера лота на минимум и максимум от возможного
   double min_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double max_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   if(lot<min_volume)
      lot=min_volume;
   if(lot>max_volume)
      lot=max_volume;
//--- блок расчёта минимального шага изменения объёма необходимого для заключения сделки
   double step_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   int ratio=(int)MathRound(lot/step_volume);
   if(MathAbs(ratio*step_volume-lot)>0.0000001)
      lot=ratio*step_volume;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(DoubleToString(Lot_Size_Depending_On_Risk_And_SL(),2));
  }
//+------------------------------------------------------------------+

ありがとう、ウラジミール。

 
こんにちは!
ロボットの フォワードテストを終了した後、持続的な問題に遭遇しました:最適なパラメータセットで単一テストを開始すると、ストラテジーテスターが実行を開始し、最後まで実行するように見えますが(プログレスインジケーターエンジンから判断)、その後ハングします。メタトレーダーを再起動する必要があり、単一テスト(およびフォワードテスト全体)の結果が失われます。
なぜハングアップするのでしょうか?
よろしくお願いします。
 
専門家の方、教えてください。プラットフォームの取引履歴を すべてのタイムフレームに反映させず、一部のタイムフレームにのみ反映させる設定方法を教えてください。
また、現在あるもの:「取引履歴を表示」チェックボックスをクリックすると、週足チャート上のすべての履歴(上下の矢印)がすでに強固なフェンスになっています。
また、他のツール(トレンドライン、矢印など)のように、すべてのタイムフレームに表示しないように設定できるものが欲しいです。
 

こんにちは。2つのMAの交点に基づくExpert Advisorの 最も簡単な例を どこで見ることができるか教えてください(レッスンを受けることができます)。
1つを追加する方法は知っています。
MQL4では質問がなかったのですが、MQL5ではやり方がよくわかりません。

 
makssub Expert Advisorの 最も簡単な例を どこで見ることができるか教えてください(レッスンを受けることができます)。
1つを追加する方法は知っています。
MQL4では質問がなかったのですが、MQL5ではやり方がよくわかりません。

MetaEDitor5を開いてください。2つのMAの交点に基づいたExpert Advisorが組み込まれています。コードを開いて勉強してください。あるいはCodeBaseで探してください。例えば、ここに2つのMAの交差に基づいた最初のEAが あります。

よろしく、ウラジミール。


 
MrBrooklin #:

MetaEDitor 5を開いてください。2つのMAの交点に基づいた(標準的な)Expert Advisorが組み込まれています。コードを開いて勉強してください。またはCodeBaseで検索してください。例えば、ここに2つのMAの交差に基づいた最初のEAが あります。

よろしく、ウラジミール。


ありがとうございます。

OnInitで起こることは理解できました。

どのようにOnTickに正しくねじ込むのでしょうか?

 
makssub #:

ーありがとう。

OnInitで、何が起こっているのか大体理解できました。

それをOnTickにねじ込むにはどうすればいいのでしょうか?

私はExpert Advisorの書き方の1つのバリエーションしか示して いないが、そのようなバリエーションは膨大な数になる。すべてはプログラマーの資質次第です。Expert Advisorの構造は次のようになります:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Input variables                                                  |
//+------------------------------------------------------------------+

// здесь размещаем входные параметры советника

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // здесь деинициализируем то, что считаем нужным   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- абстрактный пример советника

   Check_Trading();           // проверим условия разрешающие торговлю
   Signal_Up();               // ищем сигнал для открытия длинной позиции
   Open_Buy_Position();       // открываем длинную позицию
   Close_Buy_Positions();     // закрываем длинную позицию
   
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Check_Trading()
  {

   // здесь вставляем условия разрешающие торговлю

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  Signal_Up(); 
  {

   // здесь вставляем условия, при которых появляется сигнал на покупку

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Open_Buy_Position(); 
  {

   // здесь вставляем функцию открытия длинной позиции

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Close_Buy_Positions();
  {

   // здесь вставляем функцию закрытия длинной позиции

  }
//+------------------------------------------------------------------+

ーこんなーもう一度強調しておきますが、これはエキスパートアドバイザーの書き方のガイドではなく、私がエキスパートアドバイザーを書くときに守っているおおよその構造 です

ありがとう、ウラジミール。

 
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);

どう書いていいかわからない

 
Лауреат #:

どう書いていいかわからない

何がわからないのですか?EA初期化関数の作り方は?それなら、初心者向けのこの記事を 勉強してみてください。

それでは、ウラジミール。

理由: