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

 

你们好。

我想做一个非常简单的EA,比较两个收盘价,并在此基础上开出一个买单或卖单。

第一笔订单一切顺利,但一旦条件从卖出切换到买入,它就会一次下多笔订单。

m_trade是一个Ctrade对象

// Current position information

bool Buy_openend = false;
bool Sell_openend = false;

double currentVolume = 0;

if(PositionSelect(_Symbol) == true)
  {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
     {
      Buy_openend = true;
     }
      if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
     {
      Sell_openend = true;
      }   
        currentVolume = PositionGetDouble(POSITION_VOLUME);   
  } 

// Check for trade conditions

bool SellCondition = close <= closeprev && bar[1].time == startTime;
bool BuyCondition = close >= closeprev && bar[1].time == startTime;


// Entering trade

if(SellCondition)
  {
   if(Sell_openend)
   {
   Print("We already have a sell open");
   return;
   }
   m_trade.Sell(TradeVolume+currentVolume,_Symbol,m_symbol.Ask(),NULL,NULL,NULL);
  }
if(BuyCondition)
  {
   if(Buy_openend)
     {
      Print("We already have a buy open");
   return;
     }
     m_trade.Buy(TradeVolume+currentVolume,_Symbol,m_symbol.Bid(),NULL,NULL,NULL);
  }
 
Divania111 Ctrade对象。

你忘记了'startTime'的时间需要被重置。

 
Vladimir Karputov #:

你忘了 "startTime "的时间需要重新设置。

谢谢你,弗拉基米尔,我将根据你的提示尝试修复它。

然而,我仍然感到惊讶。因为在进入交易的if语句中,我们检查是否有相同类型的现有订单。如果这是真的,那么该订单就不应该被放置。所以我认为在这个语句中,只有一种类型的订单可以同时进入。

这种想法是否不正确?

 
Divania111 # :

谢谢你,弗拉基米尔,我将根据你的提示尝试修复它。

然而,我仍然感到惊讶。因为在进入交易的if语句中,我们检查是否有相同类型的现有订单放置。如果这是真的,那么该订单就不应该被放置。所以我认为在这个语句中,只有一种类型的订单可以同时进入。

这种想法是否不正确?

你没有以任何方式控制订单,你在代码中检查POSITION的数量和类型。此外,你不正确地使用POSITIONS(如果你的账户类型是对冲,使用 "PositionSelect(_Symbol) "是错误的)。你的算法有严重的设计错误。

你应该做什么。

1.只在新条形图诞生的时候工作。如果没有新条形图--什么都不做,不要做不必要的动作。

2.这一项将在第1项完成后披露。

 
你好。你能告诉我,在void OnTick()中的评论 是否拖累了EA。把它放在int OnInit()中会更快。
 
Marco Nicholas 注释 是否拖累了EA。把它放在int OnInit()中会更快。

是的,在MT5中,它大大降低了操作的速度。

在OnInit中,它只在初始化过程中工作一次,再无其他。

 
Marco Nicholas 评论 是否会拖慢EA的速度。把它放在int OnInit()里会快得多。

你是在说Comment() 函数吗?

如果是,那就很明显了。在OnInit() 中,评论只会更新一次,而在OnTick() 中,评论可能最终会在每一个tick上被更新。

解决办法是只在需要时更新注释。如果它是静态的,那就只在OnInit() 中更新,然后在OnDeinit() 中清除它,但如果它是动态的,那就在OnTick() 中只在需要改变注释的时候更新它。

EDIT: 这个帖子最初是在英文论坛上完成的。

 
各位老师好,我在使用客户端 SocketConnect()函数时,按照用户说明正确填写参数后还是不能与服务器建立连接,经检测服务器是正常可用的,请问使用 SocketConnect()函数需要注意哪些问题呢
 

大家好。

我有一个问题

如何对sqlite 进行查询,从票据中选择一条记录。

数据库的结构如下。

符号-文本

票据--文本

盗版-真实

s_l - 实际

t_p - 实数

需要将整个票据字符串放入结构中

 
你好,你能否在switch()中使用Comment() 来代替同样的Print。