[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 :
나쁜 예. 양초의 시가는 반복될 수 있기 때문에. 하지만 시간이 없습니다.

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

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

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

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

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

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

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