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

 
KimIV писал (а)>>

isLossLastPos()関数です。

説明: 最後に閉じた位置の損失フラグを返す。フラグアップ -True- 最後のポジションは損失で決済されました。フラグ省略 -False- 最後のポジションがゼロ、または利益で決済された。本機能はスワップ、コミッションを考慮しない。ポジションの選択は、外部パラメータで定義されます。

  • sy- 市場商品の名前。このパラメータを指定すると、指定した楽器の位置のみを考慮するようになります。初期値」は、あらゆる市場商品を意味する。NULLは 現在の楽器を意味します。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUYOP_SELL、または-1。デフォルト値-1 は任意の位置を意味する。
  • mn- 位置の識別子,MagicNumber.デフォルトの値である- 1は、任意の識別子を意味する。
追伸:isLossLastPos()関数をテストするスクリプトを添付します。

最後に閉じた位置に関する機能を増やさないために、次のようなバリエーションを提案します。

int LastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=OrderTicket();              }
              else
                return(j);
            }
          }
        }
      }
    }
  }
  return(-1);
}

この機能は、最後に閉じた位置のチケット番号を定義します。

チケットの番号とその後の対応は、解決すべき問題に応じてプログラマーの判断に委ねられます。

 

関数 FindNearFractal()。

この関数は、最も近いフラクタル素片を検索し、その価格水準を返す。この関数は、以下のオプションパラメータを受け付ける。

  • sy- 楽器の名前です。"" またはNULL- 現在のシンボル。デフォルトはNULL
  • tf- タイムフレーム.初期値0- 現在のシンボル。
  • mode- フラクタルタイプ。MODE_LOWER およびMODE_UPPER が使用可能である。初期値はMODE_LOWER です。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Поиск ближайшего фрактала. Возвращает ценовой уровень.         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy   - наименование инструмента      ("" или NULL - текущий символ)     |
//|    tf   - таймфрейм                     (    0       - текущий ТФ)         |
//|    mode - тип фрактала                  (MODE_LOWER|MODE_UPPER)            |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;

  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}
 

FindNearFractal()の使用例です。

  • 現在のチャートで最も近い下降フラクタルの価格。
    Message(FindNearFractal());
  • 現在のシンボルのH4チャートで最も近い上段フラクタルの価格。
    Message(FindNearFractal(NULL, PERIOD_H4, MODE_UPPER));
  • GBPUSD M30チャートの直近の下限フラクタルの価格
    .
    Message(FindNearFractal("GBPUSD", PERIOD_M30, MODE_LOWER));
    

SZY. FindNearFractal()関数をテストするスクリプトを添付しています。

ファイル:
 
KimIV писал (а) >>

Примеры использования функции SetVLine().

  1. Голубая сплошная вертикальная линия на текущем баре.
  2. Сиреневая толстая линия на восьмом баре.
  3. Сетка пунктирных линий на барах 14:00.

ЗЫ. Во вложении скрипт для тестирования функции SetVLine().

KimIV
писал (а)
>>

SetVLine()の使用例です。

  1. 現在のバー上に青色の縦実線を表示します。
  2. 8本目の小節にライラック色の太い線がある。
  3. バー14:00に点線のグリッド。

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

イゴールさん、こんにちは。
このような関数をインジケータで使用する場合の例を教えてください。
PreviousiHighsvAndhLows0のインジケータを改良して、時間によるマークを付けようとしています。

SetVLine()の例で、バーオープン時に一定時間でマークを描画する...
これまで、私のバージョンはナンセンスなものを描いてきました。
すでにフォーラムで相談しているのですが、ここでは初心者は甘えられないので...。

ありがとうございます。

ファイル:
 
obabuev писал (а)>>
このような関数をインジケータで使用する場合の例を教えてください。
インジケーターを改良して、タイムスタンプの描画を追加しようと思っているんだ。
SetVLine()の例で、ある時間のバーが開くときにマークを描く...

どのマークを描きたいかをイラストで示す。

 

GetExtremumZZZBar()関数。

この関数は、標準カスタムジグザグインジケータの 極値を検索し、バー番号を返します。この関数は、以下のオプションパラメータを受け付ける。

  • sy- 楽器の名前です。"" またはNULL- 現在のシンボルです。デフォルトはNULL
  • tf- タイムフレーム.デフォルト値は、0- 現在のタイムフレームです。
  • ne- 極端な数字。0- 最後、1- 前、2- 前、など。
  • dp,dv,bs- ZigZagaパラメータ:ExtDepth,ExtDeviation,ExtBackstep それぞれ.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 

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

  • 現在のチャートで、最後のジグザグの 極限値を持つバーの番号です。
    Message(GetExtremumZZBar());
  • 現在のシンボルのH4チャートの最後から2番目のZigZagの極値を持つバーの番号です。
    Message(GetExtremumZZBar(NULL, PERIOD_H4, 1));
  • 現在のチャートで最後のZigZagブレイクを見つけ、それを通る垂直線を引く。
    int n=GetExtremumZZBar(NULL, 0, 1);
    SetVLine(Magenta, "", Time[n]);

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

ファイル:
 
KimIV писал (а)>>

どのマークを描きたいかをイラストで示す。

イゴールさん、ご回答ありがとうございました。
2日かかりましたが、マークを作りました。
今はもう一回やろうと思っています。
テスト用に必要
御社のi-AnyRangeインジケータを利用して
インジケータは、ランダムな偏差で時間を処理します。
例えば-。
インジケータは
time1=10:05です。
time2=15:35。
を使用し、インジケーター自体のインジケーターラインの計算には
T1=time1(+/-ランダム)
T2=time2(+/-ランダム)
しかし、最大偏差の制限も設定する必要があります。
最大ランダム =5min;
難問は、ランダム性を5分間に制限する方法だけですか?
皆さんも似たような例があるのではないでしょうか。

ファイル:
 
obabuev писал (а)>>

が、最大偏差の制限も設定する必要があります。
最大ランダム =5min;
つまるところ、ランダム性を5分間に制限するにはどうしたらいいかということです。
似たような事例があるのでしょう。

5分間は300秒です。

void init() {
  MathSrand(TimeLocal());
}

void start() {
  double a=MathRand()/32767.0*300;
  int b=MathFloor(a);
  Comment(b);
}
 
KimIV писал (а)>>

5分といえば300秒。

もちろん、ありがとうございます。でも、質問の答えにはなっていません。
文字列にint bを追加する方法 Time2 minutes now or how to make plus minus random

>>もちろん調べますが、なかなか難しいです。