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

 
Mikhail :

내가 다음과 같이 요청할 때:

나는이 결과를 얻는다 :

2020.06.17 13:49:53.270 2020.01.02 06:50:00 기호 EURUSD_i 자릿수 5 포인트 1e-05

내가 다음과 같이 요청할 때:

나는이 결과를 얻는다 :

2020.06.17 13:51:58.787 2020.01.02 06:45:00 기호 EURUSD_i 자릿수 0 포인트 0.0

동시에 인쇄 기능 을 삽입하지 않으면 오류가 전혀 발생하지 않으며 주문 수정을 시도하지도 않는다는 점에 유의하고 싶습니다. CTrade가 내 주문을 보지 않는 것과 같습니다.

기호 및 매직 넘버 확인 실패:

결과:

2020.06.17 14:37:38.147 2020.01.02 06:50:00 심볼 매직 0 티켓 2

마법은 유로 달러 기호인 12345여야 합니다.

심볼과 마법을 얻을 수 없는 이유는 무엇입니까?

다음과 같은 경우:

로 변경

매직 넘버로 수표를 제거하면 가격에 문제가 있습니다.

[2020.06.17 01:38:24.136 2020.01.02 07:40:00 주문 수정 #2 매수 스톱 0.1 EURUSD_i at 1.12086 sl: 1.12023 tp: 1,0vali price 1.12023 tp: 1,0sl.0.12275 -> 0.0sl

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend: 1.00000에서 #2 수정 (sl: 1.00000 tp: 1.00000) [잘못된 가격]

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP 수정 실패! 결과 Retcode: 10015, Retcode에 대한 설명: 잘못된 가격

나는 이미 내 머리를 부러뜨렸다. 다른 고문의 동일한 코드가 쾅 작동한다는 사실에도 불구하고.

내가 무엇을 잘못하고 있지?

CSymbolInfo 클래스의 개체를 잘못 초기화했거나 전혀 초기화하지 않았습니다.

그런 줄이 없으면 symbol.Name(Symbol()) 추가하십시오.

그렇다면 이름(문자열 기호) 함수에서 무슨 일이 일어나고 있는지 디버그하십시오.

Refresh() 함수에서 m_digits 필드 등을 채우십시오.

추신 추가한 것으로 판단하면 초기화되지 않은 기호가 있습니다.

 
Mikhail :

새 틱이 도착할 때까지 버튼은 움직이지 않습니다. 이것은 내 눈으로 보는 것입니다. 가격이 변경되자마자 버튼이 움직였다.

오늘은 새 틱에서도 버튼이 다시 그리기를 멈췄지만 아무 것도 변경하지 않았습니다. 배경만 움직입니다.

나는 설명합니다 - 당신이 말했듯이, 당신은 OnTick에서 좌표를 변경하고 버튼이 실제로 NEXT 틱에서 움직인다고 말합니다. 다음은 무엇에서? 좌표를 변경 한 곳에서 또는 그리스도의 탄생에서?

 
Aleksey Mavrin :

CSymbolInfo 클래스의 개체를 잘못 초기화했거나 전혀 초기화하지 않았습니다.

그런 줄이 없으면 symbol.Name(Symbol()) 추가하십시오.

그렇다면 이름(문자열 기호) 함수에서 무슨 일이 일어나고 있는지 디버그하십시오.

Refresh() 함수에서 m_digits 필드 등을 채우십시오.

추신 추가한 것으로 판단하면 초기화되지 않은 기호가 있습니다.

코드 맨 위에는 다음 줄이 있습니다.
 #include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Trade\SymbolInfo.mqh>

CTrade atrade;
COrderInfo aorder;
CPositionInfo apos;
CDealInfo adeal;
CSymbolInfo asymbol;

초기화인가요? 컴파일 할 때 다음 정보를 얻습니다.

'거래용 패널.mq5' 거래 패널.mq5 하나 하나

'Trade.mqh' 무역.mqh 하나 하나

'오브젝트.mqh' 개체.mqh 하나 하나

'StdLibErr.mqh' StdLibErr.mqh 하나 하나

'주문정보.mqh' 주문정보.mqh 하나 하나

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 하나 하나

'위치정보.mqh' 위치정보.mqh 하나 하나

'딜인포.mqh' DealInfo.mqh 하나 하나

' 심볼 인포 .mqh' SymbolInfo.mqh 하나 하나

코드 생성 하나 하나

오류 0개, 경고 0개, 3192밀리초 경과 하나 하나

Buy Stop 주문을 연 후 모든 주문을 다시 계산하고 미결 주문을 선택하고 기호와 매직 넘버가 일치하는지 확인합니다.

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
           if (aorder.SelectByIndex(i))  
              if (aorder. Symbol ()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen())

이 단계에서는 아무 일도 일어나지 않습니다. 위에서 이미 썼듯이 asymbol.Name() 함수는 어떤 이유로 열린 주문의 기호를 반환하지 않고 aorder.Magic() 함수는 값 0을 반환합니다(내 마법은 121345이지만) , asymbol.TickSize() 함수는 값 0을 반환합니다. 즉, 검사가 통과하지 않으므로 주문에 대한 추가 작업이 종료됩니다. " 이름(문자열 기호) 함수에서 무슨 일이 일어나고 있는지 디버그"에 대해 설명해 주세요. 이 문구가 잘 이해가 되지 않습니다. 무엇을 어디에 추가해야 합니까?

 
Aleksey Mavrin :

나는 설명합니다 - 당신이 말했듯이, 당신은 OnTick에서 좌표를 변경하고 버튼이 실제로 NEXT 틱에서 움직인다고 말합니다. 다음은 무엇에서? 좌표를 변경 한 곳에서 또는 그리스도의 탄생에서?

순서는 다음과 같다고 생각합니다. 새 틱이 오고, 패널 좌표를 변경하고, 패널 배경이 필요한 위치로 이동하기 시작하고, 그 때 버튼이 정지하고, 새 틱이 오고 버튼이 오른쪽으로 이동합니다. 패널 다음 위치. 그리고 그리스도의 탄생으로부터 직접 생성될 수 있는 티키는 무엇입니까?
 
Mikhail :

이 단계에서는 아무 일도 일어나지 않습니다. 위에서 이미 썼듯이 asymbol.Name() 함수는 어떤 이유로 열린 주문의 기호를 반환하지 않고 aorder.Magic() 함수는 값 0을 반환합니다(내 마법은 121345이지만) , asymbol.TickSize() 함수는 값 0을 반환합니다. 즉, 검사가 통과하지 않으므로 주문에 대한 추가 작업이 종료됩니다. " 이름(문자열 기호) 함수에서 무슨 일이 일어나고 있는지 디버그"에 대해 설명해 주세요. 이 문구가 잘 이해가 되지 않습니다. 무엇을 어디에 추가해야 합니까?

주문의 인덱스/ 티켓 의 오류는 매직 0으로 판단될 수 있습니다. 주문 구조에 액세스할 때 잘못된 주문의 데이터가 거기에 기록됩니다. 선택 주기에서 다음 번호가 필요한 번호가 아니라 마지막 주문 선택으로 가는 경우가 있습니다. 마지막 orderselect의 데이터는 주문 구조에서 반환됩니다.

 
Mikhail :
코드 맨 위에는 다음 줄이 있습니다.

초기화인가요? 컴파일 할 때 다음 정보를 얻습니다.

'거래용 패널.mq5' 거래 패널.mq5 하나 하나

'Trade.mqh' 무역.mqh 하나 하나

'오브젝트.mqh' 개체.mqh 하나 하나

'StdLibErr.mqh' StdLibErr.mqh 하나 하나

'주문정보.mqh' 주문정보.mqh 하나 하나

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 하나 하나

'위치정보.mqh' 위치정보.mqh 하나 하나

'딜인포.mqh' DealInfo.mqh 하나 하나

'SymbolInfo.mqh' SymbolInfo.mqh 하나 하나

생성된 코드 하나 하나

오류 0개, 경고 0개, 3192밀리초 경과 하나 하나

Buy Stop 주문을 연 후 모든 주문을 다시 계산하고 미결 주문을 선택하고 기호와 매직 넘버가 일치하는지 확인합니다.

이 단계에서는 아무 일도 일어나지 않습니다. 위에서 이미 썼듯이 asymbol.Name() 함수는 어떤 이유로 열린 주문의 기호를 반환하지 않고 aorder.Magic() 함수는 값 0을 반환합니다(내 마법은 121345이지만) , asymbol.TickSize() 함수는 값 0을 반환합니다. 즉, 검사가 통과하지 않으므로 주문에 대한 추가 작업이 종료됩니다. " 이름(문자열 기호) 함수에서 무슨 일이 일어나고 있는지 디버그"에 대해 설명해 주세요. 이 문구가 잘 이해가 되지 않습니다. 무엇을 어디에 추가해야 합니까?

젠장, 알 수 없는 걸 왜 쓰는 거야 (강력한 여행가방이라면))

그리고 당신은 그들이 쓰는 것을 읽을 생각조차 하지 않습니다

그런 줄이 없으면 asymbol.Name( Symbol() ) 추가하십시오.

추신 초기화가 무엇인지 설명하고 싶었지만 분명히 쓸모가 없을 것입니다.
 
Valeriy Yastremskiy :

주문의 인덱스/ 티켓 의 오류는 매직 0으로 판단될 수 있습니다. 주문 구조에 액세스할 때 잘못된 주문의 데이터가 거기에 기록됩니다. 선택 주기에서 다음 번호는 필요한 번호가 아니라 마지막 주문 선택으로 갈 수 있습니다. 마지막 orderselect의 데이터는 주문 구조에서 반환됩니다.

나는 아직도 왜이 결함이 발생하는지 이해할 수 없습니다. 결과적으로 버튼이 있는 패널을 생성하는 코드를 가져와서 동일한 코드가 제대로 작동하고 모든 것이 작동하는 Expert Advisor에 코드를 다시 작성했습니다. 어쨌든 감사합니다!
 

안녕하세요!

간단한 문제를 해결하도록 도와주세요.

갭 카운터. 10점 이상 차이를 계산하고 싶습니다.

 int start()
{
int gap= 0 ;
int r= MathAbs (Close[ 2 ]-Open[ 1 ])/ Point ;
if (r>= 10 )
{
gap=gap+ 1 ;
}
Comment ( "ГЭП!========: " ,gap, "\n" ,
         "ВЕЛИЧИНА ГЭПА==: " ,r, "\n" );
return ( 0 );

"gap" 변수는 0으로 재설정됩니다. 왜 그런지 이해가 안됩니다. 나는 아직 그것을 시도하지 않았습니다. 삽입된 주기 및 정적 - 도움이 되지 않습니다. 주기가 잘못 쓰여진 것 같습니다.

 
Alexey Belyakov :

안녕하세요!

간단한 문제를 해결하도록 도와주세요.

갭 카운터. 10점 이상 차이를 계산하고 싶습니다.

"gap" 변수는 0으로 재설정됩니다. 왜 그런지 이해가 안됩니다. 나는 아직 그것을 시도하지 않았습니다. 삽입된 주기 및 정적 - 도움이 되지 않습니다. 주기가 잘못 쓰여진 것 같습니다.

gap 변수는 시작 함수의 범위에 있으며 각 새 틱마다 0으로 다시 초기화됩니다.

 
Alexey Belyakov :

안녕하세요!

간단한 문제를 해결하도록 도와주세요.

갭 카운터. 10점 이상 차이를 계산하고 싶습니다.

"gap" 변수는 0으로 재설정됩니다. 왜 그런지 이해가 안됩니다. 나는 아직 그것을 시도하지 않았습니다. 삽입된 주기 및 정적 - 도움이 되지 않습니다. 주기가 잘못 쓰여진 것 같습니다.

 int gap= 0 ;
int start()
{
int r= MathAbs (Close[ 2 ]-Open[ 1 ])/ Point ;
if (r>= 10 )
{
gap++;
}
Comment ( "ГЭП!========: " ,gap, "\n" ,
         "ВЕЛИЧИНА ГЭПА==: " ,r, "\n" );
return ( 0 );
 int start()
{
static int gap= 0 ;
int r= MathAbs (Close[ 2 ]-Open[ 1 ])/ Point ;
if (r>= 10 )
{
gap=gap+ 1 ;
}
Comment ( "ГЭП!========: " ,gap, "\n" ,
         "ВЕЛИЧИНА ГЭПА==: " ,r, "\n" );
return ( 0 );