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

 
yiduwi:

ヘルプ、トレンドラインの最初の時間座標を 調べるにはどうしたらいいですか?

long  ObjectGetInteger( 
   long     chart_id,         // идентификатор графика 
   string   object_name,      // имя объекта 
   int      prop_id,          // идентификатор свойства 
   int      prop_modifier=0   // модификатор свойства, если требуется 
   );
 

変数と 配列をグローバルに 宣言し、変数からの値をすぐに配列に代入したいのですが、次のようなことができません。

int yo=6;
int masss[4]={0,0,yo,0};

また、関数でも同じで、引数に変数を代入すると失敗します

void Fulr(int ty=yo){}
 
Seric29:

変数と 配列をグローバルに 宣言し、変数からの値をすぐに配列に代入したいのですが、次のようなことができません。

また、関数でも同じで、引数に変数を代入すると失敗します

Документация по MQL5: Основы языка
Документация по MQL5: Основы языка
  • www.mql5.com
Язык MetaQuotes Language 5 (MQL5) является объектно-ориентированным языком программирования высокого уровня и предназначен для написания автоматических торговых стратегий, пользовательских технических индикаторов для анализа разнообразных финансовых рынков. Он позволяет не только писать разнообразные экспертные системы, предназначенные для...
 
Alekseu Fedotov:

ありがとうございます。

 
Artyom Trishkin:

どうやら普通に言うのは無理なようです。C++ではそれが可能です。mql4は記述子を介して動作するため、つまりメモリに直接アクセスできないため、すべての値にアドレスがあり、そのアドレスにアクセスすればそこに何があるかがわかるため、mql4が過度に静的になり、多くの可能性、特に配列での作業を制限しているのだと思います。

 

EAでタイマーを2つ作ることは可能ですか?なぜかOnTimer()は別スレッドで呼ばれると思っていました。しかし、OnInit()で無限ループを追加し、その前にタイマーをセット しようとしたところ、ループだけが動作し、OnTimer()は呼ばれませんでした。

タイマーで常に実行される2つの独立したアクションが必要です。それぞれ間隔がある。これはどのように実現できるのか、ご存じですか?

 
leonerd:

EAでタイマーを2つ作ることは可能ですか?なぜかOnTimer()は別スレッドで呼ばれると思っていました。しかし、OnInit()で無限ループを追加し、その前にタイマーをセット しようとしたところ、ループだけが動作し、OnTimer()は呼ばれませんでした。

タイマーで常に実行される2つの独立したアクションが必要です。それぞれ間隔がある。これはどのように実現できるのか、ご存じですか?

例:100まで数えて最初のコードを実行、150まで数えて2番目のコードを実行。でも、いい意味で、自分をマルチタイマー級にしたほうがいい。
 
Artyom Trishkin:

このスレッドでは、新しいMQL4でプログラミングを理解し、学び、MQL5に簡単に切り替えたいと考えている人たちの手助けを始めたいと思います - 言語は非常に似ています。

このブログでは、タスクやその解決方法、MTプログラミングに関する疑問などを議論していきます。

当フォーラムの他の経験豊富なメンバーにも議論に加わってもらい、誰もが興味を持つようなブランチになればと思います。

こんにちは。自習と実践のために、エキスパートアドバイザーの試用を書いています。インジケーターからのシグナルを 受信し、買いポジションと売りポジションをオープンする機能( Open_BUY_SELL() )を備えています。この関数は、CodeBaseに公開されているいくつかのスクリプトから作成したものです。

QUESTION - このスレッドで知識のある方に、このコードが煩雑でないかチェックしていただいてもよろしいでしょうか????

こういうところでは、特別な疑問や恐怖を感じます。

    m_trade         = new CTrade();
    m_symbol        = new CSymbolInfo();   
    m_position_info = new CPositionInfo();   
    m_account       = new CAccountInfo();
    
    m_symbol.Name(Symbol());
    m_symbol.RefreshRates();

関数の中に書くのが適切なのでしょうか?OnInit()に移動させる価値はあるのでしょうか?私は2つのスクリプトから関数を作りました、ファイルはポストに固定されています

CEngine        engine;
CTrade         trade;
CPositionInfo  apos;
CSymbolInfo    asymbol;

CTrade         *m_trade;
CSymbolInfo    *m_symbol;
CPositionInfo  *m_position_info; 
CAccountInfo   *m_account;

この場所も、私が正しく理解していれば、同じクラスのオブジェクトが互いに重複してしまうので、混乱します。インジケータを操作したときの宣言と、スクリプトを関数に作り直したときの宣言を残しているだけです。


まだ関数と信号をつないでいないので、まずはコードを理解し、きれいにしたいです。どこかでミスをしていることは理解しているのですが、どこをどう直せばいいのか、正確に理解するための知識と経験がまだ不足しているのです。

応援よろしくお願いします。

 

添付ファイル - EA、スクリプト2つ、インジケータ。

コンパイラは悪態をつかず、エラーを探すこともなく、ただ、そうしていいのか、そうでないならどうすればよかったのか、戦略的・戦術的な考察をします。

お願いします。

ファイル:
 
Artyom Trishkin:
しかし、良い意味で - クラスのマルチタイマーが作る必要があります。

単純な作業を複雑にすることはできないのです...と、新しいバー 定義機能を無造作にクラスでラップしたMeが言った ))))

をポイントに。

レオナール

1つのEAで2つのタイマーを作ることは可能ですか?なぜか、OnTimer()は別スレッドで呼ばれると思っていました。しかし、OnInit()で無限ループを追加し、その前にタイマーをセット しようとしたところ、ループだけが動作し、OnTimer()は呼ばれませんでした。

タイマーで常に実行される2つの独立したアクションが必要です。それぞれ間隔がある。これはどのように実現できるのか、ご存じですか?


#property strict
//--- input parameters
input int      Timer1=13;
input int      Timer2=21;
static int timer1=0,timer2=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if((timer1++)>Timer1) { timer1 = 0; Print("Timer №1"); }
   if((timer2++)>Timer2) { timer2 = 0; Print("Timer №2"); }
  }
//+------------------------------------------------------------------+