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

 

안녕하세요, 코드에 대한 도움이 필요합니다. 저는 처음입니다.

문제는 후행이 매수 방향으로만 작동하고 매도 방향으로는 작동하지 않고, 코드 실행 시 로그에 "주문 수정 오류. 오류 코드 = 4051"이라는 오류가 발생한다는 점입니다.

다음은 테일링을 담당하는 코드 부분입니다.

 void Trailing( int tral)
{ 
   int Mag= OrderMagicNumber ();  

   OrderSelect (Mag, MODE_TRADES );

//+------------------------------------------------------------------+

//|                      tral buy                                    |

//+------------------------------------------------------------------+

   if ( OrderType ()== OP_BUY )

   if ( Bid - OrderOpenPrice ()> Point *tral)
    {
     if ( OrderStopLoss ()< Bid - Point *tral) 
       { 
       bool ress= OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Bid - Point *tral, Digits ), 0 , 0 ,Blue); 
       if (!ress) 
           Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ()); 
       else 
           Print ( "Цена Stop Loss ордера успешно модифицирована." );
       }
     }
//+------------------------------------------------------------------+

//|                      tral sell                                   |

//+------------------------------------------------------------------+   
   if ( OrderType ()== OP_SELL )
   if ( OrderOpenPrice ()- Ask > Point *tral)
    {
     if ( OrderStopLoss ()> Ask + Point *tral) 
       { 
       bool res= OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Ask + Point *tral, Digits ), 0 , 0 ,Red); 
       if (!res) 
           Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ()); 
       else 
           Print ( "Цена Stop Loss ордера успешно модифицирована." );
       }
     }
}          

 
Ivan Rozhkov :

좋은 오후입니다. 코드에 대한 도움이 필요합니다. 저는 초보자입니다. 여기에 전체 코드를 붙여넣는 것은 바람직하지 않을 것 같습니다.

문제는 후행이 매수 방향으로만 작동하고 매도 방향으로는 작동하지 않고, 코드 실행 시 로그에 "주문 수정 오류. 오류 코드 = 4051"이라는 오류가 발생한다는 점입니다.

이 문제를 해결하는 데 도움을 줄 수 있는 사람이 있으면 저에게 이메일을 보내주십시오.

주제는 옆에서가 아니라 토론을 위해 만들어졌습니다.
 
Artyom Trishkin :
주제는 옆에서가 아니라 토론을 위해 만들어졌습니다.

용서해주세요^_^

코드의 일부를 붙여넣었습니다. 무엇이 잘못되었는지 알려주세요

 
Ivan Rozhkov :

용서해주세요^_^

코드의 일부를 붙여넣었습니다. 무엇이 잘못되었는지 알려주세요

이 스레드에서 보세요 - 트롤 템플릿을 게시했습니다. 중간 어딘가.
 
Ivan Rozhkov :

안녕하세요, 코드에 대한 도움이 필요합니다. 저는 처음입니다.

문제는 후행이 매수 방향으로만 작동하고 매도 방향으로는 작동하지 않고, 코드 실행 시 로그에 "주문 수정 오류. 오류 코드 = 4051"이라는 오류가 발생한다는 점입니다.

다음은 테일링 코드의 일부입니다.

 //+------------------------------------------------------------------+

//|                      tral sell                                   |

//+------------------------------------------------------------------+   
   if ( OrderType ()== OP_SELL )
   if ( OrderOpenPrice ()- Ask > Point *tral)
    {
      if (( OrderStopLoss ()== 0.0 ) || ( OrderStopLoss ()> Ask + Point *tral)) 
       { 
       bool res= OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Ask + Point *tral, Digits ), 0 , 0 ,Red); 
       if (!res) 
           Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ()); 
       else 
           Print ( "Цена Stop Loss ордера успешно модифицирована." );
       }
     }
}          
그리고 나는 전체 구조가 전혀 마음에 들지 않습니다. 여기에 당신과 거의 같은 마술에 의한 간단한 후행이 있습니다.

 bool trailingpos( int magic_, int trail_p)
  {
   bool res= true ; double sl,slnew,tpips=trail_p* Point ; int i,k= OrdersTotal ();
   for (i= 0 ;i<k;i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==magic_)
           {
             switch ( OrderType ())
              {
               case OP_BUY :
                  slnew= NormalizeDouble ( Ask -tpips, Digits );
                  sl= OrderStopLoss ();
                   if ( OrderOpenPrice ()<slnew)
                     if ((sl<slnew) || (sl== 0.0 ))
                       {
                         if (! OrderModify ( OrderTicket (), OrderOpenPrice (),slnew, OrderTakeProfit (), OrderExpiration (), clrNONE ))
                          {res= false ; Print ( __FUNCTION__ ," OrderModify завершилась с ошибкой № ", GetLastError ());}
                       }
                   break ;
               case OP_SELL :
                  slnew= NormalizeDouble ( Bid +tpips, Digits );
                  sl= OrderStopLoss ();
                   if ( OrderOpenPrice ()>slnew)
                     if ((sl>slnew) || sl== 0.0 )
                       {
                         if (! OrderModify ( OrderTicket (), OrderOpenPrice (),slnew, OrderTakeProfit (), OrderExpiration (), clrNONE ))
                          {res= false ; Print ( __FUNCTION__ ," OrderModify завершилась с ошибкой № ", GetLastError ());}
                       }
                   break ;
              }
           }
        }
     }
   return (res);
  }
 
극값을 표시하기 위해 ZigZag용 iCustom을 올바르게 작성하는 방법은 무엇입니까?
 
02031986dima :
극값을 표시하기 위해 ZigZag용 iCustom을 올바르게 작성하는 방법은 무엇입니까?

아무것도 쓸 필요 없습니다.

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Igor Makanu :

그리고 나는 전체 구조가 전혀 마음에 들지 않습니다. 여기에 당신과 거의 같은 마술에 의한 간단한 후행이 있습니다.

도움을 주셔서 대단히 감사합니다. 코드를 추가할 때 후행이 어떤 이유로 작동하지 않습니다. 아마도 제가 뭔가 잘못하고 있는 것 같습니다((

 if (( OrderStopLoss ()== 0.0 )

추가 및 획득했지만 오류 #1 및 #4051과 함께 지속적으로 스팸

#1- 오류는 없지만 결과는 알 수 없음

#4051 - 잘못된 기능 매개 변수 값

 

안녕하세요, datatime 유형의 데이터 배열이 있습니다.

읽을 수 있는 파일로 출력하는 방법은 무엇입니까?

코드:

 int h= FileOpen ( "test" , FILE_WRITE | FILE_CSV | FILE_UNICODE );
       FileWriteArray (h,timeHistory, 0 , WHOLE_ARRAY );
       FileClose (h);

FILE_BIN 플래그가 있는 경우에만 쓰지만 읽을 수는 없습니다.

FILE_BIN 플래그가 없으면 파일은 비어 있습니다.

 
Karlinvain :

안녕하세요, datatime 유형의 데이터 배열이 있습니다.

읽을 수 있는 파일로 출력하는 방법은 무엇입니까?

코드:

FILE_BIN 플래그가 있는 경우에만 쓰지만 읽을 수는 없습니다.

FILE_BIN 플래그가 없으면 파일은 비어 있습니다.

파일쓰기 배열

메모

문자열 배열은 TXT 파일에만 쓸 수 있습니다. 이 경우 줄은 줄 끝 문자 "\r\n"에 의해 자동으로 종료됩니다. ANSI 또는 UNICODE 파일 형식에 따라 문자열이 si 인코딩으로 변환되거나 변환되지 않습니다.