新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1856

 

一句话的建议。我在一个问题上犯了难。

iOpen 如何算作卖出或买入?

double DayOpenone = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 0), Digits);

double DayOpentwo = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 1), Digits); 

问题是,将今天的开盘价与昨天的开盘价相比较,似乎会造成价差错位,然后在代码中出现进一步的问题。 由于iOpen 的价格在某些日子里不正确,所以要么只有买入,要么只有卖出。

 
Порт-моне тв iOpen 如何算作卖出或买入?

问题是,将今天的开盘价与昨天的开盘价相比较,似乎会导致价差错位,然后我在代码中遇到问题。 我可以只进行买入或卖出交易,因为iOpen 的价格在某些日子不正确

该图表以买入价为基础

 

各位,请指教。

我正在编写一个多币种的EA,除了开单,一切都按计划进行。请告诉我问题出在哪里。

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

我没有得到任何错误,我只是没有打开订单

 
Sergey Dymov 一个多币种的EA,除了开单,一切都按计划进行。请告诉我问题出在哪里。

我没有得到任何错误,它只是没有打开订单

订单发送

返回的值

返回交易服务器分配给订单的票号,如果失败则返回-1。 要获得 错误信息,你需要调用GetLastError()

甚至编译器也告诉你,Ordersend应该被检查。

购买是通过Ask完成的。但它可能对Bid也有效,如果滑点至少与价差相等,这可能会使发现这个错误的难度增加。

 

一个多币种的EA,除了开单,一切都按计划进行。我正在寻找错误信息。

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

它没有给出任何错误,只是没有打开一个订单。

你注意到错误在哪里了吗?

       if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         int nDigits = (int)MarketInfo("USDJPY", MODE_DIGITS);
         OrderSend("USDJPY", OP_SELL, 0.1, NormalizeDouble(Bid1, nDigits), 3, NormalizeDouble((Ask1-StopLoss*Point1), nDigits), NormalizeDouble((Ask1+TakeProfit*Point1), nDigits), NULL, magic, 0, 0);
        }

https://docs.mql4.com/ru/trading/ordersend

Примечание

当开立市场订单(OP_SELL或OP_BUY)时,只有最新的Bid(卖出)或Ask(买入)价格可以作为开盘价。如果对某一金融工具进行操作,与当前工具不同,那么要获得该工具的最新报价,应该使用MarketInfo()函数,并加入MODE_BID或MODE_ASK参数。

你不能使用一个估计的或非正常化的价格。如果要求的开盘价不在价格流中,或者要求的价格没有 按照小数点后的位数 规范化,将产生错误129(ERR_INVALID_PRICE)。如果要求的开盘价严重过时,无论滑点参数的值如何,都会产生一个错误138(ERR_REQUOTE)。另一方面,如果要求的价格已经过期,但仍然存在于价格流中,那么订单将以当前价格开仓,而且只有当前价格在价格+滑点范围内。

...

为机器人设置一个独特的魔法也是可取的。

OrderSend - Торговые функции - Справочник MQL4
OrderSend - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrderSend - Торговые функции - Справочник MQL4
 
Mihail Matkovskij #:

开盘价不在价格流中,或者要求的价格没有按照小数点后的数字进行规范化,那么

据我所知,Ask和Bid已经正常化。类似的问题已经提出,而且没有矛盾。

止损和盈利的魔力和数字可能是合适的,但作者的意图不得而知。

 
Andrey Sokolov #:

据我所知,Ask和Bid已经正常化。类似的问题已经提出,而且没有矛盾。

也许提到魔术师和止损和盈利的数字是合适的,但我不知道作者的想法是什么。

据我所知,文件中没有提到这一点。所以,你最好采取预防措施。它不会使情况变得更糟。

关于SL和TP,它们被计算出来 了。因此,他们肯定 应该根据数位值进行规范化处理

 

朋友们好。

 
你能告诉我,如果故事上的利润是用蓝色圈出的,这是否包括佣金和交换?
 

下午好。

我如何获得 第二个和后续订单的开盘时间,因为OpenOrderTime()只给出了第一个时间,同时我如何获得第二个和后续订单的开盘价,因为OpenOrderPrice()的类似功能也给出了第一个订单的价格

原因: