KimIV的有用功能 - 页 45

 

使用GetPriceDiffInPoint()函数的一个例子。

假设我们需要计算当前图表上第二条和第一条之间的点值和汇率变动方向。假设当前图表是欧元兑美元H1。用默认参数调用GetPriceDiffInPoint()函数。

Message(GetPriceDiffInPoint());

下面是结果。


GetPriceDiffInPoint()函数已返回-23点。让我们分析一下它是如何获得的。为此,让我们画垂直线 穿过小时条2、1和0。


让我们切换到一个较小的时间框架,例如,M5,并在第2条和第1条的区间上标出一个单一的矩形。

现在我们可以清楚地看到,在突出显示的区间内,首先是两个相等的高点1.4283,在它们之后,在第二小时的中间是低点1.4260。因此,我们得出结论,在过去的两个小时里,欧元兑美元下跌,这个下跌的价值是(1.4283 - 1.4260)/ 0.0001 =23点。


P.S. 附上测试GetPriceDiffInPoint()函数的脚本。

附加的文件:
[删除]  

真棒的选择,难道没有一个功能可以在任何TF上的第一个成功收盘时关闭订单(买入或卖出)吗?

 

我可以问一下,在打开订单之前会做哪些检查?

如果它们被收集在一个单独的功能中,请给我一个链接。如果没有,可以给出一个清单。

 
SK. писал (а)>>
我可以问一下,在打开订单之前会做哪些检查?

谢尔盖,我不知道你的问题是否是问我的?

 
KimIV писал (а)>>

...

处理错误时的函数、打开、关闭和修改都使用了Sleep 命令。我做了一些研究,建议用这些东西来代替它。问题是,延迟的价值是一种建议,不一定要严格按照这个价值。很多时候,你可以立即对一个订单进行操作(没有延迟)。但是,如果你有一个重新报价,那么我不喜欢BC可以计算出我将在什么时候和什么类型的操作。

int start()
  {
//----
   Sleep_RND(20000);  
//----
   return(0);
  }
//+------------------------------------------------------------------+
void Sleep_RND(int _Pausa)
  {
   MathSrand(TimeLocal());
   MathRand();
   Sleep(MathRound(_Pausa*MathRand()/32767+_Pausa/5));
   return;
  }
 
KimIV писал (а)>>

谢尔盖,我不知道你的问题是否是问我的。

是的,伊戈尔,这是给你的一个问题。

关键是这一点。我看了一下开放功能,那里没有检查。显然,它们集中在其他一些功能上。如果你们有这样的功能,请给我链接。如果你没有看到这样的功能,你可以在这里写一个检查清单。你可以慢慢地做。

 

不,谢尔盖,我不再做任何检查。或者说,我是这样做的,但我不把它们放在单独的功能中。也就是说,我把其中一些...天啊,我给你举个例子。

extern int StopLoss=30;
extern int TakeProfit=50;

double ll=GetSizeLot();
double po, pp, sl, tp;
if (ExistPositions(NULL, OP_BUY, Magic)) {
  po=PriceOpenLastPos(NULL, OP_BUY, Magic);
  if (!ExistOrders   (NULL, OP_SELLSTOP, Magic+1)
  &&  !ExistPositions(NULL, OP_SELL    , Magic+1)) {
    pp=po-offSet*Point;
    if (StopLoss>0) sl=pp+StopLoss*Point; else sl=0;
    if (TakeProfit>0) tp=pp-TakeProfit*Point; else tp=0;
    SetOrder(NULL, OP_SELLSTOP, ll, pp, sl, tp, Magic+3);
  }
}

我们在这里看到了什么?

1.我们计算出要交易的手数。

2.如果有一个具有指定魔法数字的买入 头寸,其开仓价格被定义为po

如果没有SellStop 订单,而卖出 头寸的Magik比指定的单位大,我们会在比买入 头寸的开盘价 低一个set 点的价格上设置SellStop 订单。

4.在这个区间,我们进行了价格水平sltp 的计算。

 
KimIV писал (а)>>

4.在这之间,计算出价格水平sltp

这就是我的意思。你必须考虑到现有的限制,一般来说,这些限制一直在变化。

是否有一些函数可以分析所有可能的约束?

修改也是如此。

--

(我有16个函数 - 每个好的订单(OP,SL,TP)有3个,每个市场订单(SL,TP)有2个。

然后再分析一些权限的组合)。

 
SK. писал (а)>>
有什么功能可以分析各种限制吗?
还没有......不知为什么,我没有必要这样做。但多亏了你,我想了想,觉得应该这样做!>> 谢谢你!
 

GetTypePrice()函数

返回价格类型的名称。该函数只接受一个可选参数。有效值:PRICE_CLOSE、PRICE_OPEN、PRICE_HIGH、PRICE_LOW、PRICE_MEDIAN、PRICE_TYPICAL、PRICE_WEIGHTED。默认值是0 - PRICE_CLOSE。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование типа цены.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    Applied_Price - тип цены                                                |
//+----------------------------------------------------------------------------+
string GetTypePrice(int Applied_Price=0) {
  switch (Applied_Price) {
    case PRICE_CLOSE   : return("Close");
    case PRICE_OPEN    : return("Open");
    case PRICE_HIGH    : return("High");
    case PRICE_LOW     : return("Low");
    case PRICE_MEDIAN  : return("Median");
    case PRICE_TYPICAL : return("Typical");
    case PRICE_WEIGHTED: return("Weighted");
    default            : return("Unknown Type Price");
  }
}
这个功能对评论或记录指标、脚本和专家顾问的工作很有用,特别是显示价格常量 值的解释。