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

 

네 확실합니다. 보았지만 보이지 않았습니다.

고맙습니다.

나는 오늘 브레이크를 밟는다. 주말에는 쉬어야 합니다.

 
rid >> :

이렇습니다 -



감사해요!!! 계속 사용하겠습니다...

 


DDFedor



제거하다



고맙습니다.

 

모두 동일하게 코드가 작동하지 않고 2개의 양초에서 모든 작업을 수행했습니다. 하지만 포즈가 이미 존재한다는 것을 배웠어야 했습니다. 더 이상 열지 마세요 ... 전체 예금 zayuzal이 될 수 있는 모든 것을 위해 열렸습니다(( Rid look, 아마도 다른 것을 추가해야 할 수도 있습니다 ... 매우 감사합니다

 

돕다. 나는 밤에 거래할 고문을 원합니다. 나는 코드를 작성

int start()
{
string Symb;
Symb=Symbol();
string Vremya;
Vremya=TimeToStr(TimeLocal(),TIME_MINUTES);
if(Vremya > 23:00 || Vremya < 06:00 )
{
// тут торговые функции
}
}

오류 메시지를 제공합니다

'||' - 조건은 문자열일 수 없습니다.

또한 조건이 다음으로 감소하면

if(시간 > 23:00

그것은 작동합니다

그리고 만약 전에

if(시간 < 06:00 )

그렇지 않습니다.


나는 무엇이 잘못되었는지 이해하지 못한다. 시간 설정 방법을 알려주세요.


 
morok >> :

모두 동일하게 코드가 작동하지 않고 2개의 양초에서 모든 작업을 수행했습니다. 하지만 포즈가 이미 존재한다는 것을 배웠어야 했습니다. 더 이상 열지 마세요 ... 전체 예금 zayuzal이 될 수 있는 모든 것을 위해 열렸습니다(( Rid look, 아마도 다른 것을 추가해야 할 수도 있습니다 ... 매우 감사합니다

네 확실합니다....

f-and ORDERSEND에서 마법을 설정하는 것을 잊었습니다.

이제 모든 것이 정상입니다. 공장. 확인했습니다. 시장에는 반대 방향의 거래가 2개 이하이거나 단방향 거래가 1개 이하일 수 있습니다.

모든 유형의 거래가 하나만 필요하면 NumberOfPositions(c) 함수에서 거래 유형을 -1(1 빼기)로 바꿔야 합니다.

 extern int   Magic = 777 ;
extern int       Ema1 = 14 ;
extern int       Ema2 = 48 ;
double Ema_1 ;
double Ema_2 ;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start ( )
  {
   //int Orders = OrdersTotal(); 
   Ema_1 = iMA ( NULL , 0 , Ema1 , 0 , MODE_SMMA , PRICE_MEDIAN , 0 ) ;
   Ema_2 = iMA ( NULL , 0 , Ema2 , 0 , MODE_SMMA , PRICE_MEDIAN , 0 ) ;   
   int ticket ;
//------------------------------------------------
 if ( NumberOfPositions ( NULL , OP_BUY , Magic ) < 1 & & Ema_1 > Ema_2 ) 
    {
      ticket = OrderSend ( Symbol ( ) , OP_BUY , 0.5 , Ask , 10 , Ask - 850 * Point , Ask + 550 * Point , "kupil" , Magic , 0 , Green ) ;
    } 
//------------------------------------------------------
   if ( NumberOfPositions ( NULL , OP_SELL , Magic ) < 1 & & Ema_1 < Ema_2 ) 
    {
      ticket = OrderSend ( Symbol ( ) , OP_SELL , 0.5 , Bid , 10 , Ask + 850 * Point , Bid - 550 * Point , "kupil" , Magic , 0 , Violet ) ;
    } 
//------------------------------------------------------
   return ( 0 ) ;
  }

//жжжжжжжжж Пользовательские функции жжжжжжж

int NumberOfPositions ( string sy = "" , int op = - 1 , int mn = - 1 ) {
  int i , k = OrdersTotal ( ) , kp = 0 ;

  if ( sy = = "0" ) sy = Symbol ( ) ;
  for ( i = 0 ; i < k ; i + + )                                    {
    if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) )      {
      if ( OrderSymbol ( ) = = sy | | sy = = "" )                   {
        if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
          if ( op < 0 | | OrderType ( ) = = op )                   {
            if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) kp + + ;
          } } } } }
  return ( kp ) ;
}




 
alderru >> :

iTime 기능이 무엇을 보여주는지 알려주세요.

이 10자리 abra-kadabra는 무엇입니까? 초?

년-월-일-시-분으로 변환하는 방법입니다.

다음과 같이: 막대 이동을 설정하고 기본적으로 전체 날짜와 시간을 가져옵니다(time=1 또는 true인 경우 시간만 가져옴).

매우 편리한 기능입니다. 적극 권장합니다.

 string Times ( int Sdvig , bool time = 0 )
{ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   string YAER   = TimeYear ( Time [ Sdvig ] ) ;
   string DAY     = TimeDay ( Time [ Sdvig ] ) ;
   string HOUR   = TimeHour ( Time [ Sdvig ] ) ;
   string MINUTE = TimeMinute ( Time [ Sdvig ] ) ;
   int month = TimeMonth ( Time [ Sdvig ] ) ;
   string MONTH ;
   switch ( month )
     { case 1 : MONTH = "янв " ; break ;
     case 2 : MONTH = "фев " ; break ;
     case 3 : MONTH = "март" ; break ;
     case 4 : MONTH = "апр " ; break ;
     case 5 : MONTH = "май " ; break ;
     case 6 : MONTH = "июнь" ; break ;
     case 7 : MONTH = "июль" ; break ;
     case 8 : MONTH = "авг " ; break ;
     case 9 : MONTH = "сен " ; break ;
     case 10 : MONTH = "окт " ; break ;
     case 11 : MONTH = "нояб" ; break ;
     case 12 : MONTH = "дек " ; break ;               
     default : MONTH = "----" ; break ;
     }
 if ( TimeHour ( Time [ Sdvig ] ) < 10 ) HOUR = "0" + HOUR ;      
 if ( MINUTE = = "0" ) MINUTE = "00" ;
 if ( time ) return ( HOUR + ":" + MINUTE ) ;                    
 else return ( YAER + "   " + MONTH + " " + DAY + "   " + HOUR + ":" + MINUTE ) ;
} //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

rid 감사합니다.. 정확히 내가 찾던 것) 어렵지 않은 경우 알려주세요 한 주문을 열 때 다른 주문을 덮을 수 있도록 어떻게 만들 수 있습니까? 두 번째 수준을 조정하려고 시도했지만 작동하지 않는 경우(

Logiano가 모든 것을 한 것 같지만 테스트 중에 주문을 즉시 열고 닫습니다.

 extern int    Magic = 777 ;
extern int        Ema1 = 14 ;
extern int        Ema2 = 48 ;
extern int        Ema3 = 100 ;
double Ema_1 ;
double Ema_2 ;
double Ema_3 ;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start ( )
   {
   //int Orders = OrdersTotal(); 
   Ema_1 = iMA ( NULL , 0 , Ema1 , 0 , MODE_SMMA , PRICE_MEDIAN , 0 ) ;
   Ema_2 = iMA ( NULL , 0 , Ema2 , 0 , MODE_SMMA , PRICE_MEDIAN , 0 ) ;
   Ema_3 = iMA ( NULL , 0 , Ema3 , 0 , MODE_SMMA , PRICE_MEDIAN , 0 ) ;      
   int ticket ;
//------------------------------------------------
 if ( NumberOfPositions ( NULL , OP_BUY , Magic ) < 1 & & Ema_1 > Ema_2 & & Ema_2 > Ema_3 ) 
     {
      ticket = OrderSend ( Symbol ( ) , OP_BUY , 0.1 , Ask , 10 , 0 , 0 , "kupil" , Magic , 0 , Green ) ;
     } 
//------------------------------------------------------
   if ( NumberOfPositions ( NULL , OP_SELL , Magic ) < 1 & & Ema_1 < Ema_2 & & Ema_2 < Ema_3 ) 
     {
      ticket = OrderSend ( Symbol ( ) , OP_SELL , 0.1 , Bid , 10 , 0 , 0 , "kupil" , Magic , 0 , Violet ) ;
     } 
//--------------------------------------------------------
 if ( NumberOfPositions ( NULL , OP_BUY , Magic ) > = 1 & & Ema_1 < Ema_2 ) //--проверяю есть ли ордер BUY и крою его если линии ема пересеклись
     {
      ticket = OrderClose ( OrderTicket ( ) , 0.1 , Bid , 300 , Violet ) ;
     } 
//------------------------------------------------------
 if ( NumberOfPositions ( NULL , OP_SELL , Magic ) > = 1 & & Ema_1 > Ema_2 ) //--проверяю есть ли ордер SEll и крою его если линии ема пересеклись
     {
      ticket = OrderClose ( OrderTicket ( ) , 0.1 , Ask , 300 , Green ) ;
     } 
//------------------------------------------------------
   return ( 0 ) ;
   }

//жжжжжжжжж Пользовательские функции жжжжжжж

int NumberOfPositions ( string sy = "" , int op = - 1 , int mn = - 1 ) {
   int i , k = OrdersTotal ( ) , kp = 0 ;

   if ( sy = = "0" ) sy = Symbol ( ) ;
   for ( i = 0 ; i < k ; i + + )                                      {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) )        {
       if ( OrderSymbol ( ) = = sy | | sy = = "" )                    {
         if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
           if ( op < 0 | | OrderType ( ) = = op )                    {
             if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) kp + + ;
           } } } } }
   return ( kp ) ;
}
 
rid писал(а) >>

분명한. 다음과 같은 위치가 기록에 있는지 확인할 수 있습니다.

그러나 코드는 테스터에서만 작동합니다. 왜냐하면 그렇지 않으면 온라인에서 고문을 켤 때마다 마법을 변경해야 합니다.


정확히, 당신이 필요로 하는 것!

이 격자에 이 코드를 올바르게 삽입하는 방법을 알려주세요.

(직접 내기를 하면 테스터는 첫 번째 포지션의 오프닝에서 그냥 멈춥니다)

 for ( int i = 0 ; i < OrdersTotal ( ) ; i + + )                            {

     if ( ! ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) ) ) continue ;

//выбираем из истории счета

     if ( OrderSymbol ( ) ! = Symbol ( ) ) continue ;     

     if ( OrderMagicNumber ( ) = = Magic )                              {

              позиции = true ;

                                                             } }



//Открытие позиции:



bool Open_Buy ( ) {

   bool res = false ; 

if ( условие_1 )        {

             if ( советник еще не открывал позиций с Магическим номером )      {

                    res = true ;      } }

else      {

     if ( условие_1 )        { 

   if ( условие_2 опирается на данные прошлого ордера )        { 

   res = true ;      } } }

return ( res ) ;

}
 
morok >> :

rid 감사합니다.. 정확히 내가 찾던 것) 어렵지 않은 경우 알려주세요 한 주문을 열 때 다른 주문을 덮을 수 있도록 어떻게 만들 수 있습니까? 두 번째 수준을 조정하려고 시도했지만 작동하지 않는 경우(

Logiano가 모든 것을 한 것 같지만 테스트 중에 주문을 즉시 열고 닫습니다.

한 번 여기에서 포지션 마감을 처리했습니다.

https://www.mql5.com/ru/forum/105913

 //==================Закрытие позиций ============================
 
//----------------------------------------------------------------------
  for ( int v = 0 ; v < OrdersTotal ( ) ; v + + )                             {       
      if ( OrderSelect ( v , SELECT_BY_POS , MODE_TRADES ) )               {           
        if ( OrderSymbol ( ) = = Symbol ( ) & & OrderMagicNumber ( ) = = Magic )      { 
//-----------------------------------------------------                  
if ( OrderType ( ) = = OP_BUY ) { // если открыта бай-позиция                                   
  if ( вот здесь вставляй свои условия закрытия )  {
    OrderClose ( OrderTicket ( ) , OrderLots ( ) , Bid , 3 , Вlack ) ; // закрываем позицию
                                 }       
                               }  
 //--------------------------------------------------------
if ( OrderType ( ) = = OP_SELL ) { // если открыта селл-позиция 
 if ( вот здесь вставляй свои условия закрытия )    {
   OrderClose ( OrderTicket ( ) , OrderLots ( ) , Ask , 3 , Yellow ) ; // закрываем позицию
                     }       
                   }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
//------------конец блока закрытия позиций-----------------

이 블록을 START 함수 안에 삽입하십시오. 처음에 Ema_1, Ema_2, Ema_3을 계산한 직후에 할 수 있습니다.
그리고 분명히 OPENING PRICE EA의 작업을 수행해야 합니다. 그렇지 않으면 MA 교차점이 거의 모든 틱에서 지속적으로 시작 위치를 닫을 것입니다.

그리고 당신이 한 방식은 온라인이 올바르게 작동하지 않기 때문입니다. 고문은 다른 고문이나 매뉴얼이 개설한 포지션을 포함하여 모든 포지션을 폐쇄합니다.

그러나 더 쉽게, 나는 이미 그것을 하는 방법을 썼습니다. 위치를 열 때 NumberOfPositions(NULL,OP_BUY,Magic) 대신 NumberOfPositions(NULL,OP_SELL,Magic) 대신 설정하십시오.

NumberOfPositions(NULL,-1,Magic)

그러면 시장에는 항상 하나 이상의 위치가 없습니다. 폐쇄 블록이 없습니다.