[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 98

 
Foxy,ArraySearchDouble函数代码呢,有吗?如果没有它,弄清程序的作用就会困难得多)
 

你好!这是跟踪止损功能,请检查它是否正确。因为我的代码将发生巨大的变化,当我开始改变它时,将很难处理错误

void TrailStop(int ticket, int TStop)                           //ф-ция трейлинг стопа, TStop-расстояние в пп
   {
    if (TStop>0)
      {
       OrderSelect(ticket, SELECT_BY_TICKET);
       if(OrderType()==OP_BUY)
         {
          if(Bid - OrderOpenPrice()>Point*TStop)
            {
             if(OrderStopLoss()<Bid-Point*TStop)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Bid-Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
            else{ }
         }
       else if (OrderType()==OP_SELL)
         {
          if(OrderOpenPrice() - Ask>Point*TStop)
            {
             if(OrderStopLoss()>Ask + TStop*Point)
               {
                OrderModify(OrderTicket(), OrderOpenPrice(), 
                Ask+Point*TStop, OrderTakeProfit(), 0, Blue);
                return;
               }
             else { }
            }
          else { }
         }
       else { }
      }
    else { }
    }
 
gogent:

你好!这是跟踪止损功能,请检查它是否正确。我将大幅度地改变我的代码,当我开始改变它时,将很难处理错误。

你没有考虑到止损水平,所以如果你没有ECN/NDD,你可能会得到错误"错误的止损"。

一般来说,在OrderModify之后,最好处理所有错误,以防万一。

 
alsu:
Foxy,ArraySearchDouble函数的代码如何,是否有?没有它,将更难理解程序的作用)


这些都是KimIV的功能,这也是我想弄清楚的。以下是代码。


这个函数使用一个双数类型的值来搜索一个数组中的一个元素,并返回找到的元素的索引或-1。该函数只找到一个元素,如果结果是正数,则停止搜索。

  • m- 搜索该元素的数组。
  • e- 在数组m 中找到的double类型的值。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble(double& m[], double e) {
  for (int i=0; i<ArraySize(m); i++) {
    if (m[i]==e) return(i);
  }
  return(-1);
}
 
专业人士,我做错了什么?我需要在新条形图 出现时重新绘制指标窗口。If (Bars != Prebars) WindowRedraw();
不起作用。PreBars等于前一个tick上的条数。也许我把它放在了错误的地方或错误的功能中?
 
kon12:
专业人士,我做错了什么?我需要在出现新条形图时重新绘制指标窗口。如果(Bars != Prebars)WindowRedraw()。
它不会产生任何结果。也许我把它放在错误的地方,或者有什么地方不对?

你必须先画出来,才能重画 东西。
 
sergeev:

重画 某样东西,你必须先画 它。


一切都画得很完美,指标是基于人字形的,但当新的条形 出现时,曲线应该全部重新画出来,但它只在新的条形中增加指标的值...

int init() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

 
kon12:


一切都画得很好,指标是基于之字形的,但当新的条形出现时,曲线应该全部重新画出来,但它只在新的条形中增加指标的值...

int init() {
SetIndexBuffer(0,ZZ)。
SetIndexStyle(0,DRAW_SECTION)。
SetIndexEmptyValue(0,0.0)。

WindowRedraw()重绘图形对象。这与缓冲区没有关系。
 
Zhunko:
WindowRedraw()重绘图形对象。这与缓冲区没有关系。

明白了...如果有另一种方法可以重绘?
 
kon12:

明白了...如果用另一种方式重画?
显示代码,你会立即得到一个答案。