错误、漏洞、问题 - 页 3163

 
Roman #:

在外汇市场上没有价格。
一定是这样的惊心动魄))。

解决办法如下。
按你喜欢的方式配置所有的图表显示属性,并将其保存在模板中作为default.tpl。

你是如何做到这一点的?

我不明白为什么要增加这最后一条价格线,从实际意义上来说,它是没有用的。

 
user4321 #:

我如何做呢?

PCM on graphic -> Templates -> Save template
文件名:default.tpl

 
在某些情况下(我从未发现一个模式),当编译带有未使用的声明变量 的代码时,MetaEditor5 不会对未使用的变量发出警告。
 

关于交易、自动交易系统和策略测试的论坛

新手对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论

布鲁克林先生, 2022.02.25 07:15

亲爱的专家们,早上好!

今天,我又遇到了两个我不明白的问题,但这次是在从MQL5参考资料中提取的全部代码中。这一次我没有自己写什么,只是拿了一个现成的例子。

我打开MQL5参考/常量、枚举和结构/数据结构/交易请求的结构。我在那里找到它。

贸易请求的结构
Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
    action
    order
    price
    sl
    tp
    type_time
    expiration
 Пример торговой операции TRADE_ACTION_MODIFY для модификации уровней цен отложенного ордера:

这很清楚。我后面是一个例子,代码如下。

#define  EXPERT_MAGIC 123456  // MagicNumber эксперта
//+------------------------------------------------------------------+
//| Модификация отложенных ордеров                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//-- объявление и инициализация запроса и результата
   MqlTradeRequest request={};
   MqlTradeResult  result={};
   int total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебор всех установленных отложенных ордеров
   for(int i=0; i<total; i++)
     {
      //--- параметры ордера
      ulong  order_ticket=OrderGetTicket(i);                             // тикет ордера
      string order_symbol=Symbol();                                      // символ
      int    digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS);  // количество знаков после запятой
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double volume=OrderGetDouble(ORDER_VOLUME_CURRENT);                // текущий объем ордера
      double sl=OrderGetDouble(ORDER_SL);                                // текущий Stop Loss ордера
      double tp=OrderGetDouble(ORDER_TP);                                // текущий Take Profit ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      int offset = 50;                                                   // отступ от текущей цены для установки ордера, в пунктах
      double price;                                                      // цена срабатывания ордера
      double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT);          // размер пункта
      //--- вывод информации об ордере
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  order_ticket,
                  order_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  DoubleToString(sl,digits),
                  DoubleToString(tp,digits),
                  magic);
      //--- если MagicNumber совпадает, Stop Loss и Take Profit не заданы
      if(magic==EXPERT_MAGIC && sl==0 && tp==0)
        {
         request.action=TRADE_ACTION_MODIFY;                           // тип торговой операции
         request.order = OrderGetTicket(i);                            // тикет ордера
         request.symbol   =Symbol();                                   // символ
         request.deviation=5;                                          // допустимое отклонение от цены
        //--- установка уровня цены, тейк-профит и стоп-лосс ордера в зависимости от его типа
         if(type==ORDER_TYPE_BUY_LIMIT)
           {
            price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_LIMIT)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_BUY_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         //--- отправка запроса
         if(!OrderSend(request,result))
            PrintFormat("OrderSend error %d",GetLastError());  // если отправить запрос не удалось, вывести код ошибки
         //--- информация об операции   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
         //--- обнуление значений запроса и результата
         ZeroMemory(request);
         ZeroMemory(result);
        }
     }
  }
//+------------------------------------------------------------------+

我试图理解黄色标示的那一行。一个问题马上出现了:如果这个例子与挂单有关 PositionGetDouble(POSITION_PRICE_OPEN) 与它有什么关系?也许,应该有一条这样的线。

DoubleToString(OrderGetDouble(ORDER_PRICE_OPEN),digits)
这是第一件事。当我试图在我设置了BUY_STOP挂单的图表上运行这个脚本时,第二个问题就出现了(尽管其他类型的挂单也会发生类似的情况)。那么,会发生什么?什么都没有发生!?我没有看到任何修改未决订单的情况。也许,我不明白什么?

我只在 "专家 "选项卡中发现这个问题。
2022.02.25 08:41:38.491 4 (EURUSD,M1)   #4727791  EURUSD  ORDER_TYPE_BUY_STOP  0.10  0.00000  sl: 0.00000  tp: 0.00000  [0]
尊敬的专家,请帮助我理解这个例子,为什么它在目录中,但它的代码却不工作?

问候,弗拉基米尔。

 
下午好。你能告诉我如何将存款提取 到卡上吗?
 
801765632 #:
你好。你能告诉我如何将存款提取 到卡上吗?

这是该交易平台开发商的网站。它不是一个经纪人,不是一个DC,没有真正的交易账户。

在页面底部清楚地这样说


请向你的经纪人提出这样的问题--你向你的交易账户转账的是谁。

 
801765632 #:
下午好。你能告诉我如何将存款提取 到卡上吗?
请联系你开立真实账户的经纪人。
 

亲爱的开发者们!为什么在第二次和第三次调用中,(T* const Ptr)被重载而不是(T* & Ptr)?

这是一个错误还是一个特点? b3213。


template <typename T>
void f1(T* const Ptr) {Print(__FUNCSIG__);}

template <typename T>
void f1(T* & Ptr) {Print(__FUNCSIG__);}


class X {};

void OnStart()
  {
   const X* Ptr = new X;

   f1(Ptr);                                //void f1<const X>(const X*&)
   f1((X*)Ptr);                            //void f1<X>(X*const)
   f1((const X*) Ptr);                     //void func_902::f1<const X>(const X*const)

   delete Ptr;
  }
 
Roman #:

PCM on graphic -> Templates -> Save template
文件名:default.tpl

默认情况下,有这样一个模板。我更换了它。没有任何帮助,唉。在切换到它或从它切换到另一个时,情况还是一样的。

你知道如何给开发者写信吗?当然,这已经向他们报告了几百次了,好吧,我再写。

 

当滚动时,信号中的标题就会骑上