[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 182

 
고문을 어떻게 주문할 수 있습니까?
 
dent :
고문을 어떻게 주문할 수 있습니까?
여기에서 주문할 수 있습니다: https://www.mql5.com/en/job
 
NaVolne :


왜 그런 겁니까?

EA는 각 틱을 처리하고 각 틱에서 주문을 확인하고 엽니다.... 마지막 열린 위치 의 시간을 기억하고 15분 동안 일시 중지하거나 바를 열거나 닫는 작업을 해야 합니다. 코드에서는 막대의 시간에 묶이는 것이 좋습니다.

 double OpenBar= 0 ; 
 
int start()
   {
     //Проверка на начало нового бара
     if (OpenBar==Time[ 0 ]) { return ;} else {OpenBar=Time[ 0 ];}
     //ваш код
   }
 
dent :
고문을 어떻게 주문할 수 있습니까?
 
OlegTs :
 double OpenBar= 0 ; 

 

int start()
   {
     //Проверка на начало нового бара
     double CurOpenBar= iOpen ( NULL , PERIOD_M15 , 0 );  
     if (OpenBar==CurOpenBar) { return ;} else {OpenBar=CurOpenBar;}
     //ваш код
   }


그런 것...

나쁜 예. 양초 시가는 반복될 수 있기 때문에. 하지만 시간이 없습니다.
 
MaxZ :
나쁜 예. 양초의 시가는 반복될 수 있기 때문에. 하지만 시간이 없습니다.

동의한다:)))
[Deleted]  
여러분, 정말 감사합니다. 무언가가 서서히 풀리기 시작하고 있습니다 :)
[삭제]  

MKL4를 마스터하고 테스트를 위한 Expert Advisor를 작성 하려고 합니다. 그런 질문들이 있었습니다.

1) 특정 쌍의 미닛 캔들 누락에 대한 분석 이력을 확인하는 절차가 있습니까? 절차가 이미 작성되어 온라인에서 사용할 수 있습니까?

2) 공백이 있거나 기록이 충분하지 않은 경우, 필요한 날짜에서 이 및/또는 다른 쌍에 대한 어드바이저로부터 미닛 캔들을 완전히 다운로드하거나 공백을 채우려면 어떻게 해야 합니까?

아이디어는 EA가 작업하는 동안 이력의 정확성을 확인하고 필요한 경우 간격이나 적은 수의 막대를 수정하는 것입니다.
[Deleted]  

프로그래밍 언어를 배우고 있는데 프로그램에서 이해할 수 없는 동작이 발생했습니다. 교재를 바탕으로 어드바이저를 작성했는데 조금 다른 작동 원리로 변경했습니다.

2 이동 평균을 기반으로 한 전문가 고문. 아이디어는 간단하고 이동 평균이 교차하고 주문이 닫히고 반대가 열립니다. 나는 고문을 썼고 잘 작동합니다. 물론 작은 마이너스이지만 아이디어에 따라. 전체 개그는 다음과 같습니다(굵게 강조 표시됨).

A=iMA(NULL,0,Period_MA_1,0 ,MODE_SMA, PRICE_CLOSE,1); // ㅏ

B=iMA(NULL,0,기간_MA_2,0, MODE_SMA ,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0, MODE_SMA ,PRICE_CLOSE,2); // 씨

D=iMA(NULL,0,기간_MA_2,0, MODE_SMA ,PRICE_CLOSE,2); // 디

이동 평균을 계산하는 방법(더하기가 표시될 수 있음)을 변경하자마자 간단한 방법( MODE_SMA ) 대신 지수 함수( MODE_EMA ) 와 다른 하나( MODE_SMMA )를 입력합니다. 부드러운 방법, 모든 것이 즉시 잘못됩니다. 작동 원리가 재미있어지면(전략 테스터에서) 고문은 주어진 기간의 맨 처음에 주문을 열고 마지막에 닫습니다. 저것들. 매년 그는 기간이 시작될 때 하나의 단일 거래를 시작하고 마지막에 닫습니다. 결과적으로 상담원은 나에게 플러스를 보여주었지만 나는 그런 플러스가 필요하지 않습니다. 나 자신은 동전을 던지고 매수 또는 매도 주문을 열 수 있으며, 1년 후에 플러스 또는 마이너스가 될 것인지 확인할 수 있습니다. 그런데 MODE_SMA 대신 MODE_LWMA ( 선형 가중 이동 평균)를 넣으면 프로그램이 제대로 작동합니다.

무슨 일인지 말해주세요? 결국 원리는 동일하며 이동 평균을 계산하는 방법이 약간 다를 뿐입니다.

전체 프로그램 코드는 다음과 같습니다.

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

//| 2개의 Movings.mq4 기반 |

//| Copyright © 2011, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

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

#property copyright "Copyright © 2011, MetaQuotes Software Corp."

#속성 링크 "http://www.metaquotes.net"



//------------------------------------------------ --------------- 하나 --

// M15의 숫자 값


extern int Period_MA_1=6; // MA 기간 1

extern int Period_MA_2=15; // MA 기간 2

외부 이중 로트=0.1; // 하드 코딩된 숫자 제비



bool 작업=true; // 전문가 고문이 작동합니다.

문자열 기호; // 금융의 이름. 도구

//------------------------------------------------ --------------- 2 --

정수 시작()

{

정수

Total, // 창의 주문 수

Tip=-1, // 유형이 선택되었습니다. 주문(B=0,S=1)

티켓; // 주문 번호

더블

가치. 끝에서 첫 번째 마디에 대한 MA_1

B, // 값. 끝에서 첫 번째 마디에 대한 MA_2

Price, // 선택한 주문의 가격

C, // 값. 끝에서 두 번째 마디의 경우 MA_1

D, // 값. 끝에서 두 번째 마디의 경우 MA_2

많은; // 수량 선택된 순서대로 로트

부울

Ans =false, // 종료 후 서버 응답

Cls_B=false, // Buy 마감 기준

Cls_S=false, // Sell 마감 기준

Opn_B=false, // 매수 개시 기준

Opn_S=거짓; // Sell 열기 기준

//------------------------------------------------ --------------- 삼 --

// 전처리

if(Bars < Period_MA_2) // 막대가 충분하지 않음

{

Alert("창에 막대가 부족합니다. Expert Advisor가 작동하지 않습니다.");

반품; // start()에서 종료

}

if(Work==false) // 치명적인 오류

{

Alert("심각한 오류입니다. Expert Advisor가 작동하지 않습니다.");

반품; // start()에서 종료

}

//------------------------------------------------ --------------- 4 --

// 주문에 대한 회계

기호=기호(); // fin.instr의 이름.

총=0; // 주문 수

for(int i=1; i<=OrdersTotal(); i++) // 순서를 통해 루프

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // 다음이 있는 경우

{ // 주문 분석:

if (OrderSymbol()!=Symb) 계속; // 핀란드어가 아닙니다. 도구

if (OrderType()>1) // 보류 중입니다.

{

Alert("대기 중인 주문이 감지되었습니다. Expert Advisor가 작동하지 않습니다.");

반품; // start()에서 종료

}

총++; // 시장 카운터 큰 떼거리

if (Total>1) // 하나 이상의 주문

{

Alert("여러 개의 시장 주문입니다. Expert Advisor가 작동하지 않습니다.");

반품; // start()에서 종료

}

티켓=OrderTicket(); // 선택된 번호. 주문.

Tip=주문유형(); // 선택한 주문의 유형입니다.

가격 = OrderOpenPrice(); // 가격이 선택되었습니다. 주문.

Lot=OrderLots(); // 랏 수

}

}

//------------------------------------------------ --------------- 5 --

// 거래 기준

A=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,1); // ㅏ

B=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,1); // B

C=iMA(NULL,0,Period_MA_1,0,MODE_SMA,PRICE_CLOSE,2); // 씨

D=iMA(NULL,0,Period_MA_2,0,MODE_SMA,PRICE_CLOSE,2); // 디


if (A<C&&C>D&&B>=A) // MA1 라인은 위에서 아래로,

{ // MA1과 MA2 교차

Opn_B=참; // 위에서 아래로

CLs_S=참; //

}

if (B<D&&D>C&&A>=B) // MA2 라인은 위에서 아래로 이동합니다.

{ // MA2가 MA1을 교차

Opn_S=참; // 위에서 아래로

Cls_B=참; //

}

//------------------------------------------------ --------------- 6 --

// 마감 주문

while(true) // 주문 마감 주기.

{

if (Tip==0 && Cls_B==true) // 매수 주문이 열렸습니다..

{ //종료 기준이 있습니다.

Alert("구매를 종료하려고 합니다. ",티켓,". 응답을 기다리는 중입니다..");

새로 고침(); // 데이터 업데이트

Ans=OrderClose(티켓, 로트, 입찰, 2); // 닫기 구매

if (Ans==true) // 알았습니다 :)

{

Alert("구매 주문 마감됨",티켓);

부서지다; // 닫기 루프에서 종료

}

if (Fun_Error(GetLastError())==1) // 오류 처리

계속하다; // 재시도

반품; // start()에서 종료

}


if (Tip==1 && Cls_S==true) // 매도 주문이 열렸습니다..

{ // 닫는 기준이 있습니다.

Alert("판매 종료 시도 ",티켓,". 응답을 기다리는 중입니다..");

새로 고침(); // 데이터 업데이트

Ans=OrderClose(티켓,로트,매도,2); // 닫기 판매

if (Ans==true) // 알았습니다 :)

{

Alert("판매 주문 마감됨",티켓);

부서지다; // 닫기 루프에서 종료

}

if (Fun_Error(GetLastError())==1) // 오류 처리

계속하다; // 재시도

반품; // start()에서 종료

}

부서지다; // 종료하는 동안

}

//------------------------------------------------ --------------- 7 --

//------------------------------------------------ --------------- 여덟 --

// 오픈 오더

while(true) // 주문 마감 주기.

{

if (Total==0 && Opn_B==true) // 주문을 엽니다. 아니 +

{ // 열린 기준 구입

새로 고침(); // 데이터 업데이트

Alert("구매를 열려고 합니다. 응답을 기다리는 중입니다..");

Ticket=OrderSend(Symb,OP_BUY,Lots,Ask,20,0,0,"2xMA Expert Advisor");//오픈 구매

if (티켓 > 0) // 성공 :)

{

Alert("구매 주문 오픈",티켓);

반품; // start()에서 종료

}

if (Fun_Error(GetLastError())==1) // 오류 처리

계속하다; // 재시도

반품; // start()에서 종료

}

if (Total==0 && Opn_S==true) // 주문을 엽니다. 아니 +

{ // 열린 기준 팔다

새로 고침(); // 데이터 업데이트

Alert("판매를 열려고 합니다. 응답을 기다리는 중입니다..");

Ticket=OrderSend(Symb,OP_SELL,Lots,Bid,20,0,0,"2xMA Expert Advisor");//Open Sel

if (티켓 > 0) // 성공 :)

{

Alert("판매 주문 오픈",티켓);

반품; // start()에서 종료

}

if (Fun_Error(GetLastError())==1) // 오류 처리

계속하다; // 재시도

반품; // start()에서 종료

}

부서지다; // 종료하는 동안

}

//------------------------------------------------ --------------- 아홉 --

반품; // start()에서 종료

}

//------------------------------------------------ -------------- 십 --

int Fun_Error(int Error) // 오류 처리 함수

{

스위치(오류)

{ // 피할 수 있는 오류

case 4: Alert("거래 서버가 바쁘다. 다시 시도해보자..");

수면(3000); // 간단한 솔루션

반환(1); // 함수 종료

case 135:Alert("가격이 변경되었습니다. 다시 시도해보세요..");

새로 고침(); // 데이터 업데이트

반환(1); // 함수 종료

case 136:Alert("가격이 없습니다. 새 틱을 기다리는 중입니다..");

while(RefreshRates()==false) // 다음 틱까지

수면(1); // 루프에서 지연

반환(1); // 함수 종료

case 137:Alert("브로커가 사용 중입니다. 다시 시도합니다..");

수면(3000); // 간단한 솔루션

반환(1); // 함수 종료

case 146:Alert("거래 하위 시스템이 사용 중입니다. 다시 시도하십시오..");

수면(500); // 간단한 솔루션

반환(1); // 함수 종료

// 치명적인 오류

사례 2: Alert("일반 오류입니다.");

리턴(0); // 함수 종료

사례 5: Alert("이전 터미널 버전입니다.");

작업=거짓; // 더 이상 작동하지 않음

리턴(0); // 함수 종료

case 64: Alert("계정이 차단되었습니다.");

작업=거짓; // 더 이상 작동하지 않음

리턴(0); // 함수 종료

case 133:Alert("거래가 금지됩니다.");

리턴(0); // 함수 종료

case 134:Alert("작업을 완료하기 위한 자금이 충분하지 않습니다.");

리턴(0); // 함수 종료

기본값: Alert("오류가 발생했습니다. ",Error); // 다른 옵션

리턴(0); // 함수 종료

}

}

//------------------------------------------------ -------------- 열하나 --



 
neisseria :

프로그래밍 언어를 배우고 있는데 프로그램에서 이해할 수 없는 동작이 발생했습니다. 교재를 바탕으로 어드바이저를 작성했는데 조금 다른 작동 원리로 변경했습니다.



오더를 마감할 때 토탈을 줄이는 것도 좋겠지만 머리를 급하게 하지 말고 기호와 마법으로 열린 오더의 수를 반환하는 함수를 만드는 것이 좋습니다.

4개의 이동 평균 은 과잉이며 두 기간 및 다른 오프셋으로 의미가 있습니다. 화면에 표시하고 어떻게 동작하는지 확인하는 것이 좋습니다.