[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 631

 
anton.veksler :

Symbol() MT4 관련 문제:

설명할 2가지 기능:

첫 번째를 실행하면 빈 문자열이 출력됩니다.

다음은 두 번째 함수 문자열 식별자 "EURUSD"입니다(차트에 따라 다르지만 출력은 함수 논리에 따라 빈 문자열이 있어야 함).

무엇이 잘못되었는지 이해하도록 도와주시겠습니까? 감사해요


변수를 선언할 때 예약된 이름(값)을 사용할 수 없습니다. _value를 호출하세요.
 
hoz :


내가 한 일은 다음과 같습니다.

정류장과 테이크가 없습니다. 발이 올바르지 않다는 오류 130이 로그에 기록됩니다. 이유를 알 수 없습니다.

그리고 그들은하지 않을 것입니다!

   double sl = 0 , tp = 0 ;                                           // тут присвоили по нулям
  
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )           // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 ) // замените на if(sl == 0)                   // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - SL*pt, Digits );   // Если по нулям, тогда выполнится условие!
 

비탈리 님 말씀대로 해봤는데 달라진게 없네요. 분명히 잼은 다른 곳에 묻혔습니다.

그 전에는 모든 것이 나에게 효과가 있었고(주문 개시 - 미리 결정된 가격 수준에 도달한 후 사용으로 수정 및 전환) 모든 것이 효과가 있었습니다. 다음과 같았습니다.

 bool Trade ( int signal)
{
  FindOrders();
  
   double sl = 0 , tp = 0 ;

   if (signal == SIGNAL_BUY)                                                           // Если сигнал на покупку и открытых ордеров нет...
     if (!OpenBuy())                                                           // открываем лимитный ордер на покупку
       return ( false );
        
   if (signal == SIGNAL_SELL)                               // Если сигнал на продажу и открытых ордеров нет..
     if (!OpenSell())                                                           // Открываем лимитный ордер на продажу
       return ( false );
  
   int total = OrdersTotal () - 1 ;
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )                             // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - i_sl*pt, Digits );                     // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() + i_tp*pt, Digits );                     // Получаем значение тейкпрофита для выбранного ордера
      }
       if (g_type == OP_SELL)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() + i_sl*pt, Digits );                 // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() - i_tp*pt, Digits );                 // Получаем значение тейкпрофита для выбранного ордера
      }
       if (sl != 0 || tp != 0 )                                                             // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400 ,Lime);       // Модифицируем ордер
      }
    }
  }

   return ( true );
}

이제 모든 것을 특정 특수 기능으로 분해하면서 모든 것이 완벽하게 작동하지 않게 되었습니다. 그래서 이미 시도했지만 아무 것도 나오지 않습니다. 정류장이 배치되지 않습니다.

 
borilunad :

그리고 그들은하지 않을 것입니다!

 double sl = 0 , tp = 0 ;                                           // тут присвоили по нулям
  
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )           // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 ) // замените на if(sl == 0)                   // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - SL*pt, Digits );   // Если по нулям, тогда выполнится условие!

글쎄, 논리는 어디에 있습니까? 나는 매우 이해하고 싶습니다 .. 기능이 있습니다 :

 void OrdersModifying()
{
   int total = OrdersTotal () - 1 ;
   double sl = 0 , tp = 0 ;
  
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )                             // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - i_sl*pt, Digits );                     // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() + i_tp*pt, Digits );                     // Получаем значение тейкпрофита для выбранного ордера
      }
       if (g_type == OP_SELL)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() + i_sl*pt, Digits );                 // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() - i_tp*pt, Digits );                 // Получаем значение тейкпрофита для выбранного ордера
      }
       if (sl != 0 || tp != 0 )                                                             // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400 ,Lime);       // Модифицируем ордер
      }
    }
  }
}

순서는 입문서인 경우입니다. stop 및 take의 외부 변수는 i_sl 이고 i_tp 는 0이 아닙니다. 그러면 이미 주문된 stop 및 take 가격을 구하고 이들은 sltp 입니다. 그런 다음 여기에서 sl tp 를 계산했는지 확인합니다 (짧은 경우).

 if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() + i_sl*pt, Digits );                 // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() - i_tp*pt, Digits );                 // Получаем значение тейкпрофита для выбранного ордера
      }

값을 얻으면 0이 될 수 없습니다 .. 변경될 것이기 때문입니다! 이것들은 코드 컨텍스트에서 순차적으로 얻는 변수입니다.

그리고 여기서 stop과 take 값을 찾았는지 확인했습니다. 모든 조건 후에 어떻게 0이 될 수 있습니까?

 if (sl != 0 || tp != 0 )                                                             // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400 ,Lime);       // Модифицируем ордер
      }
 

먼저 시작할 때 논리를 빌드한 다음 함수, 파일 등을 만듭니다.

오른쪽 귀 뒤에 왼손으로 왜 긁는거야?!

 

내 기능은 매개변수 선언으로 시작됩니다. Kim을 참조하십시오!

 void ModifyOrder( int ticket, double pp, double sl, double tp, datetime e, color arrow_cl) 
 
borilunad :

내 기능은 매개변수 선언으로 시작됩니다. Kim을 참조하십시오!


그게 날 위한거야?
 
hoz :

글쎄, 논리는 어디에 있습니까? 나는 매우 이해하고 싶습니다 .. 기능이 있습니다 :

순서는 입문서인 경우입니다. stop 및 take의 외부 변수는 i_sl 이고 i_tp 는 0이 아닙니다. 그러면 이미 주문된 stop 및 take 가격을 구하고 이들은 sltp 입니다. 그런 다음 여기에서 sl tp 를 계산했는지 확인합니다 (짧은 경우).

값을 얻으면 0이 될 수 없습니다 .. 변경될 것이기 때문입니다! 이것들은 코드 컨텍스트에서 순차적으로 얻는 변수입니다.

그리고 여기서 stop과 take 값을 찾았는지 확인했습니다. 모든 조건 후에 어떻게 0이 될 수 있습니까?


젠장, if (g_type == OP_BUY)가 아니라 if ( OrderType( ) = = OP_BUY   || 주문 유형( ) == OP_BUY 중지 ||   OrderType( ) = = OP_BUY LIMIT ) 어떤 주문을 열었는지 기억하지 못합니다.
 
hoz :

그게 날 위한거야?
하지만 누구에게?
 
rigonich :

젠장, if (g_type == OP_BUY)가 아니라 if ( OrderType( ) = = OP_BUY   || 주문 유형( ) == OP_BUY 중지 ||   OrderType( ) = = OP_BUY LIMIT ) 어떤 주문을 열었는지 기억하지 못합니다.
나에게 이 기능은 4 가지 유형의 주문 과 2가지 유형의 위치를 모두 수정하며 더 이상 존재하지 않습니다!