MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1814

 
Maksim Efimov MACDで クロスオーバーを計算しようとしているのですが、どうすればいいのでしょうか?このアイデアは、新しいバーごとに、2つ前のローソク足を取り、それぞれの指標値を取得することです。2番目のキャンドル上のMACD値が信号値よりも大きく、最初のキャンドル上のMACD値がすでに信号の下にあり、すべての値が0を超えている場合、それは上にクロスオーバーがあることを意味し、逆も同様である。

しかし、その価値を手に入れる瞬間は、なんだかとても大きなものになるのです。そしてたった一つ、2本目のローソク足のシグナルライン。どの程度までなら8、4.5、7などでもよい。次のバーが現れたとき、新しいバーから2本目のバーのシグナルラインの値はすでに正常であることができます。他はすべて正しいことが判明。また、データウィンドウでは、値が正しく表示されています。その理由がわからない。私は何を間違えているのだろう?

可変ダブルのことかなという感じはします。データウィンドウの値は0,000081ですが、それは8,1....、私は別の値で気づいた同じことなので - データウィンドウ0,000071で、しかし変数で7,1......しかし、それらはすべてダブル変数として定義されています。

コメントに8がない、続きがある。

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

コメンタリーで8はないけど、続編があるんだよね。

ありがとうございます。これで正しく表示されます。もちろん、愚かなミスだ。しかし、他の値は正常に表示されるのに、なぜ1つだけ曲がっているのか、いまだに不思議です。

 
Maksim Efimov #:

ありがとうございます。それが正しいやり方だと思います。もちろん、愚かなミスです。しかし、他の値は正常に表示されるのに、なぜ1つだけ曲がっているのか、いまだに不思議でなりません。

曲がっているわけではなく、機械レベルでは正しいのですが、最後に「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を返します。