任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 110

 
artmedia70:
在这个函数中,你在哪里读到最后一次平仓的StopLoss?那里什么都没有。

它就在这里。直接指向。
OrderSelect(1,SELECT_BY_POS,MODE_HISTORY);
      take=OrderTakeProfit();
       ts=take;
 
borilunad:
睡觉吧,各位!早晨总是更好的!现在是凌晨1点!晚安!而阿特姆已经睡下了!

我像你这样做已经五天了,我已经开始在晚上思考。晚上好。
 
哦!错误130出现在日志中。这些是错误的站点,不是吗?但新的止损是1.3282。目前的止损是1.3275(这也是订单的开盘价),目前的报价是1.3297。错在哪里呢?
 

你好。为什么在预定义的变量"点 "中,在策略测试器的日志中没有定义零,最后是整数?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}

 
artmedia70:
我是一个西伯利亚人,是的。克拉斯诺亚尔斯克附近。


Sibiryak,所以,几乎,zamlYak))。
 
webip:

但是,我已经做了你正在做的事情五天,我已经开始在晚上思考。

如果是相反的情况,说谁在晚上不思考就更容易了。我也有同样的情况。此外,晚上根本就没有人打扰我。顺便说一下,我曾经读到过,比如说,大脑在晚上会思考得更好。就像科学家们发现了...
 
semiromid:

你好。 为什么在预定义的变量 "点 "中,在策略测试器的日志中没有定义零,最后是整数?

Пример:

static double lBUY;

lBUY=100*Point; //Так-же можно написать 10,20,180 или 520.

if(lBUY==0.01)

{

Alert("НУЛИ НЕ ПИШУТСЯ В КОНЦЕ Point ",lBUY);

}



而阿勒特实际上输出的是什么?
 
artmedia70:
DoubleToStr(number,digit)是给你的 。


非常感谢您!我需要它来比较蜡烛的特性(更多,更少,等等),我把它拧上了--它很有效。只是不明白它是如何比较数据类型字符串的? 或者说双倍数到字符串并没有把数字翻译成字符串?:-D


PS。它在指标中不起作用--只在脚本中起作用...当我调用High[i]时--我得到的只有小数点后4位。

我在写。

Alert ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5) )
{
Alert ("More");
}
如果(DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
Alert ("Smaller");

}

工作,它写出的结果有五位数,大/小数。问题是,在指标中,字符串数组并没有在图表上显示出来。因此......。

......写作。

警报("归一化双倍高度=", NormalizeDouble(High[1],5))。

不起作用 - 结果是> 1,1234

我不理解开发商--他们为什么要把事情搞得这么复杂?为什么如果它在图表上显示这么多数字,就不会划出有五位数字的被调用函数?也许有一个简单的解决方案?

 

我在纠结一个函数,如果最后一个市场 头寸被盈利平仓,则应返回True,如果没有亏损平仓则应返回False。如果此函数返回True,那么所有的头寸(包括挂牌和市场头寸)都被关闭。

以下是所得到的结果。

//+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos(int delta)
{
   datetime lastOrderCloseTime = 0,               // Время закрытия последнего открытого ордера
            lastOOTHist = -1;                     // Время открытия последнего открытого ордера из истории
   
   for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют..
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         int j = i;
      }
   }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }
  
   for(int h=OrdersTotal()-1; h>=0; h--)
   {
      if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue;
         if (OrderSymbol() != Symbol())       continue;
         if (OrderType() > 1)                 continue;
         if (lastOOTHist < OrderOpenTime()) return(false);  // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
      else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
   }
   
   return (true);
}

上面的Artyom 建议我在哪里有一个错误。我为自己重写了它。这还不是最后的变体,但是......已经很清楚了。在我运行专家顾问后,我马上注意到,剩余的头寸没有关闭,而且根本没有被关闭。我开始挖出原因是什么。我推荐了几个功能,发现它就在这个区块中。

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
      Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

确切地说,该评论一直被触发。

Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");

我把它注释出来,继续开车。注意到这个评论。

Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);

完全不触发,即使最后有一个关闭的位置 也不触发。会有什么问题呢?

我的想法,尽管我可能是错的......也许你需要把这块

 if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
   {
      if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
      if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
      else
      {
         lastOOTHist = OrderOpenTime();
         Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
      }
   }
   else
   {
     // Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
      return(false);
   }

把它也放在for 循环中?否则,谁知道溢出的水会流向什么方向。j 变量将包含位置的索引号,而且没有明确规定搜索的方向。

 
hoz:

我在纠结一个函数,如果最后一个市场 头寸被盈利平仓,则应返回True,如果没有亏损平仓则应返回False。如果此函数返回True,那么所有的头寸(包括挂牌和市场头寸)都被关闭。

以下是所得到的结果。

上面的Artyom 建议我在哪里有一个错误。我为自己重写了它。这还不是最终的变体,但是......已经很清楚了。在我运行专家顾问后,我马上注意到,剩余的头寸没有关闭,而且根本没有被关闭。我开始挖出原因是什么。我推荐了几个功能,并意识到原因就在这块。

确切地说,该评论一直被触发。

我把它注释出来,继续开车。注意到这个评论。

完全不触发,即使最后有一个关闭的位置也不触发。会有什么问题呢?

我的想法,尽管我可能是错的......也许你需要把这块

把它也放在for 循环中?否则,谁知道溢出的水会流向什么方向。j 变量将包含位置的索引号,而且没有明确规定搜索的方向。

变量j必须在函数开始时明确初始化为一个负值。试试吧。我还没有进一步看。