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

 
Alexey Kozitsyn:

使用ENUM_TIMEFRAMES类型的枚举变量。

谢谢你!
 
Alexey Kozitsyn:

使用ENUM_TIMEFRAMES类型的枚举变量。

我可以在列举中只留下所有素数中的几个吗?因此,在参数设置中选择时,我只看到两个,例如。
 
barudkinarseniy:
我可以在名单中只留下所有素数中的几个吗?因此,在设置中选择参数时,我将只看到两个,比如说。

你可以,但你必须编写你自己的枚举程序

enum ENUM_ORDER_TYPE
{
   Buy  = ORDER_TYPE_BUY,
   Sell = ORDER_TYPE_SELL
};

input ENUM_ORDER_TYPE typeOrder; // Выбери тип ордера

对于mql4,我们应该写OP_BUY,而不是ORDER_TYPE_BUY,分别为Sell

 
Alexey Viktorov:

你可以,但你必须编写你自己的枚举程序

对于mql4来说,代替ORDER_TYPE_BUY,你应该写成OP_BUY,分别为Sell

我知道了,谢谢你))。
 
奥列格-基里尔

请告知如何修复这个错误

修改订单#1506271459在122.824买入0.11欧元,sl: 0.000 tp: 0.000 -> sl: 0.000 tp: 122.843失败 [无效S/L或T/P]


 
Karputov Vladimir:
奥列格-基里尔

请告知如何修复这个错误

订单#1506271459在122.824买入0.11欧元,sl: 0.000 tp: 0.000 -> sl: 0.000 tp: 122.843失败 [无效S/L或T/P]


这取决于它是什么,如果止损点的设置小于最小值,而终端返回零止损点,那么就很难。如果问题出在价格步骤上,我就用这个函数。

double normalize(string symbol,double value)
  {
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   if(ts==0)return(value);
   return(NormalizeDouble(value/ts,0)*ts);
  }

开仓时 的使用实例

   if(type==ORDER_TYPE_BUY)
     {
      double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      if(NormalizeDouble(normalize(_Symbol,ask),digits)!=NormalizeDouble(ask,digits))return;
      trade.Buy(volume,_Symbol,0,0,0,CommentOrder);
     }

修改时的使用实例

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            sl=NormalizeDouble(normalize(symbol,bid-sl*point),digits);
            tp=PositionGetDouble(POSITION_TP);
            //Print(__FUNCTION__,": sl = ",sl," tp = ",tp);
            if(sl>0)trade.PositionModify(tiket,sl,tp);
           }

..

 
谢谢,我会试一试的。
 
关于mql5.为什么与mql4不同,TimeLocal()只在新的刻度线/新的图表移动/图表比例 变化时发生变化,而不是连续变化?与GetTickCount和GetMicrosecondCount 相同。有没有什么方法可以使TimeLocal的 "时钟 "在没有 "滴答 "的情况下均匀而连续地移动?
 
梦想11

下午好,问题是这样的......有一个跟踪止损功能......。

   double tr=0,MATrall=0,op=0,sl=0,
   ask   = NormalizeDouble(Ask,Digits()),
   bid   = NormalizeDouble(Bid,Digits());
   tr = NormalizeDouble(TrailingStop*Point(),Digits());
   MATrall = iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,1);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==Symbol())
           {
             if(OrderMagicNumber()==Magic)
              {
              op    = NormalizeDouble(OrderOpenPrice(),Digits());
              sl    = NormalizeDouble(OrderStopLoss(),Digits());
                 if(OrderType()==OP_BUY)
                 {
                 if((bid-op)>tr)
                 if((bid-sl)>tr)
                 if ((bid-tr)>MATrall)
                 if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MATrall,Digits()),OrderTakeProfit(),0,clrRed)==false)
                 printf("ERROR BUY Modifi");
                 }
                  if(OrderType()==OP_SELL)
                 {
                 if((op-ask)>tr)
                 if((sl-ask)>tr || sl==0)
                 if((ask+tr)<MATrall)
                 if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MATrall,Digits()),OrderTakeProfit(),0,clrRed)==false)
                 printf("ERROR SELL Modifi");
                 }
              }
           }
        }
     }

如何将其改为无限制地拖动订单,而不是一个...


 
loleg1991:
关于mql5.为什么与mql4不同,TimeLocal()只在新的刻度线/新的图表移动/图表比例 变化时发生变化,而不是连续变化?与GetTickCount和GetMicrosecondCount 相同。也许有办法使TimeLocal的 "时钟 "均匀地、连续地移动而没有 "滴答 "声?
用OnTimer()不是可以做到吗?