【问题标题】:How can I use iOpen(), iClose(), iLow() and iHigh() to find these pinbars?如何使用 Open()、Close()、Low() 和 High() 来查找这些 pinbar?
【发布时间】:2020-01-23 01:27:48
【问题描述】:

我想找到下面附图中圈出的 pinbar。对于右边的那个,主体大约是蜡烛大小的 1/5,对于左边的那个,假设主体是蜡烛大小的 1/7,它还有一根蜡烛的 1/7 的灯芯底部的大小。如何使用iOpen()iLow()等类似功能找到这两种pinbar?

【问题讨论】:

  • 尝试使用尾部相对于蜡烛范围的比率,以及蜡烛主体与尾部的比率和蜡烛范围。
  • @Dean 谢谢,尽管我已经使用与您的建议非常相似的想法解决了这个问题。但我仍在努力让stackoverflow.com/questions/58139482/… 工作。如果您能帮我看一下,我将不胜感激

标签: mql4 algorithmic-trading trading metatrader4 mt4


【解决方案1】:

Q如何使用iOpen()iLow()等类似功能找到这两种pinbar?

可以使用像这样的WasThisTheUserDefinedBearishPATTERN()函数的工作模板,并定义了所有用户特定的条件和常量,使用它进行交易时只需调用
if ( WasThisTheUserDefinedBearishPATTERN( aShift, 4.5, 0.1, 2000 ) ) { do_something(); }

bool WasThisTheUserDefinedBearishPATTERN( const int    aBarNUMBER,
                                          const double aBody2uWICK_MUL,
                                          const double min_FRACTION,
                                          const double MAX_FRACTION
                                          ) {
// BAR-UPPER-wick:
   double aBarUpWK = ( iHigh(  _Symbol, PERIOD_CURRENT, aBarNUMBER )
                     - iClose( _Symbol, PERIOD_CURRENT, aBarNUMBER )
                       );
// BAR-body:
   double aBarBODY = ( iClose( _Symbol, PERIOD_CURRENT, aBarNUMBER )
                     - iOpen(  _Symbol, PERIOD_CURRENT, aBarNUMBER )
                       );
// BAR-LOWER-wick:
   double aBarLoWK = ( iLow(   _Symbol, PERIOD_CURRENT, aBarNUMBER )
                     - iClose( _Symbol, PERIOD_CURRENT, aBarNUMBER )
                       );
// FLAG:
   bool  aBearishFLAG = FALSE;
// -----------------------------------------------------------------
// USER-DEFINE-ABLE SET OF SHAPE-CONDITIONS ..... = add all that apply
// BEARISH BODY:
//              has body
//              has body BEARISH
//              has body not more than about a lo-wick size * < min_FRACTION, MAX_FRACTION >
//              has body not less than about a hi-wick size * _MUL 
// -------------
   if (  aBarBODY >= 0                                      // not BEARISH
      || aBarUpWK <  aBarBODY * aBody2uWICK_MUL             // not long enough UpperWICK
         ){
         aBearishFLAG = FALSE;                              // (NO)
   }
   else { if (        aBarBODY <  0                         // has BEARISH CANDLE
             && (     aBarLoWK == 0                         // and may LO-WICK ZERO
                || (  aBarLoWk / aBarBODY > min_FRACTION    //     .GT. min-WICK-2-BODY-FRACTION
                   && aBarLoWk / aBarBODY < MAX_FRACTION    //     .LT. MAX-WICK-2-BODY-FRACTION
                      )
                  )
                ){  aBearishFLAG = TRUE;  }                 // (YES)
          else {    aBearishFLAG = FALSE; }                 // ( NO) OTHERWISE
   }
   return( aBearishFLAG );
}

事后:

我做了 WasThisTheUserDefinedBearishPATTERN( aShift, 1, 1/6, 2/6 )
并期待它会产生一些结果......

除了下面的评论,还请尊重 MQL4 语言世界的规则

Print( "DIV( 1  / 7  ) == ", 1  / 7  );   // will show you The Rules
Print( "DIV( 1. / 7. ) == ", 1. / 7. );   // will show you The Rules

【讨论】:

  • 我觉得我不太了解最后三个参数。我做了WasThisTheUserDefinedBearishPATTERN( aShift, 1, 1/6, 2/6 ) 并期望它会产生类似于我想要的图像右侧的结果,但是得到了带有巨大身体的蜡烛。您能否进一步解释一下,可能以两个圆圈蜡烛为例。
  • 最后三个参数有助于过滤哪些柱是“匹配的”,哪些不是。鉴于您的 Quant 需求,只需调整这些(以及所有其他参数,可能会添加到过滤器设计中,如代码中所述)并针对任何条交叉验证它们,您“圈出”以进行匹配。使用此“反向循环”,您会收到匹配过滤的阈值。这是基本的,所以请不要要求 StackOverflow 社区完成 Quant-R&D 任务,这远远超出了 MCVE 问题。提出了解决方法,代码维护和阈值交叉验证
【解决方案2】:

所以我的处理方式如下:

1) 我试图定义的每根蜡烛的特征是什么?

a) 向下或向上(我更喜欢 1 或 -1)

b) 相对于主体相对的大排斥尾巴

c) 较大的拒绝尾 相对于与非拒绝尾

d) 相对于拒绝尾巴相对的小身体

2) 我们如何使用预定义函数在 MQL4 中对此进行编码?

我们先做几个假设……

首先,您希望实时定义这些蜡烛,以便在它们形成时执行。

其次,让我们为任何给定的Symbol() 取消M30

下面的函数(未测试)将在有买入信号时返回1,在卖出信号时返回-1,在没有信号时返回0。您需要相应地调整extern 变量,因为这更像是一门科学,而不是“一刀切”。此外,您可能需要使用IsNewBar

//the values below should sum to 100
extern int RTail_To_Range_Ratio = 80;    //rejection tail ratio to range of candle
extern int Body_To_Range_Ratio = 10;     //body size ratio to range of candle
extern int NRTail_To_Range_Ratio = 10;   //non-rejection tail ratio to range of candle


int Signal()
{
    //candle information
    double dOpen  = iOpen(Symbol(),PERIOD_M30,0);
    double dHigh  = iHigh(Symbol(),PERIOD_M30,0);
    double dLow   = iLow(Symbol(),PERIOD_M30,0);
    double dClose = iClose(Symbol(),PERIOD_M30,0);
    double dBody  = MathAbs(dOpen - dClose);
    double dRange = dHigh - dLow;
    double dRTail = 0, dTail = 0;


    //green candle
    if(dClose > dOPen){
        dRTail = dOPen - dLow;
        dTail = dHigh - dClose;
        //now check ratios 
        if((dTail / dRange) <= (NRTail_To_Range_Ratio / 100) && (dBody / dRange) <= (Body_To_Range_Ratio / 100) && (dRTail / dRange) >= (RTail_To_Range_Ratio / 100)){
            return 1;
        }
    }
    //red candle
    else{
        dRTail = dHigh - dOpen;
        dTail = dClose - dLow;
        //now check ratios
        if((dTail / dRange) <= (NRTail_To_Range_Ratio / 100) && (dBody / dRange) <= (Body_To_Range_Ratio / 100) && (dRTail / dRange) >= (RTail_To_Range_Ratio / 100)){
            return -1;
        }
    }

    return 0;
}

如果这能解决您的问题@SuperHueman,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2010-12-02
    • 2013-08-13
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多