KimIV的有用功能 - 页 37

 
KimIV писал (а)>>

isLossLastPos()函数。

该函数返回最后关闭位置的损失标志。旗帜升起--真实--最后一个头寸以亏损关闭。旗帜下降--假的--最后一个头寸以零点或以盈利的方式关闭。这个函数不考虑掉期和佣金。位置的选择是由外部参数定义的。

  • sy- 市场工具的名称。如果你指定这个参数,函数将只考虑指定仪器的位置。默认值"" 意味着任何市场工具。NULL 表示当前的仪器。
  • op- 贸易操作,职位类型。有效值:OP_BUYOP_SELL-1。默认值-1 表示任何位置。
  • mn- 位置标识符,MagicNumber。默认值为-1,意味着任何标识符。
P.S. 附上一个测试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_LOWERMODE_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));
  • 英镑兑美元 M30图上最近的下分形的价格。
    Message(FindNearFractal("GBPUSD", PERIOD_M30, MODE_LOWER));
    

SZY.附上一个测试FindNearFractal()函数的脚本。

附加的文件:
 
KimIV писал (а) >>

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

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

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

KimIV
писал (а)
>>

如何使用SetVLine()的例子。

  1. 在当前栏上的蓝色实心垂直线。
  2. 第八条上的丁香色粗线。
  3. 14:00条上的虚线网格。

附上一个测试SetVLine()函数的脚本。

嗨,伊戈尔。
你能不能给我看一个例子,说明这样一个函数如何在指标中使用。
我正试图改进PreviousiHighsvAndhLows0指标,并按时间给它添加一个标记。

使用SetVLine()的例子,并在条形图开盘时以一定的时间绘制标记...
到目前为止,我的版本已经引来了一些无稽之谈。
我已经在论坛上求助了,但初学者在这里没有被宠坏......

总之谢谢你,你的函数对逐步学习非常有用,但如果能有更多的提示或例子就更好了

附加的文件:
 
obabuev писал (а)>>
你能不能给我看一个例子,说明这样一个函数如何在指标中使用。
我正试图改进该指标,并为其添加时间戳画。
使用SetVLine()的例子,在条形图开盘时画一个标记,有一定的时间...

在插图中显示你想画哪些标记。

 

GetExtremumZZZBar()函数。

该函数搜索标准自定义ZigZag 指标的极值,并返回条数。该函数接受以下可选参数。

  • 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()函数的例子。

  • 当前图表上最后一个ZigZag 极值的柱子的编号。
    Message(GetExtremumZZBar());
  • 在当前符号的H4图表上,具有倒数第二个ZigZag极值的柱子的编号。
    Message(GetExtremumZZBar(NULL, PERIOD_H4, 1));
  • 在当前图表上找到最后一个ZigZag断点,并画一条垂直线穿过它。
    int n=GetExtremumZZBar(NULL, 0, 1);
    SetVLine(Magenta, "", Time[n]);

附上一个测试GetExtremumZZZBar()函数的脚本。

附加的文件:
 
KimIV писал (а)>>

在插图中显示你想画哪些标记。

谢谢你,伊戈尔,谢谢你的回答。
我花了两天时间,但我做了这个标记。
现在我正试图再做一个。
我需要它来进行测试
使用你的i-AnyRange指标,我想使
该指标将以随机偏差的方式处理时间。
例如--
该指标具有
time1=10:05。
time2=15:35。
而在指标本身的计算中,它使用的是指标线的计算方法
T1=time1(+/-random)
T2=time2(+/-random)
但我们还需要设置最大偏差限制,例如
最大随机数=5分钟。
难题只是如何将随机性限制在5分钟内?
你可能有类似的例子

附加的文件:
 
obabuev писал (а)>>

但你也需要设置最大偏差限制,例如
最大随机数=5分钟。
困难的是如何将随机性限制在5分钟内?
你一定有类似的例子。

5分钟是300秒。

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

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

五分钟是300秒。

当然,谢谢你,但这并没有完全回答问题。
如何将int b添加到字符串Time2 minutes now或如何使加减法随机化

>> 我当然会研究一下,但我很难受。