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

 
Rewerpool :

왜 그런 식으로 글을 쓰는 걸까요?

고문을 하나의 기호에만 적용하면 모든 기호에 적용됩니까? 그리고 마술사는 자신의 것을 보게 될 것입니다!

완전히 혼란스러워!

이전 mql4에서는 조건 목록의 첫 번째 항목을 검사한 결과와 상관없이 처음부터 끝까지 조건을 검사했습니다. 따라서이 추한 쓰기, 처리 시간을 줄이려는 욕망.

현재 어딘가에 이것에 대해 작성되어 있지만 첫 번째 조건이 충족되지 않으면 확인이 중지되는 위치가 기억나지 않습니다. 따라서 오른발 새끼손가락으로 왼쪽 귀를 긁는 것은 말이 안 된다.

 

@Konstantin Nikitin 다음과 같이 반복의 시작 부분에 작성하면 밝혀졌습니다.


 for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
   if (! OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) continue ;
  
   if ( OrderSymbol () != Symbol ()) continue ;
   
   if ( OrderMagicNumber () != Magic) continue ;

Выставляться будут стопы и тейки любым ордерам? И не надо делать опрос на предмет кто торгует Бот или человек?
 
Rewerpool :

다음과 같이 반복의 시작 부분에 작성하면 밝혀집니다.

 void STOP_TAKE( void )
{
   int SPREAD    = ( int ) MarketInfo ( Symbol (), MODE_SPREAD );
   if (stoploss<STOPLEVEL) stoploss= 0 ; 
   if (takeprofit<STOPLEVEL) takeprofit= 0 ;

     for ( int i= 0 ; i< OrdersTotal (); i++)
     {
           if (! OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) continue ;
           if ( OrderSymbol ()!= Symbol ()) continue ;
     
           int tip = OrderType ();
           if (  tip!= OP_BUY && tip!= OP_BUYSTOP && tip!= OP_BUYLIMIT &&
               tip!= OP_SELL && tip!= OP_SELLSTOP && tip!= OP_SELLLIMIT ) continue ;
     
           // переменные которые будут использоваться в любых ордерах
           int Ticket = OrderTicket ();
           double     OOP = OrderOpenPrice (),
                    OSL = OrderStopLoss (),
                    OTP = OrderTakeProfit ();
     
           //---
/* Если это удалить/заблокировать то будет работать со всеми ордерами не обращая внимания эксперта они или нет. Разблокировать, то сначала проверит ордера эксперта их нет то все остальные
          if( OrderMagicNumber() == Magic )
          { //----------Если Ордера Советника
               switch(tip)
               {
                    case OP_BUY:
                    case OP_BUYSTOP:
                    case OP_BUYLIMIT:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         }
                         break;
                         // end case
                         
                    default:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         } // end case
               } // end switch
               
               continue;
          }
*/
           switch (tip)
          {
               case OP_BUY :
               case OP_BUYSTOP :
               case OP_BUYLIMIT :
                    {
                         if (takeprofit!= 0 ) TP = NormalizeDouble (OOP + takeprofit* Point , Digits ); else TP=OTP;
                         if (stoploss!= 0 )   SL = NormalizeDouble (OOP - (stoploss+SPREAD)* Point , Digits ); else SL=OSL;       
                         if ( OrderModify (Ticket,OOP,SL,TP, 0 ,White)) Print ( "STOP_TAKE" ,Ticket, " SL " ,OSL, " -> " ,SL, "   TP " ,OTP, " -> " ,TP);
                         else Print ( Symbol (), " Error STOP_TAKE" , GetLastError (), "  Ticket " ,Ticket);
                    }
                     break ;
                     // end case
                         
               default :
                    {
                         if (takeprofit!= 0 ) TP = NormalizeDouble (OOP - takeprofit* Point , Digits ); else TP=OTP;
                         if (stoploss!= 0 )   SL = NormalizeDouble (OOP + (stoploss+SPREAD)* Point , Digits ); else SL=OSL;             
                         if ( OrderModify (Ticket,OOP,SL,TP, 0 ,White)) Print ( "STOP_TAKE" ,Ticket, " SL " ,OSL, " -> " ,SL, "   TP " ,OTP, " -> " ,TP);
                         else Print ( Symbol (), " Error STOP_TAKE" , GetLastError (), "  Ticket " ,Ticket);
                    } // end case
          } // end switch
     } // end for
} // end STOP_TAKE
이 같은.
 

안녕하세요. 여기 그들이 쓰는 것입니다..

"이 제품은 EX4 파일을 하나만 포함할 수 있으며 추가 파일은 허용되지 않습니다. EX4 파일 이름과 입력 매개변수 이름은 라틴 문자로 작성해야 합니다. 편리한 사용자 인터페이스를 만들기 위해 리소스 를 사용하는 것이 좋습니다.

프로그램은 보안상의 이유로 DLL 호출을 허용하지 않습니다. 프로그램을 시연하기 위해 테스트 데이터가 필요한 경우 프로그램 자체에서 필요한 파일을 생성하고 사용자에게 알려야 합니다. ResourceLoad 기능을 사용하여 필요한 파일을 추가할 수도 있지만 모든 제품은 마켓에 게시되기 전에 악성 활동 가능성이 있는지 확인합니다.

상품에 거래계좌, 금융상품 등의 시간, 종류 또는 개수에 따라 작업에 제한을 두는 것은 금지되어 있습니다. 그러한 모든 행동은 구매자에게 비우호적이며 용납될 수 없습니다."

Tell me HOW..... 지시자에게 조언자 요청을 하십시오.

 
Oleksandr Kulibaba :

안녕하세요. 여기 그들이 쓰는 것입니다..

"이 제품은 EX4 파일을 하나만 포함할 수 있으며 추가 파일은 허용되지 않습니다. EX4 파일 이름과 입력 매개변수 이름은 라틴 문자로 작성해야 합니다. 편리한 사용자 인터페이스를 만들기 위해 리소스 를 사용하는 것이 좋습니다.

프로그램은 보안상의 이유로 DLL 호출을 허용하지 않습니다. 프로그램을 시연하기 위해 테스트 데이터가 필요한 경우 프로그램 자체에서 필요한 파일을 생성하고 사용자에게 알려야 합니다. ResourceLoad 기능을 사용하여 필요한 파일을 추가할 수도 있지만 모든 제품은 마켓에 게시되기 전에 악성 활동 가능성이 있는지 확인합니다.

상품에 거래계좌, 금융상품 등의 시간, 종류 또는 개수에 따라 작업에 제한을 두는 것은 금지되어 있습니다. 그러한 모든 행동은 구매자에게 비우호적이며 용납될 수 없습니다."

Tell me HOW..... 지시자에게 조언자 요청을 하십시오.

답변을 직접 작성했습니다. 리소스 사용

 //+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit () 
  { 
//--- 
   handle_ind= iCustom ( _Symbol , _Period , "::Indicators\\SampleIndicator.ex5" ); 
   if (handle_ind== INVALID_HANDLE ) 
     { 
       Print ( "Expert: iCustom call: Error code=" , GetLastError ()); 
       return ( INIT_FAILED ); 
     } 
//--- 
   return ( INIT_SUCCEEDED ); 
  }
Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 
Vitaly Muzichenko :

답변을 직접 작성했습니다. 리소스 사용

답변 해주셔서 감사합니다. 그러나 나는 이미 읽고 그것을 삽입하려고했습니다. 작동하지 않습니다. 내가 뭔가 잘못하고 있거나 잘못된 장소에서하고 있습니다. 세 가지 지표에 액세스할 수 있습니다. 가능하면 이 스크립트를 더 자세히 설명하십시오.

무엇을, 어디서, 어떤 매개변수를... 미리 감사합니다.

 //+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit () 
  { 
//--- 
   handle_ind= iCustom ( _Symbol , _Period , "::Indicators\\SampleIndicator.ex5" ); 
   if (handle_ind== INVALID_HANDLE ) 
     { 
       Print ( "Expert: iCustom call: Error code=" , GetLastError ()); 
       return ( INIT_FAILED ); 
     } 
//--- 
   return ( INIT_SUCCEEDED ); 
  }
 
Oleksandr Kulibaba :

답변 해주셔서 감사합니다. 그러나 나는 이미 읽고 그것을 삽입하려고했습니다. 작동하지 않습니다. 내가 뭔가 잘못하고 있거나 잘못된 장소에서하고 있습니다. 세 가지 지표에 액세스할 수 있습니다. 가능하면 이 스크립트를 더 자세히 설명하십시오.

무엇을, 어디서, 어떤 매개 변수 ... 미리 감사합니다.

3개 또는 필요한 만큼 변수를 만들고 예제에서와 같이 쿼리합니다. handle_ind= iCustom ( _Symbol , _Period , "::Indicators\\blah blah blah) 사람들이 이해할 수 있도록 코드를 붙여 넣으세요!

아이커스텀 - 이거!

 iCustom

Возвращает значение указанного пользовательского индикатора. 



double    iCustom ( 
   string        symbol,           // имя символа 
   int           timeframe,         // таймфрейм 
   string        name,             // папка/имя_пользовательского индикатора 
   ...                             // список входных параметров индикатора 
   int           mode,             // источник данных 
   int           shift             // сдвиг 
   );
 
만약
 if (handle_ind== INVALID_HANDLE ) то это значит - не корректный хэндл
 
Rewerpool :

3개의 변수를 생성하거나 필요한 만큼 만들고 핸들_ind = iCustom ( _Symbol , _Period , "::Indicators\\blah blah blah) 예제와 같이 폴링하십시오. 사람들이 이해할 수 있도록 코드를 붙여 넣으세요!

아이커스텀 - 이거!

만약

나는 노력할 것이다. 고맙습니다.

 
@Oleksandr Kulibaba 코드 붙여넣기 , 오류! 이해를 가지기 위해! 좋은 분들이 도와드리겠습니다! 그리고 어떤 종류의 문제가 있는지 명확하지 않습니다!
 
@Konstantin Nikitin 멋지네요 . 코드에서 제거
 if ((OSL== 0 &&stoploss!= 0 )||(OTP== 0 &&takeprofit!= 0 ))

매 틱마다 경련을 멈추십시오.)))))


게시물 에서 당신은 마법의 코드 클로저를 지적했습니다! 나는 그것을 이해했다! 상황은 이렇습니다. 저는 손으로 거래하지만 갑자기 한발 물러서서 Expert Advisor(패턴 및 진입점 검색)에게 제어권을 이전해야 합니다. 따라서 모든 작업을 분리하고 싶었습니다. 그러나 중지 및 테이크를 설정하는 것은 모든 사람에게 필수입니다. 제가 아직 제대로 파고 있지 않을 수도 있어요!