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

 

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

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

ドミトリー・カストゥーロフ, 2020.08.27 13:10

ごあいさつ

MT4で次のようなことをやっています。

#import "user32.dll"
   int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   char buf[];
   StringToCharArray("MetaTrader4_Internal_Message", buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print(MT4InternalMsg);
   bool res=SendMessageA((int)handle, MT4InternalMsg, 14, buf);
   Print("Функция SendMessageA завершила работу с результатом: ",res);
  }

このコードは、特定のEAを起動するためのコマンドをターミナルウィンドウに送信します。

MT5で同様の機能はありますか?

こんな感じでやってみました。

#import "user32.dll"
   int SendMessageA(long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   uchar buf[];
   StringToCharArray("MetaTrader5_Internal_Message", buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print("Window handle: ", handle);
   Print("Message: ",MT5InternalMsg);
   for(int i = 0; i<100; i++){
      bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
      printf("Функция SendMessageA завершила работу с результатом: %d, номер: %d ",res, i);
   }
  }

動作しない。

spy++をスキャンしてみましたが、MT5ではMT4と違ってメッセージが出ません。

Expert Advisorの設定画面を正確に開きたいのですが、どうすればいいですか?


WinAPIでスクリプトを実行できるようにしたいのですが。5の解決策はあるのでしょうか?

 
おい、みんな、助けてくれ!機能が思い浮かばない。Expert Advisor は、1 日(00:00~23:59)に 1 つのポジションを開く、つまり 1 日 1 回の注文を行います。課題は、連続した損失を求め、ログに表示することです(Print()というコマンドを使い、一度だけ表示します)。シリーズの要素数をキーボードから入力する(例えば、キーボードから5を入力し、4敗日のシリーズがあった場合、それを無視する→5敗日以上の発生を待つ)。負けが連続している場合、または注文が1日で決済される場合(1日1回オープンされ、成行注文は1日以上「掛かる」ことがある)、シリーズとみなされる。例えば、ログには01.05, 02.05, 03.05, 04.05, 05.05という損失系列が存在するはずです。重要な条件:キーボードから入力された値(extern)以上のシリーズを認識(結果的にログに出力)する。
//
個人的には以下のような考えを持っています:
1.Fiyaは、負け注文の配列にその終値(Mass[i] = OrderCloseTime();)を記入します。すなわち、配列には負け注文の終値日時のみが格納されて います
2. i の位置と i-1 の位置(隣接する 2 つ)の要素の比較を開始 します
2.1 セルデータを日数に変換して比較します( TimeDayOfYear(Mass[i]) and TimeDayOfYear(Mass[i-1])
2. 2)。(最初の負けた日 = 178、前の負けた日 = 176 とすると、連続しないので連続しない。それぞれ最初の = 178、次の = 177 とすると連続する)
2.3 for ループで、配列のすべてのセルを見て、その近傍を比較 します。配列の隣り合う要素で連敗している場合→1.連敗と みなすために必要な最低日数に達しないまで圧縮を開始 する。2.(
2.4 THE SERIES STOP --> 終了した配列要素のインデックスを記憶し、直列の要素数を記憶する (直列はキーボードから入力した値より == または大きくなる)
3.----ここから実現のための問題が始まる---
3.1 失われた日のシリーズを何らかの方法で「さかのぼり」、各要素の日付を知り、 日付をdatetimeから文字列に変換し、
3.11 文字列を埋め(よくわからないが、たぶんStringAdd()を通じて?)、 LOGファイルに出力(100万回ではなく1回だけ)

顧問のアルゴリズムは重要ではない、重要なのはユーザ関数

Christ help me!)
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
ファイル:
 

こんにちは。
アルゴリズムに関するアドバイスが必要です。
私は、未決済注文のブロックを処理する前に、次の要件を形成しようとしています。

すでに売買注文が あり、最後の注文の始値が現在値よりXポイント少ない場合、ブロック/未決済注文を無視します。

アドバイスお願いします - コードに実装するためのオプションは何ですか?

 

mt5でポジションを建てる ための注文が送られてから実際に表示されるまでの時間を計測された方はいらっしゃいますか?

注文が送信され、トレードがアドバイスされた場合、注文が送信されてからトレードが表示されるまで、どのくらい時間がかかるのでしょうか?

 
Сергей Таболин:

k = {1,2,4,8,16,......}

cn = k[c] です。

ファニーソリューション))))

 
Vladimir Baskakov:
MQは、モバイルプラットフォームへのカスタムインジケータの 追加を計画していますか?

新しい携帯端末での対応から判断すると、近い将来はないでしょう。ペンのみ。

 
Valeriy Yastremskiy:

ファンシー・ソリューション))))

さて、あらかじめ係数がわかっているのなら、なぜ計算するのでしょうか?)))

 
Сергей Таболин:

さて、あらかじめ係数がわかっているのなら、なぜ計算するのでしょうか?)))

計算したほうが普遍性がある。

 

同僚、すべての人に良い一日 - 直感的に私は解決策を理解し、私はあなたから聞きたいと思います。

その後のクロージングのためにロットの一部を割り当てるには、どのような方法が最適でしょうか。

私の理解では、例えば、ロット2.58。5で割った結果は、4つのパートを閉じるために0.51ロット、5番目のパートは0.54ロットです。

これをコードで表現するには、どのような方法があるのでしょうか?除算の余りを 0.54でクローズする数学関数は?

 
Roman Shiredchenko:

同僚、すべての人に良い一日 - 直感的に私は解決策を理解し、私はあなたから聞きたいと思います。

ロットの一部をその後のクロージングに割り当てるには、どのような方法が最適でしょうか。

私の理解では、例えば、ロット2.58。5で割った結果は、4つのパートを閉じるために0.51ロット、5番目のパートは0.54ロットです。

これをコードで表現するには、どのような方法があるのでしょうか? 除算の余りを 0.54で閉じるには、どのような関数が 必要でしょうか?

ドキュメントを読むことはできますか?