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

 

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

この関数は、現在開いているポジションの総利益を返します。利益は預け入れ通貨単位で還元されます。考慮すべき位置をより正確に選択するために、外部パラメータを使用して指定します。

  • 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 GetProfitOpenPosInCurrency(string sy="", int op=-1, int mn=-1) {
  double p=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=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            p+=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(p);
}
HH. GetProfitOpenPosInCurrency()関数をテストするためのスクリプトを添付します。
 
KimIV:
スコーピオンク

コードが違います、131ではありません、130です。

なるほど...。

以下のように正規化してみてください。

int dg=MarketInfo(Symbol(), MODE_DIGITS);
return(NormalizeDouble(Value, dg));
そうすると、エラー130が発生しないのです。

こうしてDigitsだけを使って、価格を持ってくるのです。しかし、それは役に立たず、エラーはいつも出るわけではなく、ある場合のみで、何に依存しているかは分かっていません。ロボットが設定しようとしている出力値を、自分の手で確認する必要があるのでしょう。

 

今後起こりうる展開を考えると、この追加は重宝されるでしょう。

p+=OrderProfit()+OrderTaxes()+OrderCommission()+OrderSwap();
// !!! OrdertTaxes() мифический парамер налогов !!!
5人に1人はいるかな......?;)))

また、ループ内のデータのまとめ方の ヒントもありがとうござい ました

 

ヨーヨー、からかってるのか?私のコンパイラはOrderTaxes()を理解しません。

 

もちろんです!!!:)))

ハイライト表示でわかるし、コメントでも明確に指摘されているのですが...。

それは秩序と いうか立場の特性の 一つであり、そのような機能は原則的にあるべきものですが......。

-

もしコンパイラが理解できなかったら...

GNIは私たちに教えてくれるでしょう ;)

 

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

この関数は、現在開いているポジションの総利益を返します。利益はポイントで還元されます。考慮すべき位置をより正確に選択するために、外部パラメータで指定します。

  • 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   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint(string sy="", int op=-1, int mn=-1) {
  double p;
  int    i, k=OrdersTotal(), pr=0;

  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) {
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          if (p==0) if (StringFind(OrderSymbol(), "JPY")<0) p=0.0001; else p=0.01;
          if (OrderType()==OP_BUY) {
            pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
          }
          if (OrderType()==OP_SELL) {
            pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
          }
        }
      }
    }
  }
  return(pr);
}
HH. GetProfitOpenPosInPoint()関数をテストするためのスクリプトを添付しています。
ファイル:
 
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);
  }
}
//+----------------------------------------------------------------------------+

こんにちは、EAを書くのを手伝ってください。あまり詳しくはないのですが、いいアイデアだと思います。の考え方の意味は、確かに可能であれば、次のようなことです。
それは同時に2つの入札を開くことが必要である1つは、パラメータ(ロット= 0.1__TafeProfit=30__StopLoss=10)で購入販売し、損失の終了時にパラメータ(ロット= 1__TafeProfit=30__StopLoss=10)で2番目の正をオープンしました。
あなたはフーに私を送信するつもりはない場合は...理想的には2つの最初のベットは、最小または最大のキャンドルで、または新しいろうそくの外観で開きますが、書き込み長いの第二部は、少なくとも私の雑談の最初の部分を作る場合は、次のようになります。

ありがとうございました!!!書いたらここに書いてください vms.80@mail.ru



 

GetTicketLastPos()関数。

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

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

  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) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                r=OrderTicket();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
HH. GetTicketLastPos()関数をテストするためのスクリプトを添付します。
ファイル:
 
WoodyVMS:

どうしたらいいのかわからないけど、どうしたらいいのか見当はついている。私は全く知らないのですが、良いアイデアかもしれませんね。その要点は、可能であれば以下の通りです。
それは同時に2つの入札を開くことが必要である1つは、パラメータ(ロット= 0.1__TafeProfit=30__StopLoss=10)と1買い販売し、損失が閉じるとパラメータ(ロット= 1__TafeProfit=30__StopLoss=10)で2番目の正をオープンしました。
あなたはフーに私を送信するつもりはない場合は...理想的には2つの最初のベットは、最小または最大のキャンドルで、または新しいろうそくの外観で開きますが、書き込み長いの第二部は、少なくとも私の雑談の最初の部分を作る場合は、次のようになります。

ありがとうございました!!!書いたらここに書いてください vms.80@mail.ru

もしくは、同志にCodeBaseのEAを全部このアドレスに送るとか。

イゴールさん、テーマから外れてしまってすみません。何かあれば、削除します。

 
Vinin писал (а):
もしくは、同志にCodeBaseのEAを全部このアドレスに送るとか。
彼は自分で見つけるだろう...