MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
Init는 어떤 식으로든 시작할 수 없으며 DeInit와 마찬가지로 표시기/EA가 시작될 때 한 번 자동으로 시작됩니다.
또는 정적 부울 변수를 만들어 IsConnected()와 함께 사용할 수 있습니다. 그리고 새로운 틱이 도착하여 연결이 복원되면 먼저 일종의 자체 초기화 기능을 실행합니다. True, IsConnected()는 OnCalculate()가 아니라 OnTimer()에서 사용해야 하지만 OnCalculate()의 맨 처음에 초기화 함수를 사용해야 합니다.
그러나 아무것도 바뀌지 않았습니다.
오류와 경고가 모두 남아 있습니다.
당신은 조각이 아니라 전체 코드를 제공합니다. 뭐, 모두가 추측해야 합니까? 그런 다음 여기에 질문하십시오. 여기 있는 모든 사람은 한 번에 모든 것을 알고 있습니다 .
나는 모든 코드를 제공합니다.
나는 모든 코드를 제공합니다.
그냥 거대하다...
모든 코드
"
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#속성 버전 "Cross20170703 1.00"
//================================================== ==========================
extern int Period_FastMA=4;
extern int Period_SlowMA=8;
외부 정수 MaxTickNum=30;
외부 정수 MaxAttempt = 10;
extern int k_slippage=1;
extern 더블 k_SL=10.0;//*포인트()
extern 더블 k_TP=30.0;//*포인트()
extern 더블 TrailDist=30.0;//*포인트()
외부 이중 k_lots=0.3;
extern 부울 ExFin=거짓;
정수//**************************************************** ***** ************************************
입술,
세다,
나,
다음틱=0,
시각,
핀타임,
BegMlSecTime,
EndMlSecTime,
델타 타임,
시도,
미끄러짐=5,
TickNum=0,
포스,
티켓,
MaxInterval1000,
CrossNum=0,
코미스=4,
애트,
시도,
오류;
더블 //**************************************************** ***** *******************************
총,
많이,
확산,
패스트마,
느린MA,
델타,
마지막 델타,
이전델타,
코미스=0.00004,
공개 가격,
가까운 가격,
에스엘,
티피,
이익,
이익;
부울//**************************************************** *** **********************************************
FirstCross=거짓,
NextCross=거짓,
CurType,
성공=참
활성화 = 참,
구걸,
BegDn,
BuyOpened=거짓,
SellOpened=거짓;
끈//*********************************************** ***** ********************************************* *
녹음,
str,
기록,
BegTimeCurrent,
종료 시간 현재,
커타임,
StrCur,
스트링베그,
문자열 끝;
//************************************************ ************************************************** ***************
//================================================== ==================================================== ===============================
//================================================== ==================================================== ================================
//================================================== ==================================================== ================================
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>>
//------------------------------------------------ -------------------------------------------------- --------------------------
//================================================== ==================================================== ===========================
int OnDeinit(const int res)
{
Alert("OnDeinit() 요청");
err=StringToInteger((문자열)err);
반환(res);
Alert("OnDeinit() 종료");
}
//OnDeinit();-----------
//------------------------------------------------ -------------------------------------------------- -----------------------
//================================================== ==================================================== =============================
무효 ExpertStop()
{
Alert("전문가 중지");
if((ExFin==true)&&(TickNum==MaxTickNum))
{
ExpertRemove();
OnDeinit(res);
}
} // ExpertStop 종료
//------------------------------------------------ -------------------------------------------------- ------------------------
//================================================== ==================================================== =========================
정수 오류 설명()
{
Alert("ErrorDescription 요청");
스위치(오류)
{ 경우 0: err="오류 없음"; 부서지다;
사례 1: err="오류는 없지만 결과는 알 수 없음"; 부서지다;
사례 2: err="일반 오류"; 부서지다;
사례 3: err="잘못된 매개변수"; 부서지다;
사례 4: err="거래 서버가 사용 중입니다"; 부서지다;
사례 5: err="클라이언트 터미널의 이전 버전"; 부서지다;
사례 6: err="거래 서버에 연결되지 않음"; 부서지다;
사례 7: err="권한이 충분하지 않음"; 부서지다;
사례 8: err="요청이 너무 자주 발생함"; 부서지다;
사례 9: err="서버를 방해하는 불법 작업"; 부서지다;
사례 64: err="계정 차단됨"; 부서지다;
사례 65: err="잘못된 계좌 번호"; 부서지다;
사례 128: err="거래 시간 초과 만료"; 부서지다;
사례 129: err="잘못된 가격"; 부서지다;
사례 130: err="잘못된 정지"; 부서지다;
사례 131: err="잘못된 볼륨"; 부서지다;
사례 132: err="시장 폐쇄"; 부서지다;
사례 133: err="거래 금지"; 부서지다;
case 134: err="작업을 완료하기에 충분한 돈이 없습니다"; 부서지다;
사례 135: err="가격이 변경되었습니다"; 부서지다;
사례 136: err="가격 없음"; 부서지다;
사례 137: err="브로커 사용 중"; 부서지다;
사례 138: err="새로운 가격"; 부서지다;
case 139: err="주문이 차단되어 이미 처리 중입니다."; 부서지다;
case 140: err="구매만 가능합니다"; 부서지다;
사례 141: err="요청이 너무 많습니다"; 부서지다;
case 145: err="주문이 시장에 너무 가깝기 때문에 수정이 허용되지 않습니다"; 부서지다;
사례 146: err="거래 하위 시스템 사용 중"; 부서지다;
case 147: err="중개인이 주문 만료 날짜를 사용하는 것을 금지합니다."; 부서지다;
case 148: err="진행 중인 주문 및 보류 중인 주문 수가 브로커가 설정한 한도에 도달했습니다.";break;
//
사례 4000: err="오류 없음"; 부서지다;
case 4001: err="잘못된 함수 포인터"; 부서지다;
case 4002: err="배열 인덱스가 범위를 벗어났습니다."; 부서지다;
case 4003: err="함수 스택에 대한 메모리가 없습니다"; 부서지다;
case 4004: err="재귀 호출 후 스택 오버플로"; 부서지다;
case 4005: err="스택에 매개변수를 전달할 메모리가 없습니다"; 부서지다;
case 4006: err="문자열 매개변수에 대한 메모리 부족"; 부서지다;
case 4007: err="임시 문자열에 대한 메모리 부족"; 부서지다;
사례 4008: err="초기화되지 않은 문자열"; 부서지다;
case 4009: err="배열의 초기화되지 않은 문자열"; 부서지다;
case 4010: err="문자열 배열에 대한 메모리 부족"; 부서지다;
case 4011: err="문자열이 너무 깁니다"; 부서지다;
사례 4012: err="나머지 0"; 부서지다;
사례 4013: err="0으로 나누기"; 부서지다;
사례 4014: err="알 수 없는 명령"; 부서지다;
사례 4015: err="잘못된 전환"; 부서지다;
사례 4016: err="초기화되지 않은 배열"; 부서지다;
사례 4017: err="DLL 호출이 허용되지 않음"; 부서지다;
case 4018: err="라이브러리를 로드할 수 없습니다"; 부서지다;
case 4019: err="함수를 호출할 수 없습니다"; 부서지다;
case 4020: err="외부 라이브러리 함수에 대한 호출은 허용되지 않습니다"; 부서지다;
case 4021: err="함수에서 반환된 문자열에 대한 메모리가 충분하지 않습니다"; 부서지다;
사례 4022: err="시스템 사용 중"; 부서지다;
case 4050: err="함수 매개변수의 수가 잘못되었습니다"; 부서지다;
case 4051: err="잘못된 함수 매개변수 값"; 부서지다;
case 4052: err="문자열 함수 내부 오류"; 부서지다;
사례 4053: err="배열 오류"; 부서지다;
case 4054: err="시계열 배열의 잘못된 사용"; 부서지다;
case 4055: err=" 사용자 지정 표시기 오류"; 부서지다;
case 4056: err="배열이 호환되지 않습니다"; 부서지다;
case 4057: err="전역 변수 처리 오류"; 부서지다;
case 4058: err="전역 변수를 찾을 수 없습니다"; 부서지다;
case 4059: err="테스트 모드에서 허용되지 않는 기능"; 부서지다;
case 4060: err="허용되지 않는 기능"; 부서지다;
case 4061: err="메일 보내기 오류"; 부서지다;
case 4062: err="문자열 매개변수가 필요합니다"; 부서지다;
case 4063: err="정수 매개변수가 필요합니다"; 부서지다;
사례 4064: err="이중 예상됨"; 부서지다;
case 4065: err="매개변수로 배열이 필요합니다"; 부서지다;
case 4066: err="업데이트 상태에서 요청된 기록 데이터"; 부서지다;
case 4067: err="거래 작업을 실행하는 동안 오류가 발생했습니다."; 부서지다;
case 4099: err="파일 끝"; 부서지다;
case 4100: err="파일 작업 중 오류"; 부서지다;
case 4101: err="잘못된 파일 이름"; 부서지다;
case 4102: err="열린 파일이 너무 많습니다"; 부서지다;
case 4103: err="파일을 열 수 없습니다"; 부서지다;
case 4104: err="호환되지 않는 파일 액세스 모드"; 부서지다;
case 4105: err="선택한 주문이 없습니다"; 부서지다;
case 4106: err="알 수 없는 문자"; 부서지다;
case 4107: err="거래 기능에 대한 잘못된 가격 매개변수"; 부서지다;
case 4108: err="잘못된 티켓 번호"; 부서지다;
case 4109: err="거래가 허용되지 않습니다. EA 속성에서 EA 거래 허용 옵션을 활성화해야 합니다."; 부서지다;
case 4110: err="긴 위치는 허용되지 않습니다. EA 속성을 확인해야 합니다."; 부서지다;
case 4111: err="짧은 위치는 허용되지 않습니다. EA 속성을 확인해야 합니다."; 부서지다;
case 4200: err="객체가 이미 존재합니다"; 부서지다;
case 4201: err="알 수 없는 개체 속성이 요청되었습니다"; 부서지다;
case 4202: err="객체가 존재하지 않습니다"; 부서지다;
case 4203: err="알 수 없는 개체 유형"; 부서지다;
case 4204: err="객체 이름이 없습니다"; 부서지다;
case 4205: err="객체 좌표 오류"; 부서지다;
case 4206: err="지정한 하위 창을 찾을 수 없습니다"; 부서지다;
기본값: err="객체 작업 중 오류";
}
Alert("오류 설명 종료");
리턴(오류);
}//ErrorDescription() 종료
//------------------------------------------------ -------------------------------------------------- ------------------------
//================================================== ==================================================== =========================
int GetNext(NextTick)
//>>>>>>>>>>>>>>>>>>>>>>
{
Alert("GetNext(NextTick) 요청");
경고(NextTick);
while(RefreshRates()==false)Count++;
Alert("Count=",Count,"NextTick=",NextTick);
알리다(" ");
경고(RefreshRates(),카운트,NextTick);
반환(NextTick);
경고(NextTick);
//-------------------
Alert("GetNext(NextTick) 종료");
}
// 종료 GetNext(NextTick)
//================================================== ==================================================== =========================
//------------------------------------------------ -------------------------------------------------- ------------------------
무효 OnTick()
{
//************************************
Alert("OnTick 요청");
//************************************
FastMA=NormalizeDouble(iMA(NULL,0,Period_FastMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_FastMA=4
SlowMA=NormalizeDouble(iMA(NULL,0,Period_SlowMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_SlowMA=8
GetNext(NextTick);
경고("NextTick=",NextTick);
Delta=NormalizeDouble(FastMA-SlowMA,Digits()); Alert("OnTick 요청");
경보(델타,숫자());
Alert("FastMA=",DoubleToStr(FastMA,Digits()),"SlowMA=",DoubleToStr(SlowMA,Digits()), "Delta=",DoubleToStr(Delta,Digits()));
Alert("OnTick 종료");
//------------------------------------------------ -------------------------------------------------- --------------------------
}// 종료(OnTick 종료)
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<
//------------------------------------------------ -------------------------------------------------- --------------------------
//================================================== ==================================================== ===========================
무효 초기화()
{
알리다(" ");
Alert("Init() 요청");
알리다(" ");
StringBeg=StringConcatenate("TimeToStr(TIME_DATE,TIME_SECONDS)=",TimeToStr(TIME_DATE,TIME_SECONDS));
경고(stringbeg);
레코드=StringConcatenate("MaxTickNum=",MaxTickNum);
경고(기록);
레코드=StringConcatenate("k_SL=",DoubleToStr(k_SL,Digits()));
경고(기록);
레코드=StringConcatenate("k_TP=",DoubleToStr(k_TP,Digits()));
경고(기록);
레코드=StringConcatenate("k_lots=",DoubleToStr(k_lots,Digits()));
경고(기록);
Alert("초기화 종료()");
}//Init() 종료
//------------------------------------------------ -------------------------------------------------- ------------------------
//================================================== ==================================================== =====================
int GetTick(NextTick)
{
Alert("GetTick을 요청하세요");
동안 (RefreshRates()==거짓)
다음틱++;
경고("NextTick=",NextTick);
주문선택(NextTick,SELECT_BY_TICKET);
이익=주문이익();
Alert(DoubleToStr(Profit, Digits));
GetNext(NextTick);
Alert("GetTick 종료");
}
//------------------------------------------------ -------------------------------------------------- -------------------------------------------------- ----
//================================================== ==================================================== ===========================
정수 다음 유형()
//>>>>>>>>>>>>>>>>>>>>>
{
Alert("NextType을 요청하세요");
if(OrderSelect(NextTick,SELECT_BY_TICKET)==true)
{
OpenPrice=주문OpenPrice();
ClosePrice=OrderClosePrice();
}
if(ClosePrice>OpenPrice)CurType=OP_BUY;
그렇지 않으면 CurType=OP_SELL;
반환(curType);
Alert("CurType() 종료");
//>>>>>>>>>>>>>>>>>>>>>>>>>
}//"CurType() 종료";
//------------------------------------------------ -------------------------------------------------- --------------------------
//================================================== ==================================================== =============================
bool FastMACrossUp()
{
if(!(Delta==LastDelta))Alert("Delta=",DoubleToStr(Delta,5),"LastDelta=",DoubleToStr(LastDelta,5));
Alert("LastDelta=",DoubleToStr(LastDelta,5));
Alert("!(Delta==LastDelta)=",!(Delta==LastDelta));
if(((Delta!=LastDelta) && (Delta>=0) && (LastDelta<=0)))Alert("( Delta!=LastDelta)&&(Delta>=0)&&(LastDelta<=0)= " ,
(Delta!=LastDelta) && (Delta>=0) && (LastDelta<=0));
Alert("(델타>=0)=",(델타>=0),"(LastDelta<=0)=",(LastDelta<=0));
if(Delta!=LastDelta)Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));
Alert("(델타>=0)=",(델타>=0)," ( LastDelta<=0)=",(LastDelta<=0)," TickNum=",TickNum);
Alert("(델타>=0)=",(델타>=0));
Alert("LastDelta<=",(LastDelta<=0));
Alert("!(Delta==LastDelta)&&((Delta>=0)&&(LastDelta<=0))=",!(Delta==LastDelta)&&((Delta>=0)&&(LastDelta<=0 )));
Alert(((델타!=마지막델타)&&((델타>=0)&&(마지막델타<=0))));
Alert("(Delta!=LastDelta)= ",(Delta!=LastDelta)," (Delta>=0)= ",(Delta>=0)," (LastDelta<=0)= ",(LastDelta<= 0));
return((델타!=마지막델타)&&(델타>=0)&&(마지막델타<=0));
} // FastMACrossUp() 종료
//------------------------------------------------ -------------------------------------------------- --------------------
//================================================== ==================================================== ====================
bool FastMACrossDn()
{
if(!(Delta==LastDelta)&&(Delta<=0)&&(LastDelta>=0))Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5)) ;
Alert("LastDelta=",DoubleToStr(LastDelta,5));
Alert("!(Delta==LastDelta)=",!(Delta==LastDelta));
경고("(델타<=0)=",(델타<=0));
Alert("마지막델타>=0",(마지막델타>=0));
if((Delta!=LastDelta) && (Delta<=0) && (LastDelta>=0))
Alert("(델타<=0)=",(델타<=0),"(LastDelta>=0)=",(LastDelta>=0));
Alert(" (Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0))= ",(Delta!=LastDelta) && (Delta<=0) && (LastDelta>=0));
if(Delta!=LastDelta)Alert(" Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));
Alert("(델타<=0)=",(델타<=0)," (LastDelta>=0)=",(LastDelta>=0)," TickNum=",TickNum);
Alert(" (Delta!=LastDelta)&&(( Delta<=0)&&(LastDelta>=0))= ",(Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0)) );
return((델타!=마지막델타)&&(델타<=0)&&(마지막델타>=0));
}//FastMACrossDn() 종료
//------------------------------------------------ -------------------------------------------------- --------------------------------------
//================================================== ==================================================== ====================================
bool FastMAIsAbove()
{
Alert("FastMAIsAbove()를 요청하세요");
Alert("(델타>=0)=",(델타>=0)," (LastDelta>=0)=",(LastDelta>=0));
if(((델타>=0)&&(마지막델타>=0)))
Alert(" FastMA= ",DoubleToStr(FastMA,5)," SlowMA= ",DoubleToStr(SlowMA,5));
Alert(" Delta= ",DoubleToStr(Delta,5)," LastDelta= ",DoubleToStr(LastDelta,5));
Alert("FastMAIsAbove() 종료");
Alert("(Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0)=",(Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0));
Alert("FastMAIsAbove() 종료");
return((델타==마지막델타)&&(델타>=0)&&(마지막델타>=0));
}//FastMAIsAbove() 종료
//================================================== ==================================================== =================
//------------------------------------------------ -------------------------------------------------- ------------------
bool FastMAIsBelow()
{
return((Delta==LastDelta)&&(Delta<=0)&&(LastDelta<=0));
}//FastMAIsBelow() 종료*/
"
//------------------------------------------------ -------------------------------------------------- ------------------
//************************************************ ** *****************************************
"
Init는 어떤 식으로든 시작할 수 없으며 DeInit와 마찬가지로 표시기/EA가 시작될 때 한 번 자동으로 시작됩니다.
또는 정적 부울 변수를 만들어 IsConnected()와 함께 사용할 수 있습니다. 그리고 새로운 틱이 도착하여 연결이 복원되면 먼저 일종의 자체 초기화 기능을 실행합니다. True , IsConnected()는 OnCalculate()가 아니라 OnTimer()에서 사용해야 하지만 OnCalculate()의 맨 처음에 초기화 함수를 사용해야 합니다.
감사합니다, 생각합니다. 이미 표준 솔루션이 있다고 생각했습니다 ......
모든 코드
감사합니다, 생각합니다. 이미 표준 솔루션이 있다고 생각했습니다 ......
나는 이미 이 사람의 말에 대한 반박글을 썼다. OnItit()은 일반적인 함수입니다. 필요할 때 실행하십시오.
모든 코드
글쎄, 나는 이미 말했다 - SRC 버튼을 사용하여 코드를 첨부하십시오. 실례합니다, 당신은 완전히 가르칠 수 없습니까?
말해봐, 누가 이 신발장을 보고 싶어하니?
나는 이미 이 사람의 말에 대한 반박글을 썼다. OnItit()은 일반적인 함수입니다. 필요할 때 실행하십시오.
글쎄, 그건 그렇고, 나는 연결할 때 왜 전화하지 않을까 생각했습니다. 당신이 할 수 있다는 것이 밝혀졌습니다 :-)
모든 코드
변수의 유형을 살펴보십시오.
불필요한 모든 경고를 버리십시오.