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

 
bij:

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&&我怎么写这个?)

你需要从time[i]中提取日期并与time[i+1]进行比较。如果它们不相等,则从time[i]中提取时间并与给定的时间进行比较。如果它们是相同的,就放成一条线。

我已经向你展示了如何在脚本中提取这一切。剩下的就是思考了。

 
Artyom Trishkin:

你需要从time[i]中提取日期并与time[i+1]进行比较。如果不相等,从time[i]中提取时间并与给定的时间进行比较。如果它们是一样的,就画一条线。

它是如何被提取出来的--我已经在脚本中展示了。剩下要做的就是思考了。

周五晚上,想得很坏)没有什么建树。为什么?

   datetime date1=time[i]; 
   datetime date2=time[i+1];
 
   MqlDateTime str1,str2; 
   TimeToStruct(date1,str1); 
   TimeToStruct(date2,str2); 
  if(str1.day!=str2.day&&str1.mon!=str2.mon&&str1.year!=str2.year&&str2.hour==17&&str2.min==30){
  
   if(!TrendCreate(0,"closek"+time[i],0,iTime(NULL,PERIOD_D1,i+1),iClose(i+1,NULL,PERIOD_M30),iTime(NULL,PERIOD_D1,i),0,clrLime,STYLE_SOLID,2,false,false,false,false,0))
        {
         continue;
        }
        }
 
Artyom Trishkin:

然后从time[i] 中提取时间并与设定的时间进行比较。

可能是time[i+1],我需要把这一行放到前一天收盘后。

 

你好。

愚蠢的问题,但还是请你帮忙)

我在某个价格进入交易,我总是做多),我将交易价格 与当前出价进行比较,如果我们增加了0.5%,我就关闭。在出价时被诅咒(((()

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (fabs(DEAL_PRICE-Bid[0])/DEAL_PRICE)>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }
 
ISL:

我以某个价格进入交易,我总是在等待。我将交易价格 与当前出价进行比较,如果我们上涨了0.5%,我就关闭。

可能是因为这是MQL5。这里没有 "出价",而是SymbolInfoDouble(_Symbol, SYMBOL_BID)。


 
ISL:

你好。

愚蠢的问题,但还是请你帮忙)

我在某个价格进入交易,我总是做多),我将交易价格 与当前出价进行比较,如果我们上涨了0.5%,我就关闭。它以出价发誓((()

你说脏话是对的。在MQL5中,没有这样的数组与Bid价格。

将其替换为

m_symbol.Bid()

并在周期前不要忘记更新价格。

   if(!RefreshRates())
      return;
 
Vladimir Karputov:

而且他发誓是对的。在MQL5中,没有这样的数组与Bid价格。

将其替换为

而在循环之前,不要忘记更新价格。

我已经用两种不同的方式做了。

1) 专家顾问工作,但不幸的是,它并没有给我提供想法。这很简单,当前一根蜡烛收在下面,下一根蜡烛收在上面时,我就买入。而我只有在价格上涨0.5%时才会关闭。

它使奇怪的交易((()

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (SymbolInfoDouble(_Symbol,SYMBOL_BID)-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

2)我的方法如下。

if(!RefreshRates())
      return; 
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (m_symbol.Bid())-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

我想我搞砸了()。

它产生了一个错误。


 
ISL:

以两种不同的方式做了。

1) 专家顾问工作,但不幸的是,它没有实现这个想法。这很简单,我在前一根蜡烛收低,下一根蜡烛收高时买入。而我只在价格上涨0.5%的情况下才关闭。

它使奇怪的交易((()

2)我的方法如下。

我想我搞砸了()。

它给出了一个错误。


打开我的任何代码,你会看到m_symbol和RefreshRates。

 
Vladimir Karputov:

打开我的任何代码,你会看到m_symbol和RefreshRates都在那里。

谢谢你。我读过它,也做过它。

现在我搞不清楚为什么这个算法不起作用。

      if(!RefreshRates())
         return;
1)   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
2)      if(m_Position.Select(Symbol()))                             //если уже существует позиция по этому символу
        {
         
          return;                            
        }
2*)    m_Trade.Buy(0.1,Symbol());                                 //если дошли сюда, значит позиции нет, открываем ее
     }
3)  if 
   ((m_Position.PositionType()==POSITION_TYPE_BUY) && (((m_symbol.Bid()-DEAL_PRICE)/DEAL_PRICE)>= 0.1))
       {
         m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
      }


发生的情况如下:购买是在以下条件下进行的

1) 如果条件得到满足。

2) 我检查是否已经有一个未结头寸,如果有,我转到第3点),如果没有,我开一个2*)

3) 如果该仓位是买入,并且满足条件,即价格比进入价增加了10%,那么我就关闭它。

在测试中,发生了以下情况,仓位打开和关闭,不是在条件下((再次请帮助!)。

 
ISL:

谢谢你。我已经做了阅读。

现在我搞不清楚为什么这个算法不起作用。


发生的情况如下:购买是在以下条件下进行的

1) 如果条件得到满足。

2) 我检查是否已经有一个未结头寸,如果有,我转到第3点),如果没有,我开一个2*)

3) 如果该仓位是买入,并且满足条件,即价格比进入价增加了10%,那么我就关闭它。

在测试时,发生了以下情况,仓位打开和关闭,不符合条件((再次请帮助!)。

我提出以下算法。

   if(!RefreshRates())
      return;
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0]) //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(Symbol())) //если уже существует позиция по этому символу
        {
         if(m_Position.PositionType()==POSITION_TYPE_BUY && (m_symbol.Bid()-m_Position.PriceOpen())/m_Position.PriceOpen()>=0.1)
           {
            m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
            return;
           }
        }
      else
         m_Trade.Buy(0.1,Symbol()); //если дошли сюда, значит позиции нет, открываем ее
     }

请注意m_Position。PriceOpen()