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

 
Denis Diakonov :

예를 들어 사례 1을 먼저 보낸 다음 사례 2 등을 보내지 마십시오.

사례가 개시 주문을 실행합니다.

예, 한 곳에서 열리지 않습니다. 이러한 코드를 이해하려면 생각한 대로 정확하게 생각해야 하며, 이는 어렵습니다.

 
Expert Advisor의 OnTick 내부에 상당한 시간이 소요되는 주기가 있는 경우 완전히 실행될 것입니까? 아니면 새 틱이 도착하면 모든 것이 종료됩니까?
 
Alexey Viktorov :

예, 한 곳에서 열리지 않습니다. 이러한 코드를 이해하려면 자신이 생각하는 방식을 정확히 생각해야 하며 이는 어렵습니다.

       case 2 : // кейс для открытия Sell по AUD/USD
               if (TimeServer() == true )                                     
               {
                   if ( Symbol () == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend ( "AUDUSD" ,OP_SELL,lot,Bid, 0 , 0 , 0 ); 
                   Alert ( "Тикет открытого ордера " , Open_Order, GetLastError ());
//-------------------------------------------------------------------------------------------------------------
// другая функция
//-------------------------------------------------------------------------------------------------------------

int AUDUSD_Analizing()
{    
   if (AUDUSD_Prices_new > AUDUSD_Prices_old)
   {
      s1 = AUDUSD_Prices1;
      s2 = AUDUSD_Prices2;
      s3 = s1 - s2;    
       if (raznica > s5)
      {
         Alert ( "--- ВРЕМЯ ОТКРЫВАТЬ ОРДЕР НА ПОКУПКУ ---" );
вот в этом месте мне необходимо обратиться к case 2 - вызвать его запуск на исполнение, затем
отсюда же необходимо обратиться к case 5 (к примеру), case 9, case 16 и т.д.

и только потом завершить исполнение данной функции и вернуться в старт
 
Yevhenii Levchenko :
Expert Advisor의 OnTick 내부에 상당한 시간이 소요되는 주기가 있는 경우 완전히 실행될 것입니까? 아니면 새 틱이 도착하면 모든 것이 종료됩니까?

예, 저도 이해가 되지 않습니다. 내 주기는 주문이 열렸을 때 실행되고 모두 열리지 않고, 일부는 이미 두 번째 라운드에서 열렸고, 일부는 누락된 채로 남아 있습니다. 내가 이해하는 한 새 틱은 시작과 코드를 시작합니다. 실행을 일시 중지하고 다시 시작

 
Denis Diakonov :

내가 이해하는 것처럼 새로운 틱은 시작을 시작하고 코드는 실행을 일시 중지하고 다시 실행을 시작합니다.

만들지 마

도움말을 읽으십시오. EA에 복잡한 계산이 있는 경우 새 눈금을 건너뛸 것이라고 명확하게 나와 있습니다.

이벤트 처리 기능 에 대한 기사의 어딘가 또는 아마도 거래 작업 또는 RefreshRates에서

코드의 논리에서 오류를 찾습니다.


추신: switch() - 복잡한 논리 조건에는 케이스가 사용되지 않습니다. if() else 조합을 사용하는 것이 좋습니다. 이 방법으로 더 명확한 논리 분기를 얻을 수 있습니다.

 
Igor Makanu :

만들지 마

도움말을 읽으십시오. EA에 복잡한 계산이 있는 경우 새 눈금을 건너뛸 것이라고 명확하게 나와 있습니다.

이벤트 처리 기능 에 대한 기사의 어딘가 또는 아마도 거래 작업 또는 RefreshRates에서

코드의 논리에서 오류를 찾습니다.


추신: switch() - 복잡한 논리 조건에는 케이스가 사용되지 않습니다. if() else 조합을 사용하는 것이 좋습니다. 이렇게 하면 보다 명확한 논리 분기를 얻을 수 있습니다.

네 감사합니다 저도 if-else로 다 처방하기로 했어요

 
Denis Diakonov :

스위치가 왜 여기에서 나사로 꼬였습니까? 거래의 방향과 함수에서 필요한 열림 수를 파악하고 루프에 지정된 만큼 열면 더 쉽습니다.

그래서 나는 당신의 논리를 이해하는 것이 내 마음을 위한 것이 아니라고 말하는 것입니다. 왜 그런 동결?

 
Alexey Viktorov :

스위치가 왜 여기에서 나사로 꼬였습니까? 거래의 방향과 함수에서 필요한 열림 수를 파악하고 루프에 지정된 만큼 열면 더 쉽습니다.

그래서 나는 당신의 논리를 이해하는 것이 내 마음을 위한 것이 아니라고 말하는 것입니다. 왜 그런 동결?

글쎄, 결과적으로 내 코드는 볼륨이 커졌지만 조금 더 쉬울 것이라고 생각했습니다.

경주처럼 - 한 함수를 실행하는 동안 필요한 만큼 여러 번 case를 호출할 수 있다면 더 쉽고 코드가 더 간결해질 것입니다.

한 주기에서 같은 거래를 열 필요가 없습니다. 신호가 나타날 때 동시에(가능한 한) 다른 상품에 대해 열리게 됩니다.

사례 1 - audusd 구매

사례 5 - gbpusd 구매

사례 9 - 유로화 구매

등.

첫 번째 경우에는 사례가 있는 시트와 분석이 있는 두 번째 시트가 있으므로 상호 작용하면 500줄이 됩니다.

두 번째 사용 가능한 옵션은 기저귀에 무엇이 들어가고 총 라인이 1200+이며 궁극적으로 프로그램의 속도에 영향을 미칠 것인지에 대한 분석을 통해 함수 내에서 주문의 특정 시작을 처방하는 것입니다.

 

전문가 여러분, 말씀해 주십시오! EA는 동적 편차 계산과 함께 Envelopes 표시기를 사용합니다. 그러나 차트에 표시되면 모든 이전 막대에서 지표 편차의 전체 역학을 그립니다.

동적 봉투

1. 인디케이터가 올바르게 그려지도록 하는 방법이 있나요? 저것들. 자체 막대에만 편차가있는 지표를 그렸습니다.

2. 글쎄요, 어떻게 Expert Advisor에서 지표의 그림을 끄고 계산만 남길 수 있습니까? 전문가 설정에서 서랍 끄는 기능을 끄고 싶어요)

 
Denis Diakonov :

글쎄, 결과적으로 내 코드는 볼륨이 커졌지만 조금 더 쉬울 것이라고 생각했습니다.

경주처럼 - 한 함수를 실행하는 동안 필요한 만큼 여러 번 case를 호출할 수 있다면 더 쉽고 코드가 더 간결해질 것입니다.

한 주기에서 같은 거래를 열 필요가 없습니다. 신호가 나타날 때 동시에(가능한 한) 다른 상품에 대해 열리게 됩니다.

사례 1 - audusd 구매

사례 5 - gbpusd 구매

사례 9 - 유로화 구매

등.

첫 번째 경우에는 사례가 있는 시트와 분석이 있는 두 번째 시트가 있으므로 상호 작용하면 500줄이 됩니다.

두 번째 사용 가능한 옵션은 기저귀에 무엇이 들어 있는지 분석하여 함수 내에서 주문의 특정 시작을 처방하는 것입니다 . 총 라인은 1200+ 이며 궁극적으로 프로그램 속도에 영향을 미칩니다.

어떻게 그렇게 많은 줄의 코드를 입력합니까? 여기 내 마지막 전문가 고문 중 하나가 있습니다. FORTS의 유가 증권 세트와 함께 작동합니다.

 sinput    string             Symbols           = "GAZP,LKOH,CHMF,MVID" ;   //  Символы для торговли через запятую

얼마나 많은 유가 증권이 이 목록에 나열될 것이며 많은 것이 거래될 것입니다. 그리고 이 Expert Advisor에서는 2개의 거래 기간을 제어할 수 있으며 후행 및 물론 326개 라인만 분석합니다.

스위치를 사용하고 싶은 참을 수 없는 욕구가 있다면, 각 옵션에 포지션의 개방을 입력할 필요가 없습니다. 결국 기호의 이름, 거래 유형 및 유형 을 정의하는 것으로 충분합니다.

 string symb;
ENUM_ORDER_TYPE ordType;
switch (???)
{
 case 1
  symb = "audusd" ;
  ordType = OP_BUY;
 break ;
 case 5
  symb = "gbpusd" ;
  ordType = OP_BUY;
 break ;
 case 9
  symb = "eurusd" ;
  ordType = OP_BUY;
 break ;
}
// И дальше получение цен, определение СЛ и ТП с последующем открытием ордера.

그러나 내 생각에는 이 모든 것을 사용자 정의 함수로 래핑하는 것이 더 좋습니다.

 void openOrder( string symb, ENUM_ORDER_TYPE ordType)
 {
   // Символ и тип ордера передаётся при вызове функции. Здесь достаточно получить соответствующие цены и открыть ордер.
 }