KimIVの便利な機能 - ページ 114

 

こんにちは。

プログラミングはまだ初心者なので、どなたかヒントをください。

質問です。1つ以上の未決済注文があり、それらが$20の利益で決済されることが分かっています。

私たちは、注文が20ドルの利益で終了する価格を知る必要があります。

オープンロットの総量を計算し、そして!

どうすればいいのか、アドバイスをお願いします。

もしかして、レディ機能ってあるんですか?

ありがとうございました。

 
KimIV:

DistMarketAndPos()の使用例です。

なぜ、最寄りの位置から市場までの距離を判断する機能が必要なのでしょうか?基本的な選択肢は、少なくとも4つあると思います。

  1. 購入または売却した。市場は我々の方向に動いた。そして、ある程度の距離をおいて、既存のポジションが利益を得たら、すぐに入金して、同じ方向に再度エントリーします。
  2. 買ったり売ったりします。マーケットは私たちの方向へ向かっていった。一定の距離を移動し、既存のポジションが一定の利益を得ると、すぐに「これだ!」と実感します。逆転は近い!フリップの時間です。現在のポジションをクローズし、反対方向にオープンします。
  3. 買ったり売ったりします。市場は私たちに敵対しているのです。しかし、なぜか正しいと確信し、一番近いエントリーポイントからある程度離れたところ、つまりある程度の損切りのところで、平均して同じ方向に開いてしまうのです。
  4. 買ったり売ったりします。市場は私たちに逆行している。そして、私たちは、市場への参入を誤ったことに気づきました。そのため、ある程度の損切りを固定し、反対方向に開くようにしています。

これらのオプションのうち、特定の実装が必要な場合は、ここに要望を書き込んでください。私は、上記の枠内ですべての要望を実現します。

DistMarketAndPos()関数で実験するためのテンプレートを添付します。


KimIVさん、 こんにちは!機能はとても良く、動作します。

     int start()

{

      if (DistMarketAndPos()>150)

{                                     

      OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,Ask+150*Point);

   }     

      return(0);

   }

int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1) {

  double d, p;

  int i, k=OrdersTotal(), r=1000000;


  if (sy=="" || sy=="0") sy=Symbol();

  p=MarketInfo(sy, MODE_POINT);

  if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;

  for (i=0; i<k; i++) {

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {

        if (mn<0 || OrderMagicNumber()==mn) {

          if (OrderType()==OP_BUY) {

            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

            if (r>d) r=NormalizeDouble(d, 0);

          }

          if (OrderType()==OP_SELL) {

            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

            if (r>d) r=NormalizeDouble(d, 0);

          }

        }

      }

    }

  }

return (r);

}  


 

私のために反転してください。みんなは間違っていると言いますが、うまくいきますよ。
 
新参者の方は専用スレッドで 質問してください。
 

Message()関数の新バージョン。


Message() 関数は、本誌 掲載後に2つの変更を受けました。最初の変更点は、Print() によるExpertログへの出力を無効にすることと、一連の類似メッセージのうち最初のメッセージのみを出力する機能を追加したことです。2つ目の変更点は、既存のComment()Print() 関数に加え、Alert()SendMail()SendNotification() を使用することで、出力方向を追加したことです。私が発表するのは後者の変化です。

Message() 関数は、テキストメッセージを異なる方向から出力するように設計されています。デバッグ目的だけでなく、現在の取引状況の説明、プログラム操作の記録、重要な変更をトレーダーにタイムリーに知らせるなど、既製のアプリケーションでも使用できます。この関数は3つのパラメータを受け取り、そのうちの最後の2つはオプションである。
  • ms- 文字列,出力されるテキストメッセージ,送信.
  • nv- メッセージの出力方向を指定するフラグの文字列.5つの旗は、5つの重要な場所です。フラグ面を0にすると特定の出力方向がONになり、1にするとOFFになります。左から順に、Alert、Comment、Print、SendMail、SendNotificationとなります。初期値は "01100 "で、コメントとプリントは有効、その他は無効です。
  • am- 論理的、True- すべてのメッセージを出力、False- 一連の同一のメッセージから最初のものだけを出力。デフォルトはFalse である。

AlertとPrintの出力方向(スペース1、3)については、メッセージを一行ずつ出力できることに留意する必要があります。つまり、メッセージテキストに改行がある場合、つまり制御文字「 \n 」がある場合は、各行が独立して印刷されます。添付ファイルのテストスクリプトを試してみてください。)

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.03.2013                                                     |
//|  Описание : Вывод текстового сообщения.                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ms - текст сообщения                                                    |
//|    nv - флаги направлений вывода сообщения:   (0-выкл, 1-вкл)              |
//|           Alert, Comment, Print, SendMail, SendNotification                |
//|    am - флаг всех повторяющихся сообщений                                  |
//+----------------------------------------------------------------------------+
void Message(string ms, string nv="01100", bool am=False) {
  static string prevMessage="";
  string as[];
  int    i, k;

  if (StrToInteger(StringSubstr(nv, 1, 1))==1) Comment(ms);
  if ((StringLen(ms)>0) && (am || prevMessage!=ms)) {
    if (StrToInteger(StringSubstr(nv, 0, 1))==1) {
      k=StrSplit(ms, as, "\n");
      for (i=0; i<k; i++) Alert(as[i]);
    }
    if (StrToInteger(StringSubstr(nv, 2, 1))==1) {
      k=StrSplit(ms, as, "\n");
      for (i=0; i<k; i++) Print(as[i]);
    }
    if (StrToInteger(StringSubstr(nv, 3, 1))==1) SendMail(WindowExpertName(), ms);
    if (StrToInteger(StringSubstr(nv, 4, 1))==1) SendNotification(ms);
    prevMessage=ms;
  }
}

