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

 

안녕하세요. 전략 테스터 와 같이 차트에 진입점과 퇴장점을 표시하는 고문이 있는지 알려주십시오 ???

 

그리고 수동으로 - 당신에게 적합하지 않은 것은 무엇입니까? 거래 내역을 차트로 마우스로 드래그하면 거기에 표시됩니다!

또는 스크립트로 가져오세요 - http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=32

 
TheXpert >> :

ShellExecute, "열기" 명령, emnip.


덕분에
 
rid >> :

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

이와 같이 :


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

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

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

나는 제거의 권장 사항에 대한 수정과 함께 고문의 코드를 제공합니다. 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 ( 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 ) ;
}
 

컴파일하는 동안 오류가 발생했습니다

2;73;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;103:3;'}' - unbalanced parentheses

이 장소는 태그되었습니다 * 친절한 사람들을 도와주세요 .....

   return(0);
 * }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+
 
igrok2008 писал(а) >>

컴파일하는 동안 오류가 발생했습니다

이 장소에 태그를 추가했습니다 * 친절한 사람들을 도와주세요 .....

시작 함수에서 중괄호의 수가 다릅니다.

 //+------------------------------------------------------------------+
//| 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 ( ) ) ; 
             }
         }
     }
     //---конец блока продажи ------------------------------
    
     return ( 0 ) ;
} //+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+
이런 일이 있었어야 했습니다. 논리를 이해하지 못했다
 
igrok2008 >> :

나는 제거의 권장 사항에 대한 수정과 함께 고문의 코드를 제공합니다. f-i 시작만


Sales 블록에서 여분의 중괄호를 제거하십시오. 여는 괄호의 개수는 닫는 괄호의 개수와 같아야 한다고 썼습니다. 그리고 거기에 2개의 브래킷이 열리고 닫힙니다. 3개!

물론 컴파일 오류가 발생합니다.

 
rid >> :

Sales 블록에서 여분의 중괄호를 제거합니다. 여는 괄호의 개수는 닫는 괄호의 개수와 같아야 한다고 썼습니다. 그리고 거기에 2개의 브래킷이 열리고 닫힙니다. 3개!

물론 컴파일 오류가 발생합니다.

여는 괄호는 어떻습니까?


aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa킹a곽을 알았다. :-))))))))

내가 테스트 할거야 ........ cho, 나를 비난하지 마십시오. 질문으로 시도 할 것입니다.

 
igrok2008 писал(а) >>

여는 괄호는 어떻습니까?

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa킹a곽을 알았다. :-))))))))

내가 테스트 할거야 ........ cho, 나를 비난하지 마십시오. 질문으로 시도 할 것입니다.

수정본을 만들었습니다.

 

이 수정된 버전은 작동하지 않습니다. 그는 첫 번째 거래를 열 수 없습니다. 왜냐하면 yavl 버전에서 첫 번째 트랜잭션을 여는 조건입니다. 테이크 또는 스톱으로 이전 항목을 닫습니다!

저것들. - 악순환.