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

 
Igor Makanu :

당신의 예에는 많은 실수가 있습니다

해야한다:

여기 가격은 정규화되지 않았습니다. OrderSend(Symbol(),OP_BUY,Lots,Ask,3, Bid-SL*Point,Bid+TP*Point, "My order",MagicNumber,0,clrGreen);

여기서 논리가 전혀 명확하지 않습니다. 조건이 false인 경우 OnTick()을 종료하는 이유는 무엇입니까?

아마도 주문 을 통해 정렬하는 주기를 계속하고 주문이 몇 개인지 계산 해야 할 것입니다.

IMHO를 검색하거나 KB에서 "KimIV의 유용한 기능만"으로 주제를 찾거나 주문을 계산하고 새로운 주문을 하여 조언자를 만드는 방법을 참조하십시오. 귀하의 예는 논리가 매우 간단하며 앞으로 수정하기 어려울 것입니다. 다른 작업을 위해 ... 글쎄, 아마도 그는 나사를 조이고 싶어 할 것입니다.

아직 이르다)))) 한 번에 많이 있을 것이다. 거기에는 의미가 없습니다.))))) 그리고 예, 물론 계산 후에는 발신자가해야 하는 모든 작업에 정규화가 필요합니다.)))

주문에는 조건이 있는데, 현재 악기에 우리의 마법으로 주문이 없으면 주문을 합니다. 그리고 그 조건은 그것이 닫힐 때까지 주문의 위치에 도달하지 않을 것입니다.

PS는 조건이 마음에 들지 않는 경우.

 

인사말! 표현 읽는 법을 알려주세요

 string sym=(symbol== NULL ? Symbol () : symbol);
 
Galim_V :

인사말! 표현 읽는 법 알려주세요

기호 변수가 비어 있으면 현재 차트 기호의 값을 sym 변수 로 반환하고 비어 있지 않으면 해당 값을 sym 변수로 전송합니다.

 
Vladimir Pastushak :

기호 변수가 비어 있으면 현재 차트 기호의 값을 sym 변수 로 반환하고 비어 있지 않으면 해당 값을 sym 변수로 전송합니다.

덕분에!

 
Galim_V :

인사말! 표현 읽는 법 알려주세요

다음과 같이 읽습니다. symbol이 NULL이면 변수에 Symbol() 값을 할당하고 그렇지 않으면 symbol 값을 할당합니다 .

이 항목에 해당

 string sym;
if (symbol == NULL )
sym = Symbol ();
else
sym = symbol;
차이점은 라인 수에만 있습니다.
 
Alexey Viktorov :

다음과 같이 읽습니다. symbol이 NULL이면 변수에 Symbol() 값을 할당하고 그렇지 않으면 symbol 값을 할당합니다 .

이 항목에 해당

차이점은 라인 수에만 있습니다.

고맙습니다!

 
Valeriy Yastremskiy :

그리고 예를 들어, 유로 벅스가 아닌 유로 파운드의 경우 선택한 주문의 기호를 유로 벅스와 비교하는 창이 열려 있습니다. 참이면 유로 벅스에 대한 주문이 있고 우리의 마법이 있으면 반환 Onstart 기능에서, 그리고 그렇지 않은 경우 우리는 유로백에 주문을 넣지만 유로파운드에 대해 종가, 고가, 매수가, 입찰가를 갖게 됩니다. 이러한 도구에 대한 입찰과 요청이 다르기 때문에 주문을 열 때 오류가 발생합니다. 그리고 Symbol()은 현재 창의 기호를 반환하며 오류는 발생하지 않습니다.

그리고 메타에디터의 템플릿을 사용하면 왼쪽 상단에 만들기 버튼이 있습니다. OnStart 함수는 여전히 사용되지만 이것은 정확하지 않지만 OnStart는 스크립트용입니다. 올바른 템플릿입니다.

올바른 코드입니다. 주문에 대한 설명을 놓쳤고 코드의 마법이 고려되지 않았습니다. 여는 줄에 대한 경고에서 숫자를 문자열로 암시적 유형 변환!!!

예, 정상적으로 작동합니다. 고맙습니다!

템플릿에 따라 만드는 것이 그렇게 중요한지 몰랐습니다. OnStart - 실제로. 내 기본 구조가 잘못되었습니다. 자, 이제 알겠습니다.

 
Alexey Belyakov :

예, 정상적으로 작동합니다. 고맙습니다!

템플릿에 따라 만드는 것이 그렇게 중요한지 몰랐습니다. OnStart - 실제로. 내 기본 구조가 잘못되었습니다. 자, 이제 알겠습니다.

음, 주문 작업 기능에 삽입하는 모든 것은 정규화되어야 합니다. 소수점 뒤에 6자리가 있을 경우 주문이 되지 않고 오류가 발생합니다.

검색을 통해 "KimIV의 유용한 기능만" 주제를 찾거나 KodoBase에서 찾아보세요.

Igor Makanu 는 위에서 더 많은 오류를 작성했습니다. 그리고 Kim의 기능은 시작하는 데 정말 유용합니다. 이해할 수 있는 댓글.

 

도와주세요. 테스트할 때 오류가 발생하는 이유 - "" 2020.08.13 13:09:11.393 2018.08.01 00:00:00 123456 GBPUSD,M30: 배열이 '123456.mq4'(59,13)의 범위를 벗어났습니다. (59,13)""" ????


#property copyright "2020, 그레이."

#속성 링크 "uirnP0215@mail.ru"

#속성 버전 "1.00"

#속성엄격


입력 더블 로트 = 0.01;

입력 정수 매직 = 1546;



이중 ibufUP[];

이중 ibufDN[];


//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

int OnInit()

{


반환(INIT_SUCCESSED);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

무효 OnDeinit(const int 이유)

{

//---


}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

카운트프랙탈();

if(ibufUP[3]>0)

{

if(!OrderSend(Symbol(), OP_SELL, lot, Bid, 30, 0, 0, "", Magic, 0, clrRed))

Print("판매 주문을 열지 못했습니다.");

}

if(ibufDN[3]>0)

{

if(!OrderSend(Symbol(), OP_BUY, lot, Bid, 30, 0, 0, "", Magic, 0, clrGreen))

Print(" 구매 주문 을 열지 못했습니다. ");

}



}

//+----------------------------------------------- --------------------+

//+----------------------------------------------- --------------------+

무효 CountFractals()

{

for(int i=150; i>=0; i--)

{

ibufUP[i] = iFractals(NULL, 0, MODE_UPPER, i);

ibufDN[i] = iFractals(NULL, 0, MODE_LOWER, i);

}

}

//+----------------------------------------------- --------------------+



 
Madmas :

도와주세요. 테스트할 때 오류가 발생하는 이유 - "" 2020.08.13 13:09:11.393 2018.08.01 00:00:00 123456 GBPUSD,M30: '123456.mq4'(59.13)의 범위를 벗어난 배열"(59.13)""" ????


#property copyright "2020, 그레이."

#속성 링크 "uirnP0215@mail.ru"

#속성 버전 "1.00"

#속성엄격


입력 더블 로트 = 0.01;

입력 정수 매직 = 1546;



이중 ibufUP[];

이중 ibufDN[];


//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

int OnInit()

{


반환(INIT_SUCCESSED);

}

//+----------------------------------------------- --------------------+

//| 전문적인 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

무효 OnDeinit(const int 이유)

{

//---


}

//+----------------------------------------------- --------------------+

//| 전문가 틱 기능 |

//+----------------------------------------------- --------------------+

무효 OnTick()

{

카운트프랙탈();

if(ibufUP[3]>0)

{

if(!OrderSend(Symbol(), OP_SELL, lot, Bid, 30, 0, 0, "", Magic, 0, clrRed))

Print("판매 주문을 열지 못했습니다.");

}

if(ibufDN[3]>0)

{

if(!OrderSend(Symbol(), OP_BUY, lot, Bid, 30, 0, 0, "", Magic, 0, clrGreen))

Print(" 구매 주문 을 열지 못했습니다. ");

}



}

//+----------------------------------------------- --------------------+

//+----------------------------------------------- --------------------+

무효 CountFractals()

{

for(int i=150; i>=0; i--)

{

ibufUP[i] = iFractals(NULL, 0, MODE_UPPER, i);

ibufDN[i] = iFractals(NULL, 0, MODE_LOWER, i);

}

}

//+----------------------------------------------- --------------------+



먼저 CountFractals 함수에서 감소 카운터를 설정합니다.