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

 
teetrinker:

Myexpert.Time(10)是否应该返回图表上第10个柱形的时间?以及如何正确书写?

谢谢你

在理论上,是的,它应该...

根据文档, Time 方法通过指定的索引获得Time元素的值 它是 CExpertBase 类的一个方法 ,该类是CExpert 和所有交易策略的辅助类的基类。

亲爱的 sergeev 告诉你正确...最好是使用调试器来确定Time()方法在你的EA生活中的作用...

 

谢谢你,Yedelkin !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

还有EnumToString(timeframe),很酷的功能!!。而我是BARAN!!!!!!

 
请告诉我,这里有一个函数
 bool  PositionModify( ulong  PositionTicket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
      {  MqlTradeRequest request  = {0};
         MqlTradeResult result = {0};
        request.action= TRADE_ACTION_SLTP; 
        request.order= PositionTicket; 
        request.price= price;
        request.symbol= Symbol();
        request.sl= stoploss;
        request.tp= takeprofit;
        return (OrderSend( request,   result    ));   
      }

该函数似乎有一个,,,的一面,- request.symbol=Symbol(); 为什么是Symbol()?在这里,我们设定的TP和SL的符号应该被转移。那么,我们能不能把字符串request.symbol=Symbol();去掉,就像它是愚蠢的nada?

 

请教如何在未平仓的主力订单 的止损位设置翻转订单,然后在主力订单 在TP点平仓时删除它?

我在代码中一次设置了两个订单。

        
 // основной ордер +++++++++++++++++++++++++++++++++++++++      
        {
         request.action = TRADE_ACTION_PENDING;
         request.magic=magic_number;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = NormalizeDouble(volume()/1,2);
         request.price=NormalizeDouble(Ask+StopLevel*_Point,_Digits);
         request.sl = NormalizeDouble(request.price - SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price + TP*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_BUY_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         
           {
            OrderSend(request,result);
            if(result.retcode==10009 || result.retcode==10008)
               Print("Установлен ордер BuyStop");
            else
              {
               Print(ResultRetcodeDescription(result.retcode));
                           
              }
           }      
 // переворотный ордер +++++++++++++++++++++++++++++++++++++++
        
         request.action = TRADE_ACTION_PENDING;
         request.magic=magic_number1;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = NormalizeDouble(volume()/2,2);
         request.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits);
         request.sl = NormalizeDouble(request.price + SL*_Point,_Digits);
         request.tp = NormalizeDouble(request.price - (TP-900)*_Point,_Digits);
         request.deviation=0;
         request.type=ORDER_TYPE_SELL_STOP;
         request.type_filling=ORDER_FILLING_FOK;
         
           {
            OrderSend(request,result);
            if(result.retcode==10009 || result.retcode==10008)
               Print("Установлен ордер SellStop");
            else
              {
               Print(ResultRetcodeDescription(result.retcode));
               return;
              }
           }        
       } } 
}

主力订单在TP点开盘和收盘,而反转订单则挂起。如果主力订单在止损点平仓,就不会有任何问题))。关闭的最佳功能是什么?

我是否应该通过待处理订单,以这种方式删除它们?

      {
         request.action = TRADE_ACTION_REMOVE;
         request.magic=magic_number1;                  // ORDER_MAGIC
         request.symbol = "EURUSD";
         request.volume = 0;
         request.price=0;
         request.sl = 0;
         request.tp =0;
         request.deviation=0;
         request.type=0;
         request.type_filling=0;
         
           {
            OrderSend(request,result);
还是有一个更简单的方法?


	          
 
Crucian: 主力订单在TP开仓和平仓,而翻转订单则挂起。如果主力订单在停止时关闭,就不会有任何问题了))。用什么功能来关闭它比较好呢? 我是否应该通过挂单,用这种方式来删除它们?还是有一个更简单的方法?

所以问题就来了,当某些事件发生时(特别是当TP订单在开仓时触发),究竟如何删除一个 不是SL或TP订单的挂单

目前,这种待定订单只能通过发送相关的 "删除待定订单 "请求来强制性地删除。所以我们必须在终端上监控某些事件的发生,并发送一个请求。 但与你的变体不同,在请求中只有两个字段需要指定,其中一个是request。秩序

在你提到的情况下,OCO订单("一个坎塞尔其他(s)")将是有帮助的:在TP水平上,将放置一个具有未平仓头寸大小的订单,而在SL水平上,将放置一个具有 "逆转 "头寸所需大小的订单。如果其中一个OCO订单被触发,第二个订单将在服务器端被自动删除。然而,在这个论坛的整个生命周期中,平台的开发者一直坚持不引入任何额外的订单类型,包括OCO订单。

 
Yedelkin:

然而,只要这个论坛存在,平台开发者就断然不同意引入任何额外的订单类型,包括OCO订单。

而且,既然可以通过编程实现,为什么还要引入这些东西呢?
 
A100: 如果你能以编程方式进行,为什么还要输入?
试着在论坛搜索中输入拉丁文和西里尔文的 "OCO "一词,并阅读它。
 
Yedelkin:
试着在论坛搜索中输入拉丁文和西里尔文的 "OCO "一词,并阅读它。
OCO不是一个独立的权证,没有必要输入它
 
A100: CCA不是一个独立的许可,没有必要引入它
我明白了。所以你什么都没看。但你愿意分享你的意见。好吧,你的意见被接受: 不需要这种类型的订单
 
Yedelkin:
不需要这种类型的订单
一些平台有能力绑定1个(有时2个)CCA订单。在MT4/5中,我以编程方式实现了一连串的链接订单(有时相当复杂),并发现这是更方便的选择。