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

 
Youri Lazurenko:


如果没有完整的代码,我将无法帮助你。请附上完整的代码(使用 附上文件 按钮附上)。

 
如果在void OnTick()中,它看起来像这样。
   if(currentTime >= OpenTrade && currentTime < CloseTrade)
   {
      if(SignalBuy1() || SignalBuy2())
      { 
         if(timeBarInside != iTime(NULL, 0, 1))
         {
            OpenOrderBuy();
            PositionModifiBuy();
            CandleColor(ColorCandleBuy);
            timeBarInside = iTime(NULL, 0, 1);
         }
      }
      
      if(SignalSell1() || SignalSell2()) 
      {
         if(timeBarInside != iTime(NULL, 0, 1))
         {
            OpenOrderSell();
            PositionModifiSell();
            CandleColor(ColorCandleSell);
            timeBarInside = iTime(NULL, 0, 1);
         }
      }  
   }
全代码是什么意思?整个EA?这是相当麻烦的,而且其余的功能与修改无关。我明白,我们可以在开仓时 立即设置SL和TP,但我想这样做,我已经在想为什么它不工作了。在mql4中,它像两根手指一样完成......而在这里,它是一个痛苦的过程。
 

再回过头来画趋势线。如果你需要一个代码。

bool CreateLine(string name, datetime time1, double price1, datetime time2, double price2, color clr)
{
   ObjectDelete(0, name);  
      
   if(ObjectCreate(0, name, OBJ_TREND, 0, time1, price1, time2, price2))
   {
      ObjectSetInteger(0, name, OBJPROP_COLOR, clr); 
      ObjectSetInteger(0, name, OBJPROP_STYLE, TrendStyle); 
      ObjectSetInteger(0, name, OBJPROP_WIDTH, TrendWidth); 
      
      ChartRedraw(); 
      Sleep(10);
      
      return(true);
   }
   else 
   {
      Print("Ошибка в создании линии"); 
      return (false);
   }
}
附加的文件:
1.png  82 kb
2.png  36 kb
 
Youri Lazurenko:

再回过头来画趋势线。如果你需要代码。

阅读文件!!!。

OBJ_TREND

注意事项

可以指定趋势线向右和/或向左延伸的模式(分别为OBJPROP_RAY_RIGHT和OBJPROP_RAY_LEFT属性)。

默认情况下,这些属性被设置为false。

所以我的问题是:为什么要删除该对象并再次创建它?只有在图表上没有发现这样的对象时才创建,这不是更容易吗?而且,即使有必要改变锚点坐标,也不需要删除该对象并重新创建它。

 
Youri Lazurenko:


第三次也是最后一次:请附上完整的代码。

 
Alexey Viktorov:

阅读文件!!!。

这些属性在默认情况下被设置为假。

还有一个问题:为什么要删除一个对象并再次创建它?只有在图表上没有发现这样的对象时才创建,这不是更容易吗?而且,即使有必要改变锚点坐标,也不需要删除该对象并重新创建它。

谢谢,我现在就去看看。并感谢您的宝贵意见。我不是一个程序员,只是为了自己,我经常使用别人的作品。

 
Vladimir Karputov:

请第三次也是最后一次:附上完整的代码。

已经解决了这个问题。我通过Tisket修改,而不是Symbol。我不明白完整的代码有什么用,比如说,开仓 条件与修改有什么关系?

而现在看起来是这样的,也许有人会需要它。

void PositionModifiSell()
{
   int    i;
   ulong  ticket;
   double sl    = 0; 
   double tp    = 0;  
   int    total = PositionsTotal();
   
   for(i = total-1; i >= 0; i--)
   {
      if(m_position.SelectByIndex(i))                            
      {
         if(m_position.Symbol() == Symbol() && m_position.Magic() == Magic)
         {
            if(m_position.PositionType() == POSITION_TYPE_SELL)
            {               
               if(m_position.StopLoss() == 0 && m_position.TakeProfit() == 0)
               {
                  ticket = m_position.Ticket();
                  
                  sl = NormalizeDouble(iHigh(NULL, 0, ExtrimUp()) + VS*_Point, _Digits);
                   
                  if(PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)*_Point)
                  {
                     tp = NormalizeDouble(PriceCurrentDw1() - PriceDwHigh(), _Digits);
                  }
                  else
                     tp = NormalizeDouble(bid - TP*_Point, _Digits);
                  }
                  
                  if(!m_trade.PositionModify(ticket, sl, tp))
                  {
                     Print("Метод PositionModify() потерпел поражение. Код возврата = ", m_trade.ResultRetcode(),
                           ". Описание кода: ", m_trade.ResultRetcodeDescription());
                  }
                  else
                  {
                     Print("Метод PositionModify() исполнен успешно. Код возврата = ", m_trade.ResultRetcode(),
                           " (", m_trade.ResultRetcodeDescription(),")");
                  }
               }
            }
         }
      }
   }
}
 
Youri Lazurenko:


研究帮助--按票选择位置和按符号选择位置之间有什么区别。它将派上用场,使你不至于犯错。

位置选择

bool  PositionSelect(
   string  symbol     // имя инструмента
   );

注意事项

在 "净额 "头寸核算(ACCOUNT_MARGIN_MODE_RETAIL_NETTINGACCOUNT_MARGIN_MODE_EXCHANGE)下,每个符号 在任何时候都只能建立一个头寸,这是一个或多个交易 的结果。仓位不应与活跃的挂单 混淆,后者也显示在 "工具箱 "面板的 "交易 "标签中。

如果头寸是独立显示 的(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING),每个符号可以 同时打开几个头寸。在这种情况下,PositionSelect将选择最小的刻度线的位置

Документация по MQL5: Торговые функции / PositionSelect
Документация по MQL5: Торговые функции / PositionSelect
  • www.mql5.com
PositionSelect - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

阅读文件!!!。

这些属性在默认情况下被设置为假。

还有一个问题:为什么要删除一个对象并再次创建它?只有在图表上没有发现这样的对象时才创建,这不是更容易吗?而且,即使有必要改变锚点坐标,也不需要删除该对象并重新创建它。

再次感谢,现在的线就像一条线,很好看。但我需要ObjectDelete(0, name);否则一旦画好的线就不会重画。在mql4中也一样,只是忘了。

 
Youri Lazurenko:

再次感谢,现在的线就像一条线,很好看。只有ObjectDelete(0, name);;是需要的,否则一旦画出的线就不会重画。在mql4中也一样,我只是忘了。

多么荒谬的想法。绘制的图形对象平稳地移动。每个对象的帮助中都有一个例子(对于水平线OBJ_HLINE)。

你也可以改变已经画好的对象的任何属性:颜色、风格、气味......。
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_HLINE
  • www.mql5.com
OBJ_HLINE - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5