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

 
Maksim Efimov MACD 上计算信号线和柱状图的交叉点。这个想法是这样的:在每个新的条形图上,我们采取之前的两个蜡烛,并得到每个蜡烛的指标值。如果第二根蜡烛上的MACD值大于信号值,而第一根蜡烛上的MACD值已经低于信号值,并且所有数值都高于零,这意味着在顶部有一个交叉点,反之亦然。

但是,在获得价值的那一刻,它变得莫名其妙地巨大。而且只有一条--第二根蜡烛的信号线。它可以是8到什么程度,4.5,7,等等。当下一个条形图出现时,从新条形图开始的第二个条形图的信号线的值已经可以正常。所有其他的人都变成了正确的。而在数据窗口中,该值也是正确的。我不能理解为什么。我做错了什么?

我有一种感觉,这是在说一个可变的双倍。因为数据窗口中的值是0,000081,但结果是8,1....., 同样的事情我注意到另一个值--在数据窗口中是0,000071,但在变量7,1.....。但它们都被定义为双变量。

评论中没有8个,有一个续篇。

Сomment(DoubleToString(CtrlMACD)+" "+DoubleToString(CtrlSignalMACD)+" "+DoubleToString(PrevMACD)+" "+DoubleToString(PrevSignalMACD));
 
Vitaly Muzichenko #:

评语中没有8个,但有一个续集。

谢谢你。这表明它是正确的。当然,是愚蠢的错误。但我还是想知道,为什么其他数值都显示正常,只有一个是歪的。

 
Maksim Efimov #:

谢谢你。这就是正确的做法。当然,是愚蠢的错误。但我还是想知道,为什么其他的数值都显示正常,只有一个是歪的。

它不是歪的,它在机器层面上是正确的,你看最后有 "e-08"。

例如,数字1e-05不是错误,而是0.00001

你必须使用DoubleToString来查看我们的习惯,无论如何程序都会正常工作的

阅读

Все калькуляторы
  • allcalc.ru
Онлайн калькулятор для перевода чисел в экспоненциальный вид и обратно, другим языком для вычисления чисел с буквой E. На компьютере (в частности в тексте компьютерных программ) экспоненциальную запись записывают в виде MEp (пример 1e-10), где: M — мантисса, E (exponent) — буква E, означающая «*10^» («…умножить на десять в степени…»), p — порядок. Это необходимо для представлении очень больших и очень малых чисел, а также для унификации их написания. Многие пользователи калькуляторов столкнулись с вопросом: Что означает буква "E" в цифровом калькуляторе? Это Экспоненциа́льная за́пись— представление действительных чисел в виде мантиссы и порядка. Удобна для записи очень больших и очень малых чисел.
 
Vitaly Muzichenko #:

它不是歪的,它在机器层面上是正确的,看到最后有一个 "e-08"。

例如,数字1e-05不是一个错误,它是0.00001

要看我们的习惯,你必须使用DoubleToString,反正程序会正常工作

阅读

再次感谢你们。我将阅读它。

 
在mql4中OrderSend()立即返回交易服务器的订单处理结果
在mql5中,这样的函数必须由自己来写?

 
Tretyakov Rostyslav #:

修正了它,现在可以工作了。当然这是不对的,但它是有效的。

{
              if(iTrailTakeProfit > 0.0)
                {
                tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits);
                if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return;
                tp = OrderTakeProfit();
                }else tp = 0.0;
              if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots());
                {
                 if(((NormalizeDouble((Bid - OrderOpenPrice()*Point),Digits) >= NormalizeDouble(((Bid - NormalizeDouble((iTrailStart * Point),_Digits))),_Digits) > OrderStopLoss() || OrderStopLoss()==0)));//true
                   {
                    if((OrderStopLoss() == 0.0 && NormalizeDouble(Bid - OrderStopLoss()* Point,Digits) < NormalizeDouble((Bid - NormalizeDouble((iTrailDist * Point),_Digits)),_Digits)));//true
                      {
                      if(iTrailStep > 0.0 && OrderStopLoss() >= 0.0 && NormalizeDouble(((Bid - OrderStopLoss() - iTrailDist * Point)),Digits) >= iTrailStep);//true
                        {
                         sl_lev = NormalizeDouble((Bid - iTrailDist * Point()),_Digits);
                         if(NormalizeDouble(Bid - sl_lev * Point,_Digits) < MarketInfo(Symbol(),MODE_STOPLEVEL));//false
                           {
                            if(!OrderModify(Forder,OrderOpenPrice(),NormalizeDouble(Bid - NormalizeDouble((iTrailStart * Point),_Digits),_Digits),tp,OrderExpiration()));
                            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
                           }
                        }
                      }
                   }
                }
             }

它不能正确地设置止损点,我怎样才能解决它?

 
Valeriy Yastremskiy #:

再看看杂志上的内容,原来是这样的)

起初我什么都没写,后来我开始按顺序寻找,结果发现有很多。

谢谢你。

 
Alexander Avksentyev #:

修正了它,现在可以工作了。当然这是不对的,但它是有效的。

它不能正确设置止动器,如何解决?

你从哪里得到这些数据?

OrderTakeProfit()
OrderProfit() + OrderSwap() + OrderCommission()
OrderOpenPrice()
OrderStopLoss()
 
Tretyakov Rostyslav #:

你从哪里得到这些数据?

来自授权书。

if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
       {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
          {
           if(OrderType() == OP_BUY) 
             {
              if(iTrailTakeProfit > 0.0)
                {
                tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits);
                if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return;
                tp = OrderTakeProfit();
                }else tp = 0.0;
              if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots());
 
secret 交易服务器的订单处理结果。
在mql5中,这样的函数必须自己写?

贸易交易的类型

MQL5也将立即返回

订单发送

如果订单被交易服务器成功接受,OrderSend()函数返回true。

原因: