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

 
STARIJ :
아래는 이렇습니다.

그래픽 개체에 대한 마우스 클릭 이벤트

CHARTEVENT_OBJECT_CLICK

X 좌표

Y 좌표

이벤트가 발생한 그래픽 개체의 이름


와우, 모든 것이 괜찮은 것 같습니다)
도와주셔서 감사합니다!

 

"r"의 결과를 버퍼에 바인딩하여 차트에 표시하는 방법을 모르겠습니다. 알려주세요.

나는 교과서에서 예를 배울 수 없어 사람들에게 물었다.

write - ""p"의 값이 버퍼에 기록되고 차트에 표시됩니다." "일반적으로 버퍼는 for 루프를 통해 작성됩니다."

그러나 그것은 나에게 아무 말도하지 않습니다!

하나의 결과는 문자 "r"이고 그게 전부입니다. 어디에서도 찾을 수 없습니다.


하나 더

예를 들어 "r"의 결과를 매끄럽게 하는 방법

관심을 가져주셔서 감사합니다!
 

실수는 어디에 있습니까? 테스터에서 실행할 때 함수 는 보류 주문을 삭제 하지만 때로는 삭제하지 않습니다. 왜요? 작동 원리는 다음과 같습니다. 구매 주문이 TP에 의해 마감되면 BuyLimit이 제거됩니다. 말하다

 ////+------------------DELETE BUYLIM-----------------------------------+
   if ((SchBuyLimLots( Symbol ())-SchBuyLots( Symbol ()))!= 0 )                   //  лот байлимит НЕ лот бая
     {     
       for ( int i= 0 ;i< OrdersTotal ();i++)
        {
         datetime T_op= 0 ,T_lim= 0 ,buys= 0 ;
         if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )== false ) break ;
         if ( OrderMagicNumber ()!=MAGIC || OrderSymbol ()!=SMB_) continue ;
         if ( OrderType ()== OP_BUY )
         if ( OrderCloseTime ()>buys) buys+= OrderCloseTime ();
         buys= OrderCloseTime ();
         T_op=buys;                                                       //  время закрытия бая
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
         if ( OrderMagicNumber ()!=MAGIC || OrderSymbol ()!=SMB_) continue ;
           {
             if ( OrderType ()== OP_BUYLIMIT )
              {
               T_lim= OrderOpenTime ();                                     //  время закрытия селл
               ticket= OrderTicket ();
               if (T_lim<=T_op)                                             //  разность
               res= OrderDelete ( ticket, clrMagenta );
               if (res< 1 )
               {
                   Print ( GetLastError ());
               }
              }
           }
        }
     }
 
ZZuretc :

실수는 어디에 있습니까? 테스터에서 실행할 때 함수 는 보류 주문을 삭제 하지만 때로는 삭제하지 않습니다. 왜요? 작동 원리는 다음과 같습니다. 구매 주문이 TP에 의해 마감되면 BuyLimit이 제거됩니다. 말하다


OrdersTotal() != OrdersHistoryTotal()

 
Alexey Viktorov : 나는 그것이 어떤 종류의 기적인지 보지 못했습니다.

고맙습니다.

 
현재 ATP 의 최대값과 최소값을 찾는 방법을 알려주실 수 있나요?
파일:
q6a0hh.PNG  12 kb
 

안녕하세요.

나는 Stochstick을 기반으로 간단한 Expert Advisor를 만들었고(상단에서 판매, 하단에서 구매) 컴파일러에서 갑자기 오류가 발생합니다.

누군가 이유가 무엇이며 이 오류가 무엇을 의미하는지 말해 줄 수 있습니까? 처음에는 브래킷을 어딘가에 놓는 것을 잊었다고 생각했습니다.

그러나 아니요, 여러 번 확인했습니다. 모든 것이 대괄호와 함께 순서대로 된 것 같습니다. 도움을 주시면 대단히 감사하겠습니다.

컴파일러 오류는 다음과 같습니다. ')' - 모든 제어 경로가 값을 반환하는 것은 아닙니다. 확률적 신호-33.mq4 177

')' - 모든 제어 경로가 값을 반환하는 것은 아닙니다. 확률적 신호-33.mq4 210

다음은 EA 자체와 mq4 파일도 첨부되어 있습니다.

또한 여기에 고문을 삽입하는 것이 얼마나 아름다운지 알려주십시오(예: 편집기에서 컬러 문자로).

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

//| 확률적 신호-33.mq4 |

//| Copyright 2017, MetaQuotes Software Corp. |

//| https://www.mql5.com |

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

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#속성 링크 "https://www.mql5.com"

#속성 버전 "1.00"

#속성엄격

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

부울 New_Bar=거짓; // 새 막대 플래그

외부 이중 H_line=80; // 상위(과매수) 스토캐스틱 라인

외부 이중 L_line=20; // 하한(과매도) 확률선

extern int 미끄러짐=2; // 미끄러짐

외부 정수 SL; // 주문의 SL

외부 int TP; // 주문의 TP

extern 이중 Lts; // 주문이 접수된 로트 크기

bool B_Flag=false, // 구매 신호 플래그

S_Flag=false, // SELL 신호 플래그

ORD_Buy=false, // 오픈 매수 포지션 플래그

ORD_판매=거짓; // 오픈 포지션의 플래그 매도

bool 작업=true; // EA가 작동하도록 허용하는 플래그입니다. true - 치명적인 오류가 없습니다. false - 있습니다.

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

정수 Crit_Error=11111111; // 치명적인 오류 번호

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

//| 전문가 틱 기능 |

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

무효 OnTick()

{

정수

Total, // 창의 주문 수

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

티켓; // 주문 번호

더블

M_1, M_2, M_3, // 1, 2 및 3 막대의 MAIN 값

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

bool Ans_Close; // 성공적인 주문 마감 플래그(1-닫힘, 0-닫지 않음)

boolAns_Open; // 성공적인 주문 오픈 플래그(1-열림, 0-열지 않음)

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

// 치명적인 오류 확인

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

{

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

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

}

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

// 새 막대

Fun_New_Bar(); // 함수 접근

if (New_Bar==false) // 막대가 새것이 아닌 경우..

반품; // ..그럼 우리는 떠난다

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

// 주문에 대한 회계

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

총=0; // 주문 수

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

{

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

{ // 주문 분석:

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

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

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

Lot=OrderLots(); // 랏 수

}

또 다른

{

Alert("OrderSelect()가 오류를 반환했습니다 - ",GetLastError()); // 주문을 선택할 수 없는 경우 ...

반품; // 시작에서 종료

}

}

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

// 거래 기준 상황 분석

M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1바

M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2바

M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);// 3바

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

if(M_2>=H_line) // 스토하스틱이 과매수선을 넘었다면

{

if(M_3 <= M_2 && M_2 > M_1) // 스토하스틱에 상단 피크가 나타났습니다 ...

{

if(S_Flag==true) // 매도 포지션이 열려 있으면...

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

// 매도 포지션이 열려 있지 않으면 ...

S_Flag=참; // SELL 신호가 있음을 플래그 설정

B_Flag=거짓; // BUY 신호가 없었다는 플래그를 설정합니다.

if(ORD_Buy==true) // 열려있는 경우 주문 구매...

{

if(Tip!=0) // 확인: 주문 유형이 개설 주문 FLAG와 일치하지 않습니다...

{

작업=거짓; // Expert Advisor가 작동하지 않습니다.

Alert("주문 유형이 열린 주문의 FLAG와 일치하지 않습니다. 시작을 종료합니다."); // 불일치가 있는 경우 EA는 작업을 종료합니다.

반품; // 시작에서 종료

}

Ans_Close=Close_Order(티켓,로트,슬립페이지,팁); // 열려 있는 구매 주문을 닫습니다.

if(Ans_Close==false) // 닫기에 실패하면...

{

Alert("주문을 마감하지 못했습니다. EA가 작동을 멈춥니다.\n 심각한 오류 번호 ", Crit_Error);

반품; // 종료 시작

}

}

Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // 짧은 위치 열기

if(Ans_Open==false) // Sell을 열 수 없다면...

{

Alert("주문을 열지 못했습니다. EA가 작동을 멈춥니다.\n 심각한 오류 번호 ", Crit_Error);

반품; // 종료 시작

} // Sell을 열 수 있다면...

ORD_Sell=참; // SHORT 위치가 열려 있음을 플래그 설정

ORD_구매=거짓; // LONG 위치가 없음을 플래그 설정

}

반품; // 시작에서 종료

}

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

if(M_2<=L_line) // 스토하스틱이 과매도선을 넘었다면

{

if(M_3 >= M_2 && M_2 < M_1) // 하한 피크 표시(BUY SIGNAL)

{

if(B_Flag==true) // 매수 포지션이 열려 있으면...

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

// 매수 포지션이 열려 있지 않으면 ...

B_Flag=참; // BUY 신호가 나타난 플래그를 설정합니다.

S_Flag=거짓; // SELL 신호가 없는 플래그를 설정합니다.

if(ORD_Sell==true) // 열려있는 경우. 매도 주문,...

{

if(Tip!=1) // 확인: 주문 유형이 개설 주문 FLAG와 일치하지 않습니다...

{

작업=거짓; // Expert Advisor가 작동하지 않습니다.

Alert("주문 유형이 열린 주문의 FLAG와 일치하지 않습니다. 시작을 종료합니다."); // 불일치가 있는 경우 EA는 작업을 종료합니다.

반품; // 시작에서 종료

}

Ans_Close=Close_Order(티켓,로트,슬립페이지,팁); // 열려 있는 판매 주문을 닫습니다.

if(Ans_Close==false) // 닫기에 실패하면...

{

Alert("주문을 마감하지 못했습니다. EA가 작동을 멈춥니다.\n 심각한 오류 번호 ", Crit_Error);

반품; // 종료 시작

}

}

Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // 롱 포지션 열기

if(Ans_Open==false) // Buy를 열 수 없다면...

{

Alert("주문을 열지 못했습니다. EA가 작동을 멈춥니다.\n 심각한 오류 번호 ", Crit_Error);

반품; // 종료 시작

} // Buy를 열 수 있다면...

ORD_판매=거짓; // SHORT 위치가 없음을 플래그 설정

ORD_구매=참; // LONG 위치가 열려 있음을 플래그 설정

}

반품; // 시작에서 종료

}

}

//+----------------------------------------------- ------------------- 7 --

void Fun_New_Bar() // 감지 기능 ..

{ // .. 새 막대

정적 날짜 시간 New_Time=0; // 현재 막대의 시간

New_Bar=거짓; // 새 막대가 없습니다.

if(New_Time!=Time[0]) // 시간 비교

{

New_Time=시간[0]; // 이제 시간은

New_Bar=참; // 새 막대가 있습니다.

}

}

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

bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // 주문 마감 함수

{

더블 Close_Price=0; // 주문 종가

동안(사실)

{

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

if(F_Tip==0) // 주문이 매수인 경우 ...

Close_Price=입찰가; // 입찰 종가

Close_Price=묻기; // 그리고 주문이 Sell이면 종가는 Ask입니다.

bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // 닫기 매수 또는 매도

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

반환(참); // 닫기 함수를 종료합니다.

Crit_Error=GetLastError(); // 오류 번호 수정

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

계속하다; // 재시도

반환(거짓); // 함수 종료

}

}

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

// 오픈 오더

bool Open_Order(문자열 F_Symb, 이중 F_Lts, int F_SL, int F_TP, int F_Tip)

{

더블 Open_Price; // 오픈 가격

문자열 Tip_Deal; // 거래 방향 (구매 또는 판매)

이중 f_sl; // 손절 주문

더블 f_tp; // 이익을 취하다

인트 티켓; // 오픈 오더 티켓

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

{

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

if(F_Tip==1) // SELL을 열어야 하는 경우...

{

open_price=입찰가;

Tip_Deal="OP_SELL";

f_sl=NormalizeDouble(Bid+F_SL*Point,Digits);

f_tp=NormalizeDouble(Bid-F_TP*포인트,자리수);

}

//-------------------------------- BUY를 열어야 한다면...

open_price=묻다;

Tip_Deal="OP_BUY";

f_sl=NormalizeDouble(Bid+F_SL*Point,Digits);

f_tp=NormalizeDouble(Bid-F_TP*포인트,자리수);

Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//주문 열기

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

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

Crit_Error=GetLastError(); // 오류 번호 수정

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

계속하다; // 재시도

반환(거짓); // 함수 종료

}

}

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

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); // 함수 종료

}

}

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



파일:
 
RomanRott : 현재 ATP 의 최대값과 최소값을 찾는 방법을 알려주실 수 있나요?
   double max=- 10000 , min=+ 10000 , ATR;
   for ( int n= 0 ; n< WindowFirstVisibleBar ();n++)
   {
      ATR= iATR ( NULL , 0 , 14 , n);
       if (max<ATR)max=ATR;
       if (min>ATR)min=ATR;
   }
   Alert ( "min = " , DoubleToStr (min, 4 ), "    max = " , DoubleToString (max, 4 ));
다른 지표에 대해서도 마찬가지로
 
Skander : 안녕하세요 여러분, 저는 Stochstick을 기반으로 간단한 Expert Advisor를 만들었습니다(최고점에서 판매, 최저점에서 구매).
누군가 이유가 무엇이며 이 오류가 무엇을 의미하는지 말해 줄 수 있습니까? 처음에는 브래킷을 어딘가에 놓는 것을 잊었다고 생각했습니다.
그러나 아니요, 여러 번 확인했습니다. 모든 것이 대괄호와 함께 순서대로 된 것 같습니다. 도움을 주시면 대단히 감사하겠습니다.
컴파일러 오류는 다음과 같습니다. ')' - 모든 제어 경로가 값을 반환하는 것은 아닙니다. Stohastic-Signals-33.mq4 177 3
')' - 모든 제어 경로가 값을 반환하는 것은 아닙니다. Stohastic-Signals-33.mq4 210 3
//------------------------------------------------ --------------- 여덟 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // 주문 마감 함수
{
더블 Close_Price=0; // 주문 종가
동안(사실)
{
새로 고침(); // 데이터 업데이트
if(F_Tip==0) // 주문이 매수인 경우 ...
Close_Price=입찰가; // 입찰 종가
Close_Price=묻기; // 그리고 주문이 Sell이면 종가는 Ask입니다.
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // 닫기 매수 또는 매도
if (Ans_Close==true) // 알았습니다 :)
반환(참); // 닫기 함수를 종료합니다.
Crit_Error=GetLastError(); // 오류 번호 수정
if (Fun_Error(Crit_Error)==1) // 오류 처리
계속하다; // 재시도
반환(거짓); // 함수 종료
}
}

MetaEditor에서 컴파일 버튼을 클릭 하고 오류 메시지 를 읽으십시오 - 행 번호와 위치 번호가 있습니다

 //--------------------------------------------------------------- 8 --
   bool Close_Order( int F_Ticket, double F_Lot, int F_Slippage, int F_Tip)     // Ф-ия закрытия ордера
  {
   double Close_Price= 0 ;                       // Цена закрытия ордера 
   while ( true )
     {
        ....................................
            continue ;                           // Повторная попытка
         return ( false );                                 // Выход из функции
     }
     return false ;   // Компилятор хочет return в конце функции
  }

SRC 버튼으로 프로그램 코드를 삽입 하세요 - 이렇게 하면 지역 독자들이 더 좋아합니다!!! 그리고 당신의 긴 발보 - BRRRRR

단추 코드 메시지 텍스트에 소스 코드를 삽입하기 위한 것입니다. 클릭하면 코드를 붙여넣고 삽입 버튼을 클릭해야 하는 빈 창이 나타납니다.

 
STARIJ :

MetaEditor에서 컴파일 버튼을 클릭 하고 오류 메시지 를 읽으십시오 - 행 번호와 위치 번호가 있습니다

SRC 버튼으로 프로그램 코드를 삽입 하세요 - 이렇게 하면 지역 독자들이 더 좋아합니다!!! 그리고 당신의 긴 발보 - BRRRRR

버튼은 메시지의 텍스트에 소스 코드를 삽입하기 위한 것입니다. 클릭하면 코드를 붙여넣고 삽입 버튼을 클릭해야 하는 빈 창이 나타납니다.


고맙습니다.