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

 
Lisi4ka330:
なぜreturn(StrToTime(ye+"."+mo+".01") にプラスがあるのか教えてください。
この文脈でのプラスは、StringConcatenate() 関数を置き換えることです。
 
ありがとうございます...。ビッグ)
 

ProfitIFStopInCurrency()関数

先日、インフォメーションパネルで、ポジションのグループがストップを発動したときに、入金通貨で推定損益を返す関数が必要でした。まあ、このような関数を書くのは初めてではないのですが。私は、さまざまな証券会社、さまざまな商品、さまざまな利益計算方法で、長い間テストしてきました。ご存じない方もいらっしゃると思いますが、FX、CFD、先物の3つがあります。しかし、FX と先物の 違いが分かりません。それでも、異なる計算の可能性をコードに盛り 込みました。この機能によって返される最大損失は、現在の口座残高によって人為的に制限されています。従来は、関数にパラメータを渡すことで、分析に必要なポジションをフィルタリングすることができました。

  • sy- 楽器の名称。このパラメータを設定すると、指定した楽器の位置のみをチェックする機能になります。NULLは 現在の楽器、""(デフォルト)は任意の楽器を意味します。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUYOP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子(MagicNumber).デフォルト値-1 は任意のMagicNumberを意味する。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания стопа открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFStopInCurrency(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (m==0) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            if (m==1) s-=(OrderOpenPrice()-OrderStopLoss())/p*v/t/l*OrderLots();
            if (m==2) s-=(OrderOpenPrice()-OrderStopLoss())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()>0) {
              if (m==0) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              if (m==1) s-=(OrderStopLoss()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s-=(OrderStopLoss()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=-AccountBalance();
          }
        }
      }
    }
  }
  if (AccountBalance()+s<0) s=-AccountBalance(); // Ограничение убытка балансом счёта
  return(s);
}

HH. ProfitIFStopInCurrency()関数をテストするためのスクリプトを添付します。

ファイル:
 

ProfitIFTakeInCurrency()関数

この関数は、前の関数と似ていますが、ただ、ポジションのグループがその取得を トリガーしたときの推定利益/損失を、預金の通貨で返します。 利益計算方法も考慮されています。 FX、CFD、先物。この関数が返す利益の最大値は、999,999,999という数字によって人為的に制限されています。パラメータ

  • sy- 楽器の名称。このパラメータを指定すると、指定した楽器の位置のみをチェックします。NULLは 現在の楽器、""(デフォルト)は任意の楽器を意味します。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUYOP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子(MagicNumber).デフォルト値-1 は任意のMagicNumberを意味する。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.05.2012                                                     |
//|  Описание : Возвращает предполагаемую прибыль/убыток в валюте депозита     |
//|             в случае срабатывания тейка открытых позиций.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double ProfitIFTakeInCurrency(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();  // Текущий символ
  int    i, k=OrdersTotal(); // Подсчёт открытых позиций
  int    m;                  // Способ расчета прибыли: 0 - Forex, 1 - CFD, 2 - Futures
  double l;                  // Размер контракта в базовой валюте инструмента
  double p;                  // Размер пункта в валюте котировки
  double t;                  // Минимальный шаг изменения цены инструмента в валюте котировки
  double v;                  // Размер минимального изменения цены инструмента в валюте депозита
  double s=0;                // Подсчёт стопа в валюте депозита

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && (op<0 || OrderType()==op)) {
          l=MarketInfo(OrderSymbol(), MODE_LOTSIZE);
          m=MarketInfo(OrderSymbol(), MODE_PROFITCALCMODE);
          p=MarketInfo(OrderSymbol(), MODE_POINT);
          t=MarketInfo(OrderSymbol(), MODE_TICKSIZE);
          v=MarketInfo(OrderSymbol(), MODE_TICKVALUE);
          if (OrderType()==OP_BUY) {
            if (OrderTakeProfit()>0) {
              if (m==0) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
              if (m==1) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v/t/l*OrderLots();
              if (m==2) s+=(OrderTakeProfit()-OrderOpenPrice())/p*v*OrderLots();
              s+=OrderCommission()+OrderSwap();
            } else s=999999999;
          }
          if (OrderType()==OP_SELL) {
            if (m==0) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
            if (m==1) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v/t/l*OrderLots();
            if (m==2) s+=(OrderOpenPrice()-OrderTakeProfit())/p*v*OrderLots();
            s+=OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
  return(s);
}

HH. ProfitIFTakeInCurrency()関数をテストするスクリプトを添付します。

ファイル:
 
私の特集の一覧で、簡単な説明と掲載記事へのリンクがあります。
ファイル:
 
こんにちは!テスター用と実際の取引用のEAを 簡単に書くためのテンプレート(初心者用)みたいなものはないのでしょうか?何かが動いていない(((
 
Chuma:
こんにちは!テスター用と実際の取引用のEAを簡単に書くためのテンプレート(初心者用)みたいなものはないのでしょうか? 何かが動いていない(((
テンプレート?:))まあ、私のEAの どれかを出発点にして......。
 
KimIV:
テンプレート?:))だから、私のEAの どれかを出発点として...。

ありがとうございます...。面白いもの、役に立つもの全般...。しかし、今のところ、手始めに最も簡単なシグナル(例えばクロス平均)を基にポジションをオープン、クローズするトレーディングアドバイザーを作ろうと思っていますが、これらのチェック、ロットの決定など・・・何を、いつ、どのように・・・・・。ちょっと複雑ですが...。

 
ということで、テンプレートのことも頭によぎりました...。未体験の仲間」を応援します ))))))
 

イゴール、度々の質問で申し訳ないのですが、本当にご無理をなさらないでください......。というのはどういう意味か教えてください。

gbDisabled

オンライン用のOpenPosition()関数の中で

以下は、そのコードの一部です。

// Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза

コンパイルすると、変数が定義されていないというエラーが出ます。