SZYさん、Message()関数をテストするスクリプトを添付します。

ファイル:
 
KimIV:

Message()関数の新バージョン。


Message() 関数は、本誌 掲載後に2つの変更を受けました。最初の変更点は、Print() によるExpertログへの出力を無効にすることと、一連の類似メッセージのうち最初のメッセージのみを出力する機能を追加したことです。2つ目の変更点は、既存のComment()Print() 関数に加え、Alert()SendMail()SendNotification() を使用することで、出力方向を追加したことです。私が発表するのは後者の変化です。

Message() 関数は、テキストメッセージを異なる方向から出力するように設計されています。デバッグ目的だけでなく、現在の取引状況の説明、プログラム操作の記録、重要な変更をトレーダーにタイムリーに知らせるなど、既製のアプリケーションでも使用できます。この関数は3つのパラメータを受け取り、そのうちの最後の2つはオプションである。
  • ms- 文字列,出力されるテキストメッセージ,送信.
  • nv- メッセージの出力方向を指定するフラグの文字列.5つの旗は、5つの重要な場所です。フラグ面を0にすると特定の出力方向がONになり、1にするとOFFになります。左から順に、Alert、Comment、Print、SendMail、SendNotificationとなります。初期値は "01100 "で、コメントとプリントは有効、その他は無効です。
  • am- 論理的、True- すべてのメッセージを出力、False- 一連の同一のメッセージから最初のものだけを出力。デフォルトはFalse である。

AlertとPrintの出力方向(スペース1、3)については、メッセージを一行ずつ出力できることに留意する必要があります。つまり、メッセージテキストに改行がある場合、つまり制御文字"˶‾‾‾"がある場合は、各行が独立して印刷されます。添付ファイルのテストスクリプトを試してみてください。)


SZYさん、Message()関数をテストするスクリプトを添付します。

OpenPosition関数にstoplayチェックを追加しましたか?
 
sv.:
OpenPosition関数にストップレベリングのチェックを追加しましたか?


いや...どういうチェックなんだ?さて、仮にストップ&テイクでチェックが失敗したとしたら、どうすればいいのか。オプションがあります。

  1. 開けないでください。
  2. ストップ&テイクアウェイを調整する。

 
KimIV:


いや...どんなチェックなんだ?さて、仮にストップ&テイクがチェックを通らなかったとしたら、どうする?オプションがあります。

  1. 開けないでください。
  2. ストップ&テイクを調整する。

1と2の項目でカスタムスイッチを導入するとか。 パターンを踏襲している。
 int           modeSetOrders = 1;      // Способ установки ордеров:
                                       //  0 - по заданной цене
                                       //  1 - скорректировать цены
                                       //  2 - вход по текущим ценам
 

テストスクリプトのOpenPosition() 関数の新バージョン。

What's new?

1.エラー 130 Invalid Stops で変数 NumberOfTry>1 の値が設定されている場合、OP_SELL の Bid と OP_BUY の Ask に対して MODE_STOPLEVEL+MODE_SPREAD の値で StopLoss と TakeProfit 価格水準を調整しようとします。

NumberOfTry グローバル変数1より大きくないと、価格水準の訂正のトリガーになりません。 これは、最初のポジション開設の試みでエラー130が明らかになり価格水準が訂正され、2回目以降の試みで水準が訂正されたポジションが開設 されるという事実によります。

ファイル:
 
KimIV、新しい機能でここに戻ってきてくれてうれしいです。
 

こんにちは。

KimIVの便利な関数のライブラリに、.NETのような簡単な関数を補完することは可能でしょうか?

1.オープンプライス、いくつかの基準位置(シンボル、タイプ、ロットサイズ、マジックナンバー)で選択されます。この価格はグローバル変数に保存され、特定の価格レベルとして使用され、そこからExpert Advisorのアルゴリズムを構築することができます。

ポジションまたは注文の条件(シンボル、タイプ、ロットサイズ、マジックナンバー)に従って選択されたチケットを返します。チケットは重要な識別子であり、どこでも使えるし、存在フラグにもなる。

こうしたシンプルな機能が多ければ多いほど、既存のものを改造する際に失敗する心配もなく、自分にとって最適なものを見つけやすくなります。

機能をありがとうございました。