新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 528

 
Alexey Viktorov:

就像这样。

谢谢你,这正是我需要的。

 

下午好!

能否请您就这个问题提供建议?

我下了一个挂单

bool send1=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,SL,TP,NULL,MagicNumber,0,clrGreen);

然后我尝试在开盘后对其进行追踪止损。

 {
 for(int i=0; i<OrdersTotal(); i++) 
  {
  if(OrderSelect(i,SELECT_BY_POS))
  if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
  if(OrderType()==OP_BUY)
   {
  if(TrailingStop>0)  
    {                 
  if(Bid-OrderOpenPrice()>TrailingStop)
     {
  if(OrderStopLoss()<Bid-TrailingStop)
      {
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,clrRed);
      }
     }
    }
   }
  }
 }

在其打开后,订单变成了OP_BUY?有什么诀窍,为什么在这种情况下尾随不起作用?

 
YanSay:

下午好!

能否请您就这个问题提供建议?

我下了一个挂单

然后我尝试在开盘后对其进行追踪止损。

在其打开后,订单变成了OP_BUY?有什么诀窍,为什么在这种情况下尾随不起作用?

100500个理由。第一个明显的问题是,Bid-TrailngStop没有被规范化。它可能更接近于止水点,然后也是不透明的。
 
YanSay:

下午好!

能否请您就这个问题提供建议?

我下了一个挂单

然后我尝试在开盘后对其进行追踪止损。

在其打开后,订单变成了OP_BUY?有什么诀窍,为什么在这种情况下尾随不起作用?

以点为单位的追踪止损? 那就乘以点。
 

我问错了问题,对不起。断章取义。

特别是为了测试跟踪代码,交易打开了,但跟踪不工作,无论我如何转动它,都是僵局(

//Вводные
#define  MagicNumber 150
double SL=0;                        //Stop Loss
input int Trailing=100;             //Трэйлинг

//Код

void OnTick()
{
 if (OrdersTotal()==0)
 {
   if(TimeCurrent()>StrToTime("17:59")&&TimeCurrent()<StrToTime("18:01"))
  {
SL = Low[1]-Point; //Стоп лосс
bool send1=OrderSend (Symbol(), OP_BUY,1,Bid,30,SL,0,NULL,MagicNumber,0,clrNONE);
  }
 }
 if (OrdersTotal()>0)
   {
      for (int i=0; i<OrdersTotal (); i++)
    {
   bool select1=OrderSelect (i, SELECT_BY_POS);
   if (OrderMagicNumber() == MagicNumber && OrderSymbol () == Symbol())
     {
   if (OrderType()==OP_BUY)
      {
     if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))
     bool modify1=OrderModify (OrderTicket(),0,Ask-Trailing,OrderTakeProfit(),0,CLR_NONE);
      }
     }
    }
   }
}
 
YanSay:

我问错了问题,对不起。断章取义。

特别是为了测试跟踪代码,交易打开了,但跟踪不工作,无论我如何转动它,都是僵局(

回答了你上面的问题。
 
Vladislav Andruschenko:
回答了你上面的问题。
非常感谢你,它帮助了我!
 
YanSay:
非常感谢你,它帮助了我!

你那里仍然有问题。

循环是正向的,应该是反向的--正向会在其中一个人关闭拖网后跳过位置

没有检查最小止损距离(StopLevel)--如果止损距离比允许的最小距离更近,就会出现修改错误(别忘了浮动点差)。

也许还有别的东西--斜着看--顺便说一下,既然已经告诉你了。

ZS.又看了看。

if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))

这种检查缺乏规范化检查的意义,因为你已经规范了两个值,当你检查时,结果没有再次规范化。

你需要检查两个双倍值的归一化差值。你正在比较两个归一化的数值。

 
Artyom Trishkin:

你那里仍然有问题。

循环是正向的;它必须是反向的--在正向循环的情况下,在其中一个位置关闭拖网后将被跳过。

没有检查最小止损距离(StopLevel)--如果止损距离比允许的最小距离更近,就会出现修改错误(别忘了浮动点差)。

也许还有别的东西--斜着看--顺便说一下,既然已经告诉你了。

ZS.又看了看。

这种检查缺乏规范化检查的意义,因为你已经规范了两个值,当你检查时,结果没有再次规范化。

你应该检查两个双倍值的归一化差值。你正在比较两个归一化的数值。

像这样吗?

for (int i = OrdersTotal() - 1; i >= 0; --i)
if (NormalizeDouble((Ask-OrderStopLoss()>Trailing*Point),Digits))
 
the size of local variables is too large (more than 512 kb)
这个错误是什么意思?


我有一个有两个对象的函数。

bool              CheckCandleOneRules(CCandlePropertiesBase *candle,
                                      CCandleRule *rule,
                                      int dir);

其中一个类有一个结构,有4000多个字段(大部分是枚举)。

如何处理这个错误?

原因: