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

 
Alexey Belyakov:


这也没有用。

什么是小妖精喜欢公里的代码......

考虑到变量的声明,你的问题可以在六行代码中得到解决。

/************************Expert tick function************************/
void OnTick()
 {
  bool signal = true;
  datetime timeBar = iTime(_Symbol, PERIOD_CURRENT, 0);// период можно поставить по своему усмотрению
  datetime static timeOpen = 0;
  if(timeBar > timeOpen)
   {
    if(signal)
     {
      // открыть позицию
      timeOpen = timeBar;
     }
   }
 }/******************************************************************/

我希望你能弄清楚信号变量的问题。

 

О!它的工作!谢谢你们,同志们,谢谢你们的想法!。

但我不得不对它进行了一些调整。它甚至变得更容易,没有(真的)。虽然我无法解释这种复杂的MQL逻辑)。

这就是我实施的方式。

datetime timeBar = iTime(_Symbol,PERIOD_CURRENT, 0);// период можно поставить по своему усмотрению
datetime static timeOpen = 0;

if((PositionsTotal()==0)&&(c0>h1)&&(rGENUP>0.30)&&(timeBar > timeOpen))    // Условие для открытия позиции.
     {
      MqlTradeRequest request;
      MqlTradeResult  result;
      request.action   =TRADE_ACTION_DEAL;                         // тип торговой операции
      request.symbol   =Symbol();                                 // символ
      request.volume   =1;                                       // объем в 1 лот
      request.type     =ORDER_TYPE_BUY;                         // тип ордера
      request.price    =SymbolInfoDouble(Symbol(),SYMBOL_ASK); // цена для открытия
      request.deviation=3;
      request.sl    = NormalizeDouble(Ask-50*_Point,_Digits);
      request.tp    = NormalizeDouble(Ask+50*_Point,_Digits);    

      if(!OrderSend(request,result))
         PrintFormat("OrderSend error %d",GetLastError());     // если отправить запрос не удалось, вывести код ошибки
      //--- информация об операции
      PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
      // допустимое отклонение от цены
timeOpen = timeBar;
}
我想知道为什么在MQL5中会有这么大的代码用于开仓。与MQL4不同。在4号文件中,它只是一条线。我们能把它砍下来吗?例如,我们可以删除错误处理程序吗?


Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Alexey Belyakov:

О!它的工作!谢谢你们,同志们,谢谢你们的想法!。

但我不得不对它进行了一些调整。它甚至变得更容易,没有(真的)。虽然我无法解释这种复杂的MQL逻辑)。

这就是我实施的方式。

我想知道为什么在MQL5中有这么多的代码来开仓。与MQL4不同。在4号文件中,只有一条线。但在这里......你能让它更短吗?例如,我们可以删除错误处理程序吗?


使用贸易类。而且代码会非常短。

例子。

//+------------------------------------------------------------------+
//|                                            Only_one_purchase.mq5 |
//+------------------------------------------------------------------+
#property version   "1.003"
#property script_show_inputs
#include <Trade\Trade.mqh>
CTrade         m_trade;          // trading object
//--- input parameters
input ENUM_POSITION_TYPE   InpPositionType   = POSITION_TYPE_BUY; // Position Type
input double               InpVolume         = 0.0;               // Volume
input ulong                m_magic           = 15489;             // magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   m_trade.SetExpertMagicNumber(m_magic);
//--- open a position
   if(InpPositionType==POSITION_TYPE_BUY)
      m_trade.Buy(InpVolume);
   else
      m_trade.Sell(InpVolume);
  }
//+------------------------------------------------------------------+
 
Alexey Belyakov:

О!它的工作!谢谢你们,同志们,谢谢你们的想法!。

但我不得不对它进行了一些调整。它甚至变得更容易,没有(真实)。虽然我无法解释这种复杂的MQL逻辑)。

我就是这样实施的。

我想知道为什么在MQL5中会有这么大的代码用于开仓。与MQL4不同。在4号文件中,只有一条线。但这里......可以缩短吗?例如,我们可以删除错误处理程序吗?


因此,如果你有在条件

if((PositionsTotal()==0)&&

那么,为什么我们需要更多的支票来换取一个新酒吧?还是有一种选择,即在同一栏关闭头寸,禁止第二次开仓?

 
Alexey Belyakov:

О!它的工作!谢谢你们,同志们,谢谢你们的想法!。

但我不得不对它进行了一些调整。它甚至变得更容易,没有(真的)。虽然我无法解释这种复杂的MQL逻辑)。

这就是我实施的方式。

我想知道为什么在MQL5中有这么大的代码用于开仓。与MQL4不同。在4号文件中,只有一条线。但这里......可以缩短吗?例如,我们可以删除错误处理程序吗?


你知道,很久以前,当有MQL4的时候,人们愤愤不平地说,他们没有被赋予较低级别的访问权--这样他们就可以用自己的方式做一些事情。

嗯,他们做到了--现在他们给了MQL4中OrderSend()的访问权--可以这么说,他们在MQL中部署了它的逻辑--所以做你想做的。但是没有--现在我有抱怨说它太复杂了。

复杂吗?没问题--在SB中 给你交易类--它们几乎与MQL4的标准交易功能相同。
在MQL4中,这样的类是交易函数。而在MQL5中--都是开放性的。

利用好它。

 
Artyom Trishkin:

你知道,很久以前,当有MQL4的时候,人们愤愤不平地说,他们没有给他们低级别的权限--这样他们就可以用自己的方式做一些事情。

嗯,他们做到了--现在他们给了MQL4中OrderSend()的访问权--可以这么说,他们在MQL中部署了它的逻辑--所以做你想做的。但是没有--现在我有抱怨说它太复杂了。

复杂吗?没问题--在SB中 给你交易类--它们几乎与MQL4的标准交易功能相同。
在MQL4中,这样的类是交易函数。而在MQL5中--都是开放性的。

利用好它。

讲解员,和讲解员。你为什么这么生气(今天)?

 
Alexey Viktorov:

讲师,啊,讲师。你为什么这么生气(今天)?

进入冰洞...

 
Alexey Viktorov:

因此,如果你有一个条件

为什么要检查一个新的酒吧?还是有一个选项,即该头寸将在同一个柱子上关闭,我们应该不允许第二次开仓?

完全正确--有一个选项可以在同一个柱子上关闭头寸。

 

(切入新墙)。)这堵 "墙 "被称为盈亏平衡点。

这是在MQL4中实现的方式。

(我在某个地方复制了它,我不记得了)

int BULevel=30;

   for(int i=0; i<OrdersTotal(); i++) 
      {
       if(OrderSelect(i, SELECT_BY_POS))
        {      
         if(OrderType()==OP_BUY) 
          {
           if(OrderOpenPrice()<=(Bid-BULevel*Point)&&OrderOpenPrice()>OrderStopLoss())
            {      
             int p=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-50*Point,OrderTakeProfit(),0,Green);
            }
           }       
 
         if(OrderType() == OP_SELL) 
           {
            if(OrderOpenPrice()>=(Ask+BULevel*Point)&&OrderOpenPrice()<OrderStopLoss()) 
             {
              p=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+50*Point,OrderTakeProfit(),0,Red);
             }
           } 
         }
       }

//------------------------------------------------------------------+

但这里是它在5-PC中的实现方式。我怎么做呢?

我翻阅了交易类,我没有看到它在里面。但这个东西是需要的。专家们怎么说?

 

如何防止其他图表中的交易出现在图表上?

只有在给定图表上的机器人的交易。