初学者的问题 MQL5 MT5 MetaTrader 5 - 页 225

 

晚上好!

我一直在使用带有评论的系统,以区分我是否提前修改了某个位置...

例如,我如何正确区分在我下了一个买入订单 后,我改变了仓位的SL和TP?是否有任何特定的职位领域或职能?

 
websafe25:

晚上好!

我一直在使用带有评论的系统,以区分我是否提前修改了某个位置...

例如,我如何正确区分在我下了一个买入订单 后,我改变了仓位的SL和TP?是否有任何特定的职位领域或职能?

这是不可能的。

在我看来,我们不应该依赖当前的头寸或订单状态。 当重新启动后,系统形成的状态必须是当前市场情况下的状态,这才更可靠。而后,它将调整位置和订单安排。

 
pronych:

这是不可能的。

在我看来,我们不应该依赖头寸或订单的当前状态。 当系统在重启后形成它在当前市场情况下应该有的状态时,就会更加可靠。然后它将调整位置和订单图。

谢谢你的答复。

现在我将描述我自己的情况。

当头寸达到比如说10点的利润时,我想把它转为无损的,也就是说,我把我的止损点移到开盘价+3点,比如说。

现在正在发生以下情况。

if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_SELL,Lot,PositionInfo.PriceOpen(),NormalizeDouble(PositionInfo.PriceOpen()-ModifyPips*_Point,_Digits)) <= PositionInfo.Profit())
        {
        if(Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()-ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()-TP*_Point,_Digits)))
          {

如果一笔交易的利润大于或等于10个点,我就改变止损点。利润增加,修改不断发生。 我需要将一笔交易转移到无损状态一次,然后跳过它,.....。

我怎样才能摆脱它呢?或者不写<=而是写=会更好?有没有可能当EA达到这个操作并开始比较交易的利润时,它不等于10点,而利润会更多,那么它就不会无损关闭?

P.S.> 我认为,当得到一个位置时,只需注意SL在什么水平上,如果高于价格,则已经修改...

我是这样决定的。

if(PositionInfo.Select(_Symbol))
{
   if(PositionInfo.PositionType()==POSITION_TYPE_BUY)
     {
     if(PositionInfo.StopLoss() > PositionInfo.PriceOpen())
       {
         if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_BUY,Lot,PositionInfo.PriceOpen(),NormalizeDouble(SymbolInfo.Ask()+ModifyPips*_Point,_Digits)) >= PositionInfo.Profit())
          {
             Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()+ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()+TP*_Point,_Digits));
          }
       }
     }
   if(PositionInfo.PositionType()==POSITION_TYPE_SELL)
     {
     if(PositionInfo.StopLoss() < PositionInfo.PriceOpen())
       {
      if(AccountInfo.OrderProfitCheck(_Symbol,ORDER_TYPE_SELL,Lot,PositionInfo.PriceOpen(),NormalizeDouble(PositionInfo.PriceOpen()-ModifyPips*_Point,_Digits)) <= PositionInfo.Profit())
        {
        Trade.PositionModify(_Symbol,NormalizeDouble(PositionInfo.PriceOpen()-ModifySLPips*_Point,_Digits),NormalizeDouble(PositionInfo.PriceOpen()-TP*_Point,_Digits));
        }
       }
     }
}
 
websafe25:

P.S> 我认为,当得到一个位置时,只需看看SL是在价格的哪个水平,如果高于价格,那么已经修改了...

这样决定了。

你在P.S.之后写的东西是很明显的。(如果你需要它非常精确,最多可以找到自上次测量以来的高/低杆水平))但这是不太可能的))。

只有脱离 "利润 "的概念,转向 "点 "的概念才是可取的。

如果不考虑最后一笔交易的价格最后一笔)(一般来说,忘记这种价格),而是在有利的变体中问价/出价,那就更漂亮了;))。

 

晚上好!

不幸的是,我找不到任何关于如何使用信号模块的具体说明,例如RSI。也就是说,有一个记录,它是如何初始化的,参数是如何设置的,但如何简单地检查条件,从我的EA购买 - 没有。下一步是什么?我如何检查是否存在买入/卖出条件?

/--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(100);
   signal.ThresholdClose(100);
   signal.PriceLevel(0.0);
   signal.StopLevel(SL);
   signal.TakeLevel(TP);
//--- Creating filter CSignalRSI
   CSignalRSI *filter0=new CSignalRSI;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodRSI(PeriodRSI);
   filter0.Applied(PRICE_CLOSE);
   filter0.Weight(0.8);
 
websafe25:

晚上好!

不幸的是,我找不到任何关于如何使用信号模块的具体说明,例如RSI。也就是说,有一个记录,它是如何初始化的,参数是如何设置的,但如何简单地检查条件,从我的EA购买 - 没有。下一步是什么?如何检查是否有条件购买/出售?

信号模块在设计阶段就与你的专家顾问相连。每个信号模块都组织了投票...

总的来说,这篇文章是一篇必读的文章。

用6个步骤创建一个交易机器人!

而最后

自定义指标交易信号的产生

 

顺便问一句--我是唯一一个认为在投票模块中取信号的算术平均值是不正确的人吗?

double CExpertSignal::Direction(void)
  {
   long   mask;
   double direction;
   double result=m_weight*(LongCondition()-ShortCondition());
   int    number=(result==0.0)? 0 : 1;      // number of "voted"
//---
   int    total=m_filters.Total();
//--- loop by filters
   for(int i=0;i<total;i++)
     {
      //--- mask for bit maps
      mask=((long)1)<<i;
      //--- check of the flag of ignoring the signal of filter
      if((m_ignore&mask)!=0)
         continue;
      CExpertSignal *filter=m_filters.At(i);
      //--- check pointer
      if(filter==NULL)
         continue;
      direction=filter.Direction();
      //--- the "prohibition" signal
      if(direction==EMPTY_VALUE)
         return(EMPTY_VALUE);
      //--- check of flag of inverting the signal of filter
      if((m_invert&mask)!=0)
         result-=direction;
      else
         result+=direction;
// Вот тут бы       number+=filter.Weight();

      number++;
      }
//--- normalization
   if(number!=0)
      result/=number; // Вот туточки???
//--- return the result
   return(result);
  }
 
YAndrey:

顺便问一句--我是唯一一个认为在投票模块中取信号的算术平均值是不正确的人吗?

一切都是合乎逻辑的。

阅读更多文章MQL5 Wizard: The New Version and here is a piece of picture from article:

正常化

 
barabashkakvn:

这一切都很有意义。

阅读更多文章MQL5 Wizard: The New Version,这里是文章中的一段图画。

这真的符合逻辑吗?如果权重是1,那么是的,这是符合逻辑的。

让我们想象一下,我有两个滤波信号。一个是好的,是我信任的胖子,并为它设置了权重1。 另一个是小的,是辅助性的乐趣,因此它的权重=0.1。

厚的信号给出的是等于100的买入信号,小的信号给出的是等于10的买入信号。总的信号将是什么?50.5???小的那个人低估了情况,这不是很奇怪吗?

 
YAndrey:

这有意义吗?如果权重各为1,那么是的,这很有意义。

让我们想象一下,我有2个信号滤波器。一个是好的,胖的,我相信它,并为它设置了权重1。 另一个是小的,辅助性的,为了好玩,所以其权重=0.1。

厚的信号给出的是等于100的买入信号,小的信号给出的是等于10的买入信号。总的信号将是什么?50.5???小的那个人如此低估了情况,这不是很奇怪吗?

1.总票数。它的主要特点是方向。第二个特点是最终价值。
2.如果你的策略触发了两个信号:一个强度等于100*1,第二个强度等于10*0.1,那么你应该从信号的选择 上审查你的策略。