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

 

次のようなコードがあり、チャート上に入力ボックスが描かれ、"Take Profit "というテキストが中央に配置されています。

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Edit();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EditDel();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

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

//+------------------------------------------------------------------+ 
//| Создает объект "Поле ввода"                                      | 
//+------------------------------------------------------------------+ 
void EditCreate(ENUM_BASE_CORNER corner,string name,int x,int y,int width,int height,string text,
                int font_size,ENUM_ALIGN_MODE align,bool read_only,color back_clr)
  {
   long cid=ChartID();
   int subWind=0;
   string font="Consolas";
   color text_color=clrBlack;
   color border_clr=clrDimGray;
   bool back=false;
   bool selectable=false;
   bool selected=false;
   bool hidden=true;
   long zorder=0;
   if(ObjectFind(cid,name)==-1)
     {
      ObjectCreate(cid,name,OBJ_EDIT,subWind,0,0);
      ObjectSetInteger(cid,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(cid,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(cid,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(cid,name,OBJPROP_YSIZE,height);
      ObjectSetString(cid,name,OBJPROP_TEXT,text);
      ObjectSetString(cid,name,OBJPROP_FONT,font);
      ObjectSetInteger(cid,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(cid,name,OBJPROP_ALIGN,align);
      ObjectSetInteger(cid,name,OBJPROP_READONLY,read_only);
      ObjectSetInteger(cid,name,OBJPROP_CORNER,corner);
      ObjectSetInteger(cid,name,OBJPROP_COLOR,text_color);
      ObjectSetInteger(cid,name,OBJPROP_BGCOLOR,back_clr);
      ObjectSetInteger(cid,name,OBJPROP_BORDER_COLOR,border_clr);
      ObjectSetInteger(cid,name,OBJPROP_BACK,back);
      ObjectSetInteger(cid,name,OBJPROP_SELECTABLE,selectable);
      ObjectSetInteger(cid,name,OBJPROP_SELECTED,selected);
      ObjectSetInteger(cid,name,OBJPROP_HIDDEN,hidden);
      ObjectSetInteger(cid,name,OBJPROP_ZORDER,zorder);
      ChartRedraw(cid);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Edit()
  {
   long cid=ChartID();
   if(ObjectFind(cid,"edit tp")<0)
     {
      EditCreate(CORNER_LEFT_UPPER,"edit tp",50,50,150,20,"Take Profit",12,ALIGN_CENTER,true,clrBeige);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EditDel()
  {
   long cid=ChartID();
   ObjectDelete(cid,"edit tp");
  }
//+------------------------------------------------------------------+

リアルタイムで実行した場合、正常に動作します。

ストラテジーテスターでは、なぜかアライメントが左側になっています。


MT4では、コードはリアルタイムとストラテジーテスターの両方で正しく動作します。このような仕掛けはMT5でしか見られませんが...。

何が問題なのでしょうか?

 
Oleg Remizov:

次のようなコードがあり、チャート上に入力ボックスが描かれ、"Take Profit "というテキストが中央に配置されています。

リアルタイムで実行した場合、正常に動作します。

ストラテジーテスターでは、なぜかアライメントが左側になっています。


MT4では、コードはリアルタイムとストラテジーテスターの両方で正しく動作します。このような仕掛けはMT5でしか見られませんが...。

何が問題なのでしょうか?

MT5のテスターでは、すでにフォーラムで何度も紹介されていました。

 

皆さん、こんにちは。皆さん、キーボードボタンとマウスボタンの同時押しの処理についてアドバイスください。 例えば、ボタンを押すとオブジェクトが描画され、同じ+マウスの左ボタンを押すと別のオブジェクトが描 画されます。しかし、キーボードボタンとマウスボタンを押したときに、2つのオブジェクトが描画 されることが判明しています。

if(lparam==49)
 {
 ObjectCreate(0,"line",OBJ_TREND,0,time1,price1,time1+86400,price1);
 ChartRedraw(0);
 }
if(lparam==49 &&В MouseK==1)
 {
 ObjectCreate(0,"Marg",OBJ_LABEL,0,0,0);
 ObjectSetInteger(0,"Marg",OBJPROP_XDISTANCE,280); 
 ObjectSetInteger(0,"Marg",OBJPROP_YDISTANCE,20); 
 ChartRedraw(0);
 }  
 

以下の記事を参考に作業しています。

https://www.mql5.com/ru/articles/4149

で、コードの中にいくつか理解できないものがあるのですが、意味を説明してください。

1.なぜ ::(スコープ解決) 演算子が使われているのですか?

void OnStart()
  {
//---
   Test();
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Test                                                             |
//+------------------------------------------------------------------+
bool Test()
  {

   string pStream;
   string sources_filename="Websorce.txt";

   int hFile,iStringSize;

// read file contents 
   hFile=::FileOpen(sources_filename,FILE_TXT|FILE_READ|FILE_UNICODE);
   if(hFile==INVALID_HANDLE)
     {
      ::Print("error opening file "+sources_filename);
      return(false);
     }

   while(!::FileIsEnding(hFile))
     {


2. このコード行 "_errCode |= code" は何をするのですか?(この演算子はビット単位の「or」で、「_errCode =_errCode |code」と同じものですね)


class JSONParser {
    private:
        int _pos;
        ushort _in[];
        int _len;
        string _instr;
        int _errCode;
        string _errMsg;
      

        void setError(int code=1,string msg="unknown error") {
          string _str = NULL;
            _errCode |= code;
Создание пользовательской новостной ленты в MetaTrader 5
Создание пользовательской новостной ленты в MetaTrader 5
  • www.mql5.com
В терминале MetaTrader 5 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
こんにちは、テスターの手動取引 シミュレータとして使用することができるMT4用のベースのアドバイザーがあります。シミュレーターとしては悪くないと思います。質問なのですが、このようなトレーナーEAをマルチに作ることは可能でしょうか?MT4やMT5で使用できますか?
 
bahtiyar:
こんにちは、テスターの手動取引シミュレータとして使用することができるMT4用のベースのアドバイザーがあります。シミュレーターとしては悪くないと思います。質問なのですが、このようなトレーナーEAをマルチに作る ことは可能でしょうか?MT4かMT5か?

できます。MT5でも多通貨に対応していますが、一部制限があります。残念ながら、テスターはグラフィックを扱うことはできません。より正確には、グラフィカルオブジェクトを手動で編集することができません。

 
Alexey Viktorov:

できます。また、mt5では、多通貨に対応していますが、いくつかの制限があります。残念ながら、テスターはグラフィックを扱うことはできません。より正確には、グラフィカルオブジェクトを手動で編集することはできません。

Alexeyさん、お返事ありがとうございました!できることを答えていただきました。テスターを手動取引 シミュレーターとして使用するため、複数のタイムフレームを分析できるように可視化することは可能ですか? 可能な場合、一般的にどのようにすればよいですか7?
 
bahtiyar:
Alexeyさん、ありがとうございます。テスターを手動取引シミュレーターとして使用するため、複数のタイムフレームを分析できるように可視化することは可能ですか? 可能な場合、一般的にどのように行うことができますか7?

まさか

 
bahtiyar:
Alexeyさん、ありがとうございます。テスターを手動取引シミュレーターとして使用するため、複数のタイムフレームを可視化して分析することは可能でしょうか?
ヴィタリー・ムジチェンコ

まさか

まさか、MT4のみ。必要な深さまで履歴を見ることができるように、チャートを調整することができます。

MT5では、プログラムからアクセスされるすべてのシンボルとすべてのTF、およびコード内でインジケータが使用されている場合は、インジケータをロードします。

しかし、いずれにせよ、取引したくないように、チャートを「飛び越える」ための特別なインジケータが必要になります。あるいは、実物とあまり変わらないような速度にする必要があるでしょう。

 

メタエディタのコンフィグにあるOptimizeフラグは、プログラムの実行 速度をどの程度向上させるのに役立つのでしょうか?なんかテストが遅くて...。このOptimizeはどれくらいの効果があるのでしょうか?

残念ながら、CDictionaryオブジェクトにインスタンスを追加する際にクラッシュするため、使用することができません。

理由: