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

 
buyanov :

그러나 아무것도 바뀌지 않았습니다.

오류와 경고가 모두 남아 있습니다.

당신은 조각이 아니라 전체 코드를 제공합니다. 뭐, 모두가 추측해야 합니까? 그런 다음 여기에 질문하십시오. 여기 있는 모든 사람은 한 번에 모든 것을 알고 있습니다 .

 

나는 모든 코드를 제공합니다.

Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
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
 
buyanov :

나는 모든 코드를 제공합니다.

그냥 거대하다...

 

모든 코드

"

#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() 종료*/

"

//------------------------------------------------ -------------------------------------------------- ------------------

//************************************************ ** *****************************************

"


 
Dmitriy Voevodkin :

Init는 어떤 식으로든 시작할 수 없으며 DeInit와 마찬가지로 표시기/EA가 시작될 때 한 번 자동으로 시작됩니다.

또는 정적 부울 변수를 만들어 IsConnected()와 함께 사용할 수 있습니다. 그리고 새로운 틱이 도착하여 연결이 복원되면 먼저 일종의 자체 초기화 기능을 실행합니다. True , IsConnected()는 OnCalculate()가 아니라 OnTimer()에서 사용해야 하지만 OnCalculate()의 맨 처음에 초기화 함수를 사용해야 합니다.


감사합니다, 생각합니다. 이미 표준 솔루션이 있다고 생각했습니다 ......

 
buyanov :

모든 코드

와, 알림이 굉장합니다.
 
Mihail Marchukajtes :

감사합니다, 생각합니다. 이미 표준 솔루션이 있다고 생각했습니다 ......

나는 이미 이 사람의 말에 대한 반박글을 썼다. OnItit()은 일반적인 함수입니다. 필요할 때 실행하십시오.

 
buyanov :

모든 코드


글쎄, 나는 이미 말했다 - SRC 버튼을 사용하여 코드를 첨부하십시오. 실례합니다, 당신은 완전히 가르칠 수 없습니까?

말해봐, 누가 이 신발장을 보고 싶어하니?

 
Artyom Trishkin :

나는 이미 이 사람의 말에 대한 반박글을 썼다. OnItit()은 일반적인 함수입니다. 필요할 때 실행하십시오.


글쎄, 그건 그렇고, 나는 연결할 때 왜 전화하지 않을까 생각했습니다. 당신이 할 수 있다는 것이 밝혀졌습니다 :-)

 
buyanov :

모든 코드


변수의 유형을 살펴보십시오.

불필요한 모든 경고를 버리십시오.

파일:
test.mq4  42 kb
사유: