지옥에 젠장 오류 130 - 페이지 3

 
delcor wrote >>

방그로쉬

입력 감사합니다

내가 이해하는 것을 도와줄 수 있니?

이 올바른지

나는 자동 트레일로 EA를 한다

if(OrderType()==OP_SELL && OrderSymbol()==Symbol())

{
if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // TP와 SL 배치
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // TP 배치
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // true 확인
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // true인 경우 주문 수정
Print("오류_수정 - ",GetLastError());
else str=StringConcatenate("\n 내 티켓 번호는 ", OrderTicket(), "이고 손절매 설정은 ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // 새 코드
}
}
}

다음은 다른 게시물에서 다른 접근 방식을 설명하는 내용입니다.

>>여기 새로운 손절매 가격이 이전 손절매보다 최소 1포인트 이상 높은지 확인하여 간단히 해결할 수 있습니다. 매도 주문은 반대로 하면 됩니다.

       if ( OrderType ( ) = = OP_BUY )
       {       
         if ( Bid - OrderOpenPrice ( ) > ( Point * TrailingStop ) )
         {        
             double oldStopLoss = OrderStopLoss ( ) ;
             double newStopLoss = Bid - Point * TrailingStop ;
             double nextStopLoss = oldStopLoss + Point ; // Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79             
                       
             if ( newStopLoss > = nextStopLoss ) // checking that the new stoploss price is at least 1 point or greater then the old stoploss
             {                               
               OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , newStopLoss , 0 , 0 , Green ) ;
               return ;
             }
         }
       }


다음은 내가 사용하는 전체 기능입니다. 지금 생각해보면 nextStopLoss보다 더 나은 var 이름을 사용할 수 있었고 OrderModify()에 오류 검사도 추가해야 합니다.

또한 내 Trailing Stop 기능은 동시에 여러 주문을 열 수 있는 EA에 있으므로 이러한 매개변수가 있으므로 동시에 여러 주문에 대해 Trailing Stop을 업데이트할 수 있습니다.

 void CheckTrailingStop ( int order_Ticket , int trailingStopValue )
{
   double oldStopLoss ;
   double newStopLoss ;
   double nextStopLoss ;
   int _trailingStop = trailingStopValue ;
   
   if ( order_Ticket < 0 ) return ;
                                    
   if ( OrderSelect ( order_Ticket , SELECT_BY_TICKET , MODE_TRADES ) = = false )
   {
       Print ( "CheckTrailingStop() - OrderSelect returned the error of " , GetLastError ( ) ) ;
       return ;    
   }
         
   if ( OrderType ( ) = = OP_BUY )
   {       
       if ( Bid - OrderOpenPrice ( ) > Point * _trailingStop )
       {        
         oldStopLoss = OrderStopLoss ( ) ;
         newStopLoss = Bid - Point * _trailingStop ;
         nextStopLoss = oldStopLoss + Point ; // Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79            
                    
         if ( newStopLoss > = nextStopLoss )
         {                               
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , newStopLoss , 0 , 0 , Green ) ;
             return ;
         }
       }
   }
                                             
   if ( OrderType ( ) = = OP_SELL )
   {                
       if ( OrderOpenPrice ( ) - Ask > Point * _trailingStop )
       {
         oldStopLoss = OrderStopLoss ( ) ;
         newStopLoss = Ask + Point * _trailingStop ;
         nextStopLoss = oldStopLoss - Point ; // Subtracting 1 point from oldStopLoss, i.e. 76.78 to 76.77
                    
         if ( newStopLoss < = nextStopLoss | | ( OrderStopLoss ( ) = = 0 ) )
         {                               
             OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , newStopLoss , 0 , 0 , Green ) ;
             return ;
         }
       }
   }
}

그런 다음 내 start() 함수에 다음이 있습니다.

 void start ( )
{                       
   if ( validTimePeriod = = false ) return ;
   if ( validTrailingStop = = false ) return ;
        
   //---- Start Main program ----
   Main ( ) ;
   
   if ( EnableHedging = = true )
   {
      HedgeStopLossCheck ( ) ;
      CheckHedges ( ) ;
   }
   
   if ( TrailingStop > 0 ) CheckTrailingStop ( currentOrderTicket , TrailingStop ) ;                 
           
   CheckWaiting ( ) ;
   
   GetOpenTradeLots ( ) ;    
      
   CheckIfCurrentOrder_Closed ( ) ;
}

다른 함수 호출은 그대로 두었습니다. 코드를 가능한 한 특정 함수로 분할하는 것을 좋아한다는 것을 알 수 있습니다. 그것은 일을 훨씬 쉽게 만듭니다.

EA에 행운을 빕니다.

 
vangrosh :

다음은 다른 게시물에서 다른 접근 방식을 설명하는 내용입니다.

>>여기 새로운 손절매 가격이 이전 손절매보다 최소 1포인트 이상 높은지 확인하여 간단히 해결할 수 있습니다. 매도 주문은 반대로 하면 됩니다.


다음은 내가 사용하는 전체 기능입니다. 지금 생각해보면 nextStopLoss보다 더 나은 var 이름을 사용할 수 있었고 OrderModify()에 오류 검사도 추가해야 합니다.

또한 내 Trailing Stop 기능은 동시에 여러 주문을 열 수 있는 EA에 있으므로 이러한 매개변수가 있으므로 동시에 여러 주문에 대해 Trailing Stop을 업데이트할 수 있습니다.

그런 다음 내 start() 함수에 다음이 있습니다.

다른 함수 호출은 그대로 두었습니다. 코드를 가능한 한 특정 함수로 분할하는 것을 좋아한다는 것을 알 수 있습니다. 그것은 일을 훨씬 쉽게 만듭니다.

EA에 행운을 빕니다.

감사합니다-잘 생겼어요

그래서 당신은 ea의 맨 아래에 start() 함수 를 배치합니까?

 
나는 끔찍한 오류에도 문제가 있습니다. 문제는 손절매나 이익 실현이 없고, 단지 보류 중인 주문을 하는 데 실패하고, 문제가 없어야 하는 시장에서 많은 핍이 떨어져 있다는 것입니다...
 
TheEconomist wrote >>
나는 끔찍한 오류에도 문제가 있습니다. 문제는 손절매나 이익실현이 없고, 보류 중인 주문을 하지 않고 시장에서 많은 핍이 있어야 문제가 없어야 한다는 것입니다...

good'ole 130의 문제는 클래스나 오류 그룹 중 하나를 표시하고 즉각적인 수정으로 이어지지 않는다는 것입니다.
문제를 고칠 수도 있지만 여전히 문제가 있습니다.

여기에서 발생하는 것은 오타뿐입니까?

Buy Stop 주문을 의도했을 때 Ask 위에 Buy Limit를 입력하고 있습니까?

FWIW

-BB-

 
BarrowBoy :

good'ole 130의 문제는 클래스나 오류 그룹 중 하나를 표시하고 즉각적인 수정으로 이어지지 않는다는 것입니다.
문제를 고칠 수도 있지만 여전히 문제가 있습니다.

여기에서 발생하는 것은 오타뿐입니까?

Buy Stop 주문을 의도했을 때 Ask 위에 Buy Limit를 입력하고 있습니까?

FWIW

-BB-

작업 유형을 선택하는 기능이 있습니다.

 int SellOperation ( double ToCompare )
  {
   int op ;
   if ( Bid > ToCompare )
     op = OP_SELLSTOP ;
   if ( Bid = = ToCompare )
     op = OP_SELL ;
   if ( Bid < ToCompare )
     op = OP_SELLLIMIT ;        
   return ( op ) ;   
  }
  
  
int BuyOperation ( double ToCompare )
  { 
   int op ;
   if ( Ask > ToCompare )
     op = OP_BUYLIMIT ;
   if ( Ask = = ToCompare )
     op = OP_BUY ;
   if ( Ask < ToCompare )
     op = OP_BUYSTOP ;
   return ( op ) ;
  }

int WhatOperation ( int operation , double ToCompare )
  { 
   if ( operation = = OP_BUY )
     return ( BuyOperation ( ToCompare ) ) ;
   if ( operation = = OP_SELL )
     return ( SellOperation ( ToCompare ) ) ;     
  }       

이와 같이:

09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,매일: pylon 0 @ 0.8024에 대한 레벨 2에서 시작 매도, 입찰가 = 0.8016
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,매일: OrderSend 오류 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,매일: ReliableOrderSend 오류: 130: 잘못된 중지.


 

안녕하세요 이코노미스트입니다.

그냥 몇 가지 빠른 ...

1. WhatOperation()이 주어진 실제 규범을 가지지 않는 한 ToCompare에서 정규화를 보지 마십시오.

2. 이중 구성 요소에 문제가 있음 - 예: '조건문 실패... [At wits end] if ( 1.4225 > 1.4225) is NOT TRUE!!!!!!'

3. https://book.mql4.com/appendix/limits 의 지침을 따르십니까?

문안 인사

 

130으로 '빠른 질문' 에서 내 오류를 해결하기 위해이 게시물을 연구했습니다. 주문 보내기 기능과 인쇄 기능이있는 일지 항목이 있습니다. 무슨 일이 일어나고 있는지 아는 사람 있습니까?

감사해요,

바우어 보이

 

.

.../24681에서 볼 수 있듯이

 if ( isBuying ) 
{ 
   if ( stopLoss > 0 )
  ACCTSL = Ask - ( stopLoss * Point * MyDig ) ;

   if ( takeProfit > 0 )
  ACCTTP = Ask + ( takeProfit * Point * MyDig ) ;
   // Buy
  ticket = OrderSend ( Symbol ( ) , OP_BUY , lots , Ask , slippage , ACCTSL , ACCTTP , 
  nameEA , 16384 , 0 , Red ) ; 
   Print ( "Stop Loss Value" , ACCTSL ) ;
   Print ( "Take Profit Value" , ACCTTP ) ;

1. StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);

SL,TP는 Bid 에서 최소한 StopLevel 포인트 떨어져 있어야 합니다.

아래 참조(**)


2. ACCTxx = NormalizeDouble(Ask ..(..), Digits );


3. Print("Bid=",DoubleToString(Ask, Digits ),", Ask=",DoubleToString(Bid, Digits ));


4. 인쇄("손절매 값",DoubleToString( ACCTSL, Digits ),", stopLoss=",stopLoss);
인쇄("이익 가치 창출", DoubleToString(ACCTTP, Digits ),", takeProfit=",takeProfit);

왜 DoubleToString()인가? Print() 는 4자리만 표시합니다 .



Btw , 나는 또한 적어도 한 번은 Print("MyDig=",MyDig); 왜요? 그런 다음 그것에 대해 걱정해야 할 방법이 없습니다. 사소해 보일 수 있지만 이러한 간단한 것들을 둘러싼 재미에 놀라게 될 것입니다!


5. 모든 문제는 사용 가능한 모든 정보를 손끝으로 가져와 표시 하여 쉽게 해결할 수 있습니다.

그럼 구식 종이+연필로 오해가 있는 부분 보이네요 .



(**)

참조: https://book.mql4.com/appendix/limits

StopLevel 최소 거리 제한.

다음 중 하나에 해당하는 경우 거래가 이루어지지 않습니다.

주문 유형 공개 가격 손절매(SL) 테이크프로핏(TP)
구입하다
수정 금지 Bid-SL StopLevel TP-Bid StopLevel
팔다
수정 금지 SL-Ask StopLevel Ask-TP StopLevel
구매한도
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel
구매 중지
OpenPrice-Ask StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
판매 중지
Bid-OpenPrice StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel

 
fbj wrote >>

.

.../24681에서 볼 수 있듯이

1. StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);

SL,TP는 Bid 에서 최소한 StopLevel 포인트 떨어져 있어야 합니다.

아래 참조(**)


2. ACCTxx = NormalizeDouble(Ask ..(..), Digits );


3. Print("Bid=",DoubleToString(Ask, Digits ),", Ask=",DoubleToString(Bid, Digits ));


4. 인쇄("손절매 값",DoubleToString( ACCTSL, Digits ),", stopLoss=",stopLoss);
인쇄("이익 가치 창출", DoubleToString(ACCTTP, Digits ),", takeProfit=",takeProfit);

왜 DoubleToString()인가? Print() 는 4자리만 표시합니다 .



Btw , 나는 또한 적어도 한 번은 Print("MyDig=",MyDig); 왜요? 그런 다음 그것에 대해 걱정해야 할 방법이 없습니다. 사소해 보일 수 있지만 이러한 간단한 것들을 둘러싼 재미에 놀라게 될 것입니다!


5. 모든 문제는 사용 가능한 모든 정보를 손끝으로 가져와 표시 하여 쉽게 해결할 수 있습니다.

그럼 구식 종이+연필로 오해가 있는 부분 보이네요 .



(**)

참조: https://book.mql4.com/appendix/limits

StopLevel 최소 거리 제한.

다음 중 하나에 해당하는 경우 거래가 이루어지지 않습니다.

주문 유형 공개 가격 손절매(SL) 테이크프로핏(TP)
구입하다
수정 금지 Bid-SL StopLevel TP-Bid StopLevel
팔다
수정 금지 SL-Ask StopLevel Ask-TP StopLevel
구매한도
Ask-OpenPrice StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
SellLimit
OpenPrice-Bid StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel
구매 중지
OpenPrice-Ask StopLevel OpenPrice-SL StopLevel TP-OpenPrice StopLevel
판매 중지
Bid-OpenPrice StopLevel SL-OpenPrice StopLevel OpenPrice-TP StopLevel

무슨 일이 일어나고 왜 이런 일이 일어나고 있는지 말할 수 없습니다.

2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: #130 오류로 OrderSend(Trender 베타 테스트) 실패

2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: MyDig=10

2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: 이익실현 가치1.43155, 이익실현=110

2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: 손절매 값1.42255, stopLoss=200

2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: Bid=1.44255, Ask=1.44229

 
Bauer_Boy wrote >>

무슨 일이 일어나고 왜 이런 일이 일어나고 있는지 말할 수 없습니다.

이제 전체 코드를 보여줄 때입니다. 망설이시면 PM을 이용하시면 됩니다.

입찰가보다 TP가 낮습니다.