如何每10个点画一条参考线

 

这是我一直在使用的一个方便的脚本。它每隔10个点就会画出参考线,以帮助我衡量市场的动向。我试图通过观察屏幕右侧的价格来弄清楚这个问题,真的很沮丧,所以我创建了一个脚本。这个脚本可以作为初学者练习绘制对象的好帮手。

int start()
{  
    int nLines = 40;                                   // Number of total line to draw
    double lineInterval = 0.0010;                      // Interval between lines
    ObjectsDeleteAll(0,OBJ_HLINE);                     // Clear all the lines from the window - CAREFUL!
    double normPrice = NormalizeDouble(Close[1],3);    // Current price is rounded to nearest "10"
    for (int ix = 0; ix < nLines; ix++)                // Loop span number of times
        {
            ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval));    // Place half above and half below the current price
            ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray);      // Make the lines look better
        }
    return(0); //All done
}
 
MisterDog:

这是我一直在使用的一个方便的脚本。它每隔10个点就会画出参考线,以帮助我衡量市场的动向。我试图通过观察屏幕右侧的价格来弄清楚这个问题,真的很沮丧,所以我创建了一个脚本。这个脚本可以作为初学者练习绘制对象的好帮手。

让它成为一个CI而不是脚本,从0开始计算而不是从收盘价开始计算,只在图表的可见部分(WinPriceMax()和它的姊妹部分)绘制,当价格移动超过限制时更新它(在你的例子中,线的间隔=10点),使用OBJ_RECTANGLE 而不是OBJ_HLINE。

它将在所有打开的图表上同步进行。

:D

 

或者 . . . 把它变成一个指标 . . 需要更多的代码,以便它只在一个新条形的开始时被刷新 . . .

int deinit()
   {
   for (int ix = 0; ix < nLines; ix++) // delete my horizontal lines
      {
      ObjectDelete("tensLines"+ix);
      }
   return(0);
   }


int start()
   {  
   int nLines = 40;                                   // Number of total line to draw
   double lineInterval = 0.0010;                      // Interval between lines
   double normPrice = NormalizeDouble(Close[1],3);    // Current price is rounded to nearest "10"

   for (int ix = 0; ix < nLines; ix++)                // Loop span number of times
      {
      if(ObjectFind("tensLines"+ix) < 0) 
         ObjectCreate("tensLines"+ix, OBJ_HLINE, 0, 0, normPrice+((ix-(nLines/2))*lineInterval));    // Place half above and half below the current price

      else ObjectSet("tensLines"+ix, OBJPROP_PRICE1, normPrice+((ix-(nLines/2))*lineInterval));
      ObjectSet("tensLines"+ix,OBJPROP_COLOR,DarkSlateGray);      // Make the lines look better
      }
   return(0); //All done
   }
 
onewithzachy:

让它成为一个CI而不是脚本,从0开始计算而不是从收盘价开始计算,只在图表的可见部分绘制(WinPriceMax()和它的姊妹部分),当价格移动超过限制时更新它(在你的例子中,线的间隔=10点),使用OBJ_RECTANGLE而不是OBJ_HLINE。

它将在所有打开的图表上同步进行。

:D


除了 "用OBJ_RECTANGLE代替OBJ_HLINE"这部分,这一切都很合理。为什么是矩形?
 
RaptorUK:

或者 . . . 把它变成一个指标 . . 需要更多的代码,以便它只在一个新条形的开始时被刷新 . . .


是的,当然--好得多。告诉我,是否有办法对像ObjectDelete这样的东西使用某种 "通配符"?我想做这样的事情,ObjectDelete("tensLines "*);换句话说,删除任何以 "tensLines "开头的东西。
 
MisterDog:

除了 "用OBJ_RECTANGLE代替OBJ_HLINE " 这一部分,这一切都很有意义。为什么是矩形?

我已经用了很多年了,反正我从来没有在右边看到过价格,可能你不喜欢矩形,使用WindowsBarsPerChart(),也许还有WindowsFirstVisibleBar()。

请看图表的右下方,它是25/341。这意味着网格是25点,图表的高度是341点。

:D

 
onewithzachy:

我已经用了很多年了,反正我从来没有在右边看到过价格,可能你不喜欢矩形,使用WindowsBarsPerChart(),也许还有WindowsFirstVisibleBar()。

请看图表的右下方,它是25/341。这意味着网格是25点,图表的高度是341点。

:D

实际上,我喜欢你用酒吧布置的方式。这很容易让人眼前一亮。你说,"反正你从来没有看到右边的价格"。我经常想,为什么只有两个选择,买入或卖出,我有50-50的机会,但80%的时间我都错了。)
 
MisterDog:
实际上,我喜欢你用酒吧布置的方式。这很容易让人看懂。你说,"反正你从来没有看到右边的价格"。我经常想,为什么只有两个选择,买入或卖出,我有50-50的机会,但80% 的时间我都错了。)

我也一样...

:D

 
MisterDog:
实际上,我喜欢你用酒吧布置的方式。这很容易让人眼前一亮。你说,"反正你从来没有看到右边的价格"。我经常想,为什么只有两个选择,买入或卖出,我有50-50的机会,但80%的时间我都错了。)

这很容易回答......假设我所看到的测试EA的情况是真实的。 这取决于你的风险:回报,如果你有20的风险和80的回报(或类似的比例),我可以看到你如何能有20%的胜率。......但不是那么简单的,因为如果你进行小规模的交易,你必须考虑到点差的因素......。
 
onewithzachy,我正准备设置你的OBJ_RECTANGLE风格的图表。你提到 "WindowsBarsPerChart()和WindowsFirstVisibleBar()"。我仍然很难弄清楚如何让条形图从屏幕的左侧运行到右侧。但我确实喜欢这种布局有任何关于如何做到这一点的线索吗?
 
MisterDog:
onewithzachy,我正准备设置你的OBJ_RECTANGLE风格的图表。你提到 "WindowsBarsPerChart()和WindowsFirstVisibleBar()"。我仍然很难弄清楚如何让条形图从屏幕的左侧运行到右侧。但我确实喜欢这种布局有任何关于如何做到这一点的线索吗?

嗨,MisterDog。

很简单。

1.1.获得一个条形图与另一个条形图之间的时间距离。我们可以通过用当前柱状体时间减去前一个柱状体时间或用60秒乘以周期来获得,选择后一种,因为周一有时间差。

datetime Bar_Time_Gap; // or integer type

Bar_Time_Gap = Time [0] - Time [1]; // or Time [7] - Time [8] or whatever
Bar_Time_Gap = Period()*60;

2.2.WindowsFirstVisibleBar()是最左边的一条。从该条开始画,或者最好从该条的左边开始画,比如说左边的5条。假设 WindowsFirstVisibleBar() 的返回值 是20。这意味着最左边的条形图是[20],那么就从[25]条形图开始画。我实际上是从[Bars - 1]开始画的。

datetime Start;

Start = Time [WindowFirstVisibleBar() + 5];                  //which is the same ...
Start = Time [WindowFirstVisibleBar()] - 5 * Bar_Time_Gap;   //... with this one

3.WindowsBarsPerChart()是图表上的条数 。假设WindowsBarsPerChart() 的返回值 是35, WindowsFirstVisibleBar()是20。所以 从条形图[0]开始 ,右边有大约15个条形图的空位。把这个矩形的末端画到这个空位的右边,或者最好从这个 空位的右边开始画,比如向右5个 空位

datetime End;
int Right_Bar = WindowBarsPerChart() - WindowFirstVisibleBar() + 5;

End = Time[0] + Right_Bar * Bar_Time_Gap;

当新的条形图出现时,右边的条形图将向左移动,所以矩形的末端将是可见的,我们必须再次画出它。

我希望我没有在这里犯错,因为我写得很快。

:D