MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1814

 
Maksim Efimov MACD 에서 신호선과 히스토그램의 교차점을 계산하려고 합니다. 아이디어는 다음과 같습니다. 각 새 막대에서 두 개의 이전 양초를 가져와 각각에 대한 표시기 값을 얻습니다. 두 번째 촛대의 MACD 값이 신호 값보다 크고 첫 번째 촛대의 MACD가 이미 신호 아래에 있고 전체 값이 0보다 높으면 상단에 교차가 있고 따라서 그 반대도 마찬가지입니다.

하지만 그 값을 받는 순간, 어쩐지 거대해진다. 또한, 단 하나 - 두 번째 촛불의 신호 라인. 어떤 정도, 4.5, 7 등의 줄에 8이 있을 수 있습니다. 다음 막대가 나타나면 새 막대에서 두 번째 막대의 신호선 값이 이미 정상일 수 있습니다. 나머지는 모두 맞습니다. 그리고 데이터 창에서 값도 정확합니다. 이유를 이해할 수 없습니다. 내가 무엇을 잘못하고 있지?

문제가 이중 변수에 있다는 느낌. 데이터 창의 값이 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를 반환합니다.