[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 285

 
rid >> :

아마도 https://www.mql5.com/ru/forum/107476/page21 기능이 도움이 될 것입니다.

isCloseLastPosByTake() 함수.
이 함수는 take로 마지막 위치를 닫기 위한 플래그를 반환합니다.

플래그가 제기됨 - True - TakeProfit이 작동했습니다.

플래그가 생략됨 - False - 다른 이유로 포지션이 마감되었습니다.


코드의 맨 끝에 함수 자체를 넣습니다. 판매 조건에 추가:


좋은 오후, 저녁 또는 아침입니다.

나는 rid가 쓴 대로 모든 것을 했다. 코드 맨 끝에 함수를 삽입하고 판매 조건에 추가했습니다.

 if ( isCloseLastPosByTake ( NULL , OP_BUY , MagicNumber ) = = true ) { //продаем

그냥 생각하고 생각하고 추가하고 구매했습니다. 결국 주문은 BUY뿐만 아니라 SHELL로도 마감됩니다.

마지막에 isCloseLasPosByTake() 함수를 삽입했는데 컴파일 중에 밝혀졌습니다.

2;116;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;104:33;'(' - function definition unexpected
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;109:7;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;109:14;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;112:27;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;112:33;'sy' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;114:15;'op' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;114:37;'op' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;115:17;'mn' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;115:46;'mn' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;116:19;'t' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;117:17;'t' - variable not defined
2;75;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;127:19;'sy' - variable not defined

이것은 파이, 또는 n/p-k GOTSMAN 유화라고 하는 요리사입니다. 주전자를 도와주세요 .... 아니 피터 .......

aaa 코드 자체(예: f-i 시작만)

 //+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start ( )
   {
//----
     // Узнаем уровень стопов и спрэд
     int Spread = MarketInfo ( Symbol ( ) , MODE_SPREAD ) ;
     int StopLevel = MarketInfo ( Symbol ( ) , MODE_STOPLEVEL ) ;

     // Рассчитываем значения средних на 0-ом и 1-ом барах
     double MAF_0 = iMA ( NULL , 0 , MAFP , 0 , 1 , 1 , 0 ) ;
     double MAF_1 = iMA ( NULL , 0 , MAFP , 0 , 1 , 1 , 1 ) ;
     double MAS_0 = iMA ( NULL , 0 , MASP , 0 , 1 , 1 , 0 ) ;
     double MAS_1 = iMA ( NULL , 0 , MASP , 0 , 1 , 1 , 1 ) ;
    
     // открытие позиции Buy покупка
     if ( MAF_1 < MAS_1 & & MAF_0 > MAS_0 )
     if ( isCloseLastPosByTake ( NULL , OP_SELL , MagicNumber ) = = true ) { //покупаем
     if ( CheckOrders ( OP_SELL ) )
       {
       if ( StopLoss < = StopLevel + Spread )
         double SL = 0 ;
         else
         SL = Ask - StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         double TP = 0 ;
         else
         TP = Ask + TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_BUY , Lots , Ask , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Buy. Ошибка №" , GetLastError ( ) ) ; 
       }
    
     // Открытие позиции Sell продажа  
     if ( MAF_1 > MAS_1 & & MAF_0 < MAS_0 )
     if ( isCloseLastPosByTake ( NULL , OP_BUY , MagicNumber ) = = true ) { //продаем
     if ( CheckOrders ( OP_BUY ) )
       {
       if ( StopLoss < = StopLevel + Spread )
         SL = 0 ;
         else
         SL = Bid + StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         TP = 0 ;
         else
         TP = Bid - TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Sell. Ошибка №" , GetLastError ( ) ) ; 
       }
       bool isCloseLastPosByTake ( string sy = NULL , int op = - 1 , int mn = - 1 ) {
   datetime t ;
   double    ocp , otp ;
   int       dg , i , j = - 1 , k = OrdersHistoryTotal ( ) ;

   if ( sy = = "0" ) sy = Symbol ( ) ;
   for ( i = 0 ; i < k ; i + + ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) ) {
       if ( OrderSymbol ( ) = = sy | | sy = = NULL ) {
         if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
           if ( op < 0 | | OrderType ( ) = = op ) {
             if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) {
               if ( t < OrderCloseTime ( ) ) {
                t = OrderCloseTime ( ) ;
                j = i ;
               }
             }
           }
         }
       }
     }
   }
   if ( OrderSelect ( j , SELECT_BY_POS , MODE_HISTORY ) ) {
    dg = MarketInfo ( sy , MODE_DIGITS ) ;
     if ( dg = = 0 ) if ( StringFind ( OrderSymbol ( ) , "JPY" ) < 0 ) dg = 4 ; else dg = 2 ;
    ocp = NormalizeDouble ( OrderClosePrice ( ) , dg ) ;
    otp = NormalizeDouble ( OrderTakeProfit ( ) , dg ) ;
     if ( ocp = = otp ) return ( True ) ;
   }
   return ( False ) ;
}
//----
   return ( 0 ) ;
   } //+------------------------------------------------------------------+
 
igrok2008 >> :


나는 특히 내 메시지에 썼습니다. 이 isCloseLastPosByTake() 함수는 코드의 맨 끝, 시작 함수 외부 에 위치해야 합니다!

그리고 어디에 붙였나요?

그리고 중괄호는 판매 및 구매 조건에 주의하십시오. 거기에는 분명히 충분하지 않습니다 (열린 괄호의 수가 닫힌 괄호의 수와 같은지 확인하십시오). 수정된 판매는 다음과 같습니다.

    //  ----- Открытие позиции Sell продажа------------  
    if ( MAF_1 > MAS_1 & & MAF_0 < MAS_0 )                         {
    if ( isCloseLastPosByTake ( NULL , OP_BUY , MagicNumber ) = = true ) {
     if ( CheckOrders ( OP_BUY ) )                                     {
       if ( StopLoss < = StopLevel + Spread )
         SL = 0 ;        else         SL = Bid + StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         TP = 0 ;        else         TP = Bid - TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Sell. Ошибка №" , GetLastError ( ) ) ; 
                 }
                }
               }
      //---конец блока продажи ------------------------------
 

안녕하세요!!!


도움이 필요하다. 겸손하지 못한 점 사과드립니다.

하지만 여기 내 문제가 있습니다. 마틴 기반 EA가 있고 그가 원하는 대로 첫 번째 SELL 또는 BUY 주문을 하고 저는 Advisor의 속성에서 BUY 또는 SELL을 선택할 수 있기를 원합니다. 저것들. 예를 들어 BUY와 같은 속성을 입력하면 BUY 주문만 열리며 그 반대의 경우도 마찬가지입니다.

MQL4 프로그래밍 불행히도, 나는 아직 배우지 못했습니다.


제 고문을 첨부합니다.


답변해 주시는 모든 분들께 미리 감사드립니다!!!

 
rid >> :

나는 특히 내 메시지에 썼습니다. 이 isCloseLastPosByTake() 함수는 코드의 맨 끝, 시작 함수 외부 에 위치해야 합니다!

그리고 어디에 붙였나요?

그리고 판매 조건 및 구매 조건 중 중괄호를 주의해야 합니다. 거기에는 분명히 충분하지 않습니다 (열린 괄호의 수가 닫힌 괄호의 수와 같은지 확인하십시오). 수정된 판매는 다음과 같습니다.


나는 f-ii 시작 후에 그것을 붙였다, 나는 그것을 이해한다 .....

그래서 제가 잘못 이해했습니다. 찰싹찰싹 감사합니다 :-))

내가 제대로 이해했다면 전문가 초기화 해제 펑션 블록의 끝에서 } 뒤에 넣어야 한다???? 또는 return(0) 후; f-ii 시작의 맨 끝에 ????????

기다려주셔서 미리 감사드립니다!!!!!!

 
igrok2008 >> :

나는 f-ii 시작 후 그것을 붙였습니다. 나는 그것을 이해합니다 .....

그래서 제가 잘못 이해했습니다. 찰싹찰싹 감사합니다 :-))

내가 제대로 이해했다면 전문가 초기화 해제 펑션 블록의 끝에서 } 뒤에 넣어야 한다???? 또는 return(0) 후; f-ii 시작의 맨 끝에 ????????

기다려주셔서 미리 감사드립니다!!!!!!

외부에 배치해야 합니다. 내부에 없습니다. 기능이지만 별개의 독립적인 기능입니다.

이와 같이 :

 int start ( )
  {
//----
    // Узнаем уровень стопов и спрэд
    int Spread = MarketInfo ( Symbol ( ) , MODE_SPREAD ) ;
    int StopLevel = MarketInfo ( Symbol ( ) , MODE_STOPLEVEL ) ;

    // Рассчитываем значения средних на 0-ом и 1-ом барах
    double MAF_0 = iMA ( NULL , 0 , MAFP , 0 , 1 , 1 , 0 ) ;
    double MAF_1 = iMA ( NULL , 0 , MAFP , 0 , 1 , 1 , 1 ) ;
    double MAS_0 = iMA ( NULL , 0 , MASP , 0 , 1 , 1 , 0 ) ;
    double MAS_1 = iMA ( NULL , 0 , MASP , 0 , 1 , 1 , 1 ) ;
    
    // открытие позиции Buy покупка
    if ( MAF_1 < MAS_1 & & MAF_0 > MAS_0 )                         {
    if ( isCloseLastPosByTake ( NULL , OP_SELL , MagicNumber ) = = true ) {
     if ( CheckOrders ( OP_SELL ) )                                      {
       if ( StopLoss < = StopLevel + Spread )
         double SL = 0 ;        else         SL = Ask - StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         double TP = 0 ;        else         TP = Ask + TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_BUY , Lots , Ask , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Buy. Ошибка №" , GetLastError ( ) ) ; 
                }
               }
              }
//-------------------Конец покупки -----------------------

    //  ----- Открытие позиции Sell продажа------------  
    if ( MAF_1 > MAS_1 & & MAF_0 < MAS_0 )                         {
    if ( isCloseLastPosByTake ( NULL , OP_BUY , MagicNumber ) = = true ) {
     if ( CheckOrders ( OP_BUY ) )                                     {
       if ( StopLoss < = StopLevel + Spread )
         SL = 0 ;        else         SL = Bid + StopLoss * Point ;
       if ( TakeProfit < = StopLevel - Spread )
         TP = 0 ;        else         TP = Bid - TakeProfit * Point ;
       if ( ! OrderSend ( Symbol ( ) , OP_SELL , Lots , Bid , 5 , SL , TP , NULL , MagicNumber ) )
         Print ( "Не открыт ордер Sell. Ошибка №" , GetLastError ( ) ) ; 
                 }
                }
               }
      //---конец блока продажи ------------------------------
    
//----
   return ( 0 ) ;
  } //+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+


//ЖЖЖЖЖЖЖ Другие вызываемые пользовательские функции ЖЖЖЖЖЖ

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия           |
//|  последней позиции по тейку.                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake ( string sy = "" , int op = - 1 , int mn = - 1 ) {
  datetime t ;
  double   ocp , otp ;
  int      dg , i , j = - 1 , k = OrdersHistoryTotal ( ) ;

  if ( sy = = "0" ) sy = Symbol ( ) ;
  for ( i = 0 ; i < k ; i + + ) {
    if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) ) {
      if ( OrderSymbol ( ) = = sy | | sy = = "" ) {
        if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
          if ( op < 0 | | OrderType ( ) = = op ) {
            if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) {
              if ( t < OrderCloseTime ( ) ) {
                t = OrderCloseTime ( ) ;
                j = i ;
              } } } } } } }

  if ( OrderSelect ( j , SELECT_BY_POS , MODE_HISTORY ) ) {
    dg = MarketInfo ( sy , MODE_DIGITS ) ;
    if ( dg = = 0 ) if ( StringFind ( OrderSymbol ( ) , "JPY" ) < 0 ) dg = 4 ; else dg = 2 ;
    ocp = NormalizeDouble ( OrderClosePrice ( ) , dg ) ;
    otp = NormalizeDouble ( OrderTakeProfit ( ) , dg ) ;
    if ( ocp = = otp ) return ( True ) ;
  }
  return ( False ) ;
}


고문이 그런 조건에서 일할지 확신이 서지 않습니다. 왜냐하면 첫 번째 위치는 열 수 없습니다 ...

구매 조건이나 판매 조건에서 isCloseLastPosByTake() 함수를 제거해야 합니다.

그러면 고문이 일할 것입니다.

 
Rover82 >> :

안녕하세요!!!

하지만 여기 내 문제가 있습니다. 마틴 기반 EA가 있고 그가 원하는 대로 첫 번째 SELL 또는 BUY 주문을 하고 저는 Advisor의 속성에서 BUY 또는 SELL을 선택할 수 있기를 원합니다. 저것들. 예를 들어 BUY와 같은 속성을 입력하면 BUY 주문만 열리며 그 반대의 경우도 마찬가지입니다.

제 고문을 첨부합니다.

답변해 주시는 모든 분들께 미리 감사드립니다!!!


거의 아무도 응답하지 않을 것입니다. Expert Advisor는 디컴파일(해킹)되었으며 이러한 파일은 여기에 환영받지 못합니다...

 
WinExec("C:\\Program Files\\Opera\\opera.exe http://www.mail.ru",2);
안녕하세요! 이것은 특정 브라우저에서 링크를 실행하는 것이지만 기본적으로 동일한 링크를 실행하는 방법은 무엇입니까?
 
즉, 기본 브라우저
 
Dimoncheg >> :
즉, 기본 브라우저

ShellExecute, "열기" 명령, emnip.

 

MQL 4를 공부하기로 결정했습니다. 찾은 모든 것이 내 열망에 맞지 않습니다. 지금은 이해 전문가의 작업 방식을 이해하고 귀하의 아이디어에 맞게 약간 개선하기 위해 다른 사람의 Expert Advisor. (간단하고 작은, 한 페이지) 사용자 정의 기능 코드가 첨부되어 있습니다. 제 찻주전자 특성상 이틀은 못해요 이해 - 이 함수는 결과적으로 무엇을 반환하고 Else는 어떤 중첩 조건에 속합니까? - 언제 작동합니까?

내 밀도에 지식의 불꽃을 던지고 싶은 사람이 있습니까?

나는 다음을 얻는다 :

전체 기능의 목적 - 이 쌍에 대한 주문이 이미 있는지 여부를 결정하고, 그렇다면 유형을 결정합니다.

이 기능을 시작한 기능은 전환 절차에서 하나와 주문이 선택된 경우, 함수는 값 "1"을 반환해야 합니다. 주문 - "2" 및 주문이 없는 경우 "-1".

주기는 다음에서 시작됩니다. l_pos_16 = 0 . 몇 쌍에 대해 4개의 보류 중인 주문이 있다고 가정해 보겠습니다. 고문이 일하고 그들이 첫 번째가 아닌 쌍에 대해 두 개를 포함합니다.

그러나 루프의 첫 번째 반복에서 if ( OrderSelect ( l _ pos _16, SELECT _ BY _ POS , MODE _ TRADES )) 함수 는 목록에서 숫자 "0"이 있는 위치를 확인합니다. 주문하지만 그러한 위치가 없습니다. (t .k 번호 매기기가 위치 번호 1에서 오는 것을 이해합니다) 다른 사람 으로 이전됩니다. fCountOrders ( int & a _ count _0, int & a _ count _4, int & a _ count _8, int & a _ count _12) 에서 완전히 종료되어 반환 값 ( -1)을 반환합니다.

내 이해로는 전체 기능의 의미가 손실되었습니다. ~에 관계없이 이 쌍에 대한 주문의 유무에 따라 결과는 동일해야 합니다.

그러나 Expert Advisor가 실행 중일 때 이 기능은 호출하는 기능이 기대하는 것을 결정하고 제공하며 다음에 따라 작동합니다. 결과에서.

나는 다른 것을 이해할 수 없다. 반환 (-1) 은 다음에서 작동합니다.

if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {

또는 같은 ~에 if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {

코드 기능 :

int fCountOrders(int &a_count_0, int &a_count_4, int &a_count_8, int &a_count_12)

a_count_0 = 0;

a_count_4 = 0;

a_count_8 = 0;

a_count_12 = 0;

gi_252 = 0;

(int l_pos_16 = 0; l_pos_16 < OrdersTotal(); l_pos_16++) {

if (OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_N) {

스위치(주문 유형()) 케이스 OP_BUY:

a_count_0++;

gi_252 = 1;

g_ticket_268 = OrderTicket();

gs_272 = 주문 주석();

g_ord_open_price_256 = OrderOpenPrice();

g_ord_stoploss_288 = 주문 중지 손실();

g_ord_takeprofit_296 = OrderTakeProfit();

부서지다;

케이스 OP_SELL:

a_count_4++;

gi_252 = -1;

g_ticket_268 = OrderTicket();

gs_272 = 주문 주석();

g_ord_open_price_256 = OrderOpenPrice();

g_ord_stoploss_288 = 주문 중지 손실();

g_ord_takeprofit_296 = OrderTakeProfit();

부서지다;

사례 OP_BUYSTOP:

a_count_8++;

부서지다;

케이스 OP_SELLSTOP:

a_count_12++;

}

}

} 그렇지 않으면 반환(-1);

}

반환 (a_count_0 + a_count_4 + a_count_8 + a_count_12);

/* 함수가 정상적으로 실행되는 동안 변수에 하나가 반환됩니다. 경우 그리고 다른 모든 경우 "0", 하나가 있음을 나타냅니다.

주문 유형과 동시에 이 주문의 번호를 호출하는 함수에서 사용할 수 있습니다.

코멘트, 오픈 가격, 손절매 및 이익률 */

}