KimIVの便利な機能

 

このスレッドでは、私がMQL4で作成した関数のコードを掲載し、その使用例を示し、その使用に関する質問に回答していきます。各機能は2回に分けて掲載する予定です。最初の投稿には機能コード、2番目の投稿には使用例と短い説明が含まれます。実際に機能をテストして結果を表示するために、2番目の投稿にスクリプトのコードを添付することもあります。

トピック「2つのEAを 同時に動かす方法」のLukyanovさんの ご要望通り、注文を処理する機能については、最後にご紹介します。

一つ目は、注文設定機能(MT4テスター版)とします。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Установка ордера. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  color clOpen;
  int   err, ticket;
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clOpen);
  if (ticket<0) {
    err=GetLastError();
    Print("Error(",err,") set ",GetNameOP(op),": ",ErrorDescription(err));
    Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll,
          " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
  }
}
//+----------------------------------------------------------------------------+
 
リアルトレードのための機能は公開されるのでしょうか? 追伸:トピックをありがとうございます。とても人気があり、需要があると思います。
 
イゴールさん、こんにちは
私はその考えを支持します。正しい判断......!!!
あなたのコードは巨大で、質問も頻繁に発生しますし、他の人の投稿や他のトピックであなたに言及するのはよくありません。
 

素晴らしい。

開発者への提案:関数のライブラリーを作り始めてください。そのためには、コミュニティに対して設計要件変数の記述の 義務化、使用制限の規定、1文字あたりの文字数など)を提示することが望ましいと私は考えています。MQの記事があってもいいのでは?

そのうち、単純な機能だけでなく、複雑な機能もライブラリに登場することでしょう。

 
Lukyanov:
リアルトレードのための機能は公開されるのでしょうか?

はい、そうなりますね...。次は、オンライントレード用のSetOrder()関数です...


SetOrder()関数の使用例です。

1.0.1ロット、現在値より50ピップス下のBuyLimit注文を設定します。

SetOrder(NULL, OP_BUYLIMIT, 0.1, Ask-50*Point);

2.ロット0.3のBuyStop注文を現在値より36pips上に設定し、32pipsのストップを設定する。

SetOrder(NULL, OP_BUYSTOP, 0.3, Ask+36*Point, Ask+(36-32)*Point);

3.ロット0.2により、現在値より42ピップス上、50ピップスの持ち越しでSellLimit注文を出す。

SetOrder(NULL, OP_SELLLIMIT, 0.2, Bid+42*Point, 0, Bid+(42-50)*Point);

4.現在値から100pips下のロット0.5でSellStop注文を出し、ストップ30pips、テイクアウェイ70pipsで注文する。

SetOrder(NULL, OP_SELLSTOP, 0.5, Bid-100*Point, Bid-(100-30)*Point, Bid-(100+70)*Point);

5.ロット0.1のBuyLimit注文が現在値より50ピップ下、マジックナンバー123456、有効期限 は2時間です。

SetOrder(NULL, OP_BUYLIMIT, 0.1, Ask-50*Point, 0, 0, 123456, TimeCurrent()+2*60*60);
予告編は、上記のような例のある実写の台本です。最初の4つの例はコメントアウトされています。
ファイル:
 
VBAG:
イゴールさん、こんにちは
私はその考えを支持します。正しい判断......!!!
あなたのコードは巨大で、質問も頻繁に発生しますし、他の人の投稿や他のトピックであなたに言及するのはよくありません。
さて、ここで話があります。ご質問をいただければ、喜んでお答えします。)
 
貿易取引間の遅延についてのあなたのバージョンを表示します。
ありがとうございます。
 
焦げパイくらいですが、それでももしかしたら誰かが大量データセットからμlで備蓄・サンプリングする問題に直面したことがあるのかもしれませんね、有益なトピックをありがとうございます。µlとデータベース?その方向で考えた人はいますか?
 
zhuki писал (а):
取引間の遅延のバージョンを表示する

私は、トレードの間に一切の遅れを作らない。つまり、2つ以上の注文を出す必要がある場合、これらの取引操作を間髪入れずに行うのです。しかし、サーバーへの問い合わせでエラーが発生した場合、取引を繰り返す必要があるため、MT4開発者の推奨に従って、取引の合間に一時停止をしています。例えば、私のオンライントレード用のSetOrder() 関数では、このようなポーズがどのように実装されているかを見ることができます。取引サーバーから返されるエラーによって、異なるポーズが取られます。

この関数SetOrder() は、保留中の注文を設定するために使用されます。デモ口座やライブ口座でのオンライン取引での利用を推奨します。

ファイル:
 
非常に独創的ですが、なぜ7.7秒、17秒、11秒の遅延があるのか説明してください。また、Expert Advisorが複数ある場合はどうするのか、その解析が必要です。
 
zhuki:
...なぜ7.7,17,11秒の遅延が発生するのか説明してください。これは冗談なのか、それとも正当なのか。

リアルマネーでどんなジョークが飛び出すか?

エラー129(買値または売値が正しくない)、130(ストップが正しくない)、134(資金が足りない)、136(価格がない)は7.7秒間の一時停止となります。MT4開発者はこのような場合、5秒以上のポーズを推奨して います。7.7秒とした。6.1秒を出した方が良かったかもしれない。丸い値は魅力的で好きではないので、非丸い値を設定しています。

17秒の休止は、エラー145(修正禁止)のためと思われます。しかし、SetOrder 関数は修正を扱わないので、このエラーの処理を削除しました。私の機能のこのような側面に目を向けていただき、ありがとうございます

11秒間の休止は、貿易サブシステムの状態をチェックするループの中にあります。15秒または30秒に設定することができます。好き嫌いは関係ない。

zhuki さん
また、Expert Advisorが複数ある場合、解析なしではやっていけないのですが、どうしたらいいのでしょうか。

1つの取引口座に複数のExpert Advisorがある場合、エラー146(取引サブシステムがビジー状態)が処理されます。関数SetOrderは、取引サブシステムが空くまで待機する。


警告!前 の投稿を編集しました。SetOrder 関数を変更しました。

理由: