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

 
KimIV:
khorosh
e-TFL_v2 Expert Advisorに含まれるbool idPriceLevel() 関数にエラーがあります:最後の条件でgdUpPrice=0が 2回繰り返されていますが、おそらく2番目のケースでgdDnPrice=0と 書いたかったのでしょう。

ありがとうございました。e-TFL_v 2の修正版をサイトにアップロードしました。


khorosh
このEAは、私のStrategy Testerではビジュアルモードで動作しますが、デモ口座ではコメントで売買レベルを報告するものの、なぜかポジションを開くことができません。何が問題なのか、教えてくれるかもしれません。

このExpert AdvisorをNorthFinanceのデモでテストしてみたところ、どうでしょう。昨日、モスクワの友人から電話があった。同じExpert Advisorで文句を言われた。ライン単位でポジションを開き、止めるまでどんどんポジションを開いていくそうです。そのため、テストの目的は2つありました。

1.ご質問について。一般的な機能の確認。

2.友人の質問について。1回線から1ポジションだけ開設しました。

それを確認するために、e-TFL_v2 Expert Advisorを5分足でEURUSD, GBPUSD, USDCHF, USDJPYに置いてみました。トレンドラインを使って、直近の20~30本のバーにチャンネルを描きました。その結果、Expert Advisorは本来の動作をするようになりました。ユーロは下のラインから買われ、円は上のラインから売られている。ポンドとシーフもすべて正解でした。だから、自分で確認したほうがいい。Expert Advisorが動作します。

KimIV:
khorosh
e-TFL_v 2のidPriceLevel() 関数に誤りがあります。最後の条件gdUpPrice=0が 2回繰り返されています。 おそらく、2回目の場合はgdDnPrice=0と 書くつもりだったのでしょう。

ありがとうございました。e-TFL_v 2の修正版をサイトにアップロードしました。


khorosh
このEAは、私のStrategy Testerではビジュアルモードで動作しますが、デモ口座ではコメントで売買レベルを報告するものの、なぜかポジションを開くことができません。何が問題なのか、教えてくれるかもしれません。

このExpert AdvisorをNorthFinanceのデモでテストしてみたところ、どうでしょう。昨日、モスクワの友人に電話をした。同じExpert Advisorで文句を言われた。ライン単位でポジションを開き、止めるまでどんどんポジションを開いていくそうです。そのため、テストの目的は2つありました。

1.ご質問について。一般的な機能の確認。

2.友人の質問について。1回線から1ポジションだけ開設しました。

それを確認するために、e-TFL_v2 Expert Advisorを5分足でEURUSD, GBPUSD, USDCHF, USDJPYに置いてみました。トレンドラインを使って、直近の20~30本のバーにチャンネルを描きました。その結果、Expert Advisorは本来の動作をするようになりました。ユーロは下のラインから買われ、円は上のラインから売られている。ポンドとシーフもすべて正解でした。だから、自分で確認したほうがいい。Expert Advisorが動作します。

もしかしたら、EAのロジックをよく理解していないのかもしれませんが、1行の場合、エラーが発生した条件が満たされ、idPriceLevel() がFalseになるような気がするのです。私が間違っているならば、説明してください。

 
khorosh:

の場合、エラーが発生した条件に合致し、idPriceLevel() がFalseとなり、ポジションをオープンすることはありません。

はい、その通りです。EAの正常な動作には2つのラインが必要です。1つのラインは価格の上にあり、2つ目のラインは現在の価格より 下にあります。ホームページの記載を修正しました。ありがとうございました。

 
KimIV:
khorosh

の場合、エラーが発生した条件に合致し、idPriceLevel() がFalseとなり、ポジションをオープンすることはありません。

はい、その通りです。EAの正常な動作には2つのラインが必要です。1つのラインは価格の上にあり、2つ目のラインは現在の価格より下にあります。ホームページの記載を修正しました。ありがとうございました。

そのため、1回線で作業していた私のポジションは開かなかったのです。これですべてがクリアになった。無欲の努力に感謝します。機能がとてもわかりやすく説明されていますね。おそらく、現在開発中のEAのほとんどに、御社の機能が使われることになるでしょう。

 

関数ExistOPNearMarket()。

この関数は、ある注文またはポジションがマーケットの近くに存在する(マーケットから指定した距離(pips))ことを示すフラグを返します。チェックするオーダーやポジションをより正確に選択するために、外部パラメータで指定します。

  • sy- 楽器の名称。このパラメータを設定すると、指定した商品の注文またはポジションのみをチェックします。"" またはNULLは 現在のシンボルを意味する。
  • op- 取引操作、注文、またはポジションの種類。有効な値:OP_BUYOP_SELLOP_BUYLIMITOP_SELLLIMITOP_BUYSTOPOP_SELLSTOP、または-1 です。デフォルトの値である- 1は、あらゆる取引操作を意味します。
  • mn- 注文またはポジションの識別子(MagicNumber)。デフォルト値-1 は、任意の識別子を意味する。
  • ds- 市場からの距離(pips単位)。初期値は1000000 です。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиции или ордера около рынка   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    op - торговая операция               (    -1      - любая операция)     |
//|    mn - MagicNumber                     (    -1      - любой магик)        |
//|    ds - расстояние в пунктах от рынка   (  1000000   - по умолчанию)       |
//+----------------------------------------------------------------------------+
bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) {
  int i, k=OrdersTotal(), ot;

  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
            if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
          }
          if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
            if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
          }
        }
      }
    }
  }
  return(False);
}
SZZY.ExistOPNearMarket()関数を使った実験用スクリプトを添付します。
ファイル:
 

関数 ExistPosByPrice()。

この関数は、指定された建値でポジションが存在するかどうかのフラグを返します。チェックする位置をより正確に選択するために、外部パラメータで定義します。

  • sy- 市場商品の名前。このパラメータを設定すると、指定した楽器の位置だけをチェックする機能になります。初期値」は、あらゆる市場商品を意味する。NULLは現在の楽器を意味します。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUYOP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子,MagicNumber.デフォルト値-1 は、任意の識別子を意味する。
  • pp- ポジションオープン価格。デフォルト値0は 任意の価格を意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг существования позиций по цене открытия         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       ( 0   - любая цена)                     |
//+----------------------------------------------------------------------------+
bool ExistPosByPrice(string sy="", int op=-1, int mn=-1, double pp=0) {
  double px, py;
  int    d, i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            d=MarketInfo(OrderSymbol(), MODE_DIGITS);
            px=NormalizeDouble(pp, d);
            py=NormalizeDouble(OrderOpenPrice(), d);
            if (pp<=0 || px==py) return(True);
          }
        }
      }
    }
  }
  return(False);
}
ZS.トレイラーにExistPosByPrice()関数をテストするスクリプトがあります。
ファイル:
 

GetAmountLotFromOpenPos()関数を使用します。

この関数は、オープンポジションのロットの合計を返します。考慮すべき位置をより正確に選択するために、外部パラメータで指定します。

  • sy- 市場商品の名前。このパラメータを設定すると、指定されたシンボルの位置のみを考慮するようになります。初期値」は、あらゆる市場商品を意味する。NULLは 現在の楽器を意味します。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUYOP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子,MagicNumber.デフォルト値-1 は、任意の識別子を意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
ZS. GetAmountLotFromOpenPos()関数をテストするためのスクリプトを添付しています。
ファイル:
 

GetIndexByTicket()関数。

この関数は、チケットによるオーダーまたはポジションのインデックスを返します。検索対象となるオーダーやポジションをより正確に選択するために、外部パラメータで指定します。

  • ti- チケットの順番、位置。このパラメータの値は、空またはゼロであってはならない。
  • sy- 市場商品の名前。このパラメータを設定すると、指定した楽器の位置のみを考慮するようになります。既定値 -」は任意の市場商品を意味する。NULLは 現在の楽器を意味します。
  • op-取引操作、注文、またはポジションの種類。有効な値:OP_BUYOP_SELLOP_BUYLIMITOP_SELLLIMITOP_BUYSTOPOP_SELLSTOP、または-1 です。初期値の- 1は任意の位置を意味する。
  • mn- 位置の識別子,MagicNumber.デフォルトの値である- 1は、任意の識別子を意味する。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает индекс ордера или позиции по тикету.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ti - тикет ордера, позиции                                              |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetIndexByTicket(int ti, string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if ((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(i);
      }
    }
  }
  return(-1);
}
PS.GetIndexByTicket()関数をテストするためのスクリプトを添付します。
ファイル:
 

こんにちは

パラメータとして渡された2つの系列の相関を求める関数があれば教えていただきたいのですが。

 
scorpionk:

こんにちは

パラメータとして渡された2つの系列の相関を判断する関数があれば教えてほしいのですが。

だめでも、このテーマには興味があります。相関を計算するための数式を提供していただければ、関数を書きます。


ZS.自分では数式を探さない。私も資料でリンクに行きません。つまり、理解しようという気持ちがないのです。既成の数式を使って関数を書きたいという願望があるだけです。

 
KimIV:
スコーピオンク

こんにちは

パラメータとして渡された2つの系列の相関を判断する関数があれば教えてほしいのですが。

だめでも、このテーマには興味があります。相関を計算するための数式を提供していただければ、関数を書きます。


ZS.自分では数式を探さない。私も資料でリンクに行きません。つまり、理解しようという気持ちがないのです。用意された数式に関数を書きたいという欲求があるだけです。


相関式