ONLY CANDLE / BAR - 양초를 분류하거나 분리하는 방법은 무엇입니까? - 수정해주세요! - 페이지 5

 
Wodzuuu :

질문 1. 이 기능에서 촛불에 MyPips를 사용할 수 있습니까? 부울 BULL4()

네. 그러나 BULL4() 함수 에서 if 문이 올바른가요? 내 말은, 당신이 계산하는 그 촛불을 찾고 있습니까?

우드주 :

그리고 나는 나를 위해 좋은 프로그램을 썼습니다 :) 당신은 어떻습니까?

그것은 당신의 것이므로 나를 형성하는 것이 아니라 당신에게 좋을 것입니다.

일부 의견:

 bool CheckForCloseBULL4()
{
   int i;
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
       if ( ! OrderSelect (i, SELECT_BY_POS, MODE_TRADES) ) continue ;
         if ( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol ()  && OrderType() == OP_BUY )
             if (OrderOpenPrice()+ 8 *MyPips < Ask) return ( true );
            
   else return ( false );   // <-- the else here is wrong. Use {} if you are unsure what is processed where
}


int OpenOrders_BULL4( string symbol)
  {
   int buys= 0 ;

   for ( int i= 0 ;i< OrdersTotal ();i++)   // <-- do it like you do it in the other loops!
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) break ;  // <-- break? Why not using always the same code for the same thing? 
       if (OrderSymbol()== Symbol () && OrderMagicNumber()==MAGICMA1) //     Look at the for loop you used in CheckForCloseBULL4().       
        {
         if (OrderType()==OP_BUY) buys++; // <-- why this additional if? Simplify it to: 
        }                                 //     if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY) buys++;  
     }
   return (buys);
  }
 

나는 마지막 오류 를 수정합니다

 bool CheckForCloseBULL41()
{
   int i;
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
       if ( ! OrderSelect (i, SELECT_BY_POS, MODE_TRADES) ) continue ;
         if ( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol ()  && OrderType() == OP_BUY )
             if (OrderOpenPrice()+ 8 *MyPips < Ask) return ( true );
             else return ( false );                                                                               // <-- the else is correct now
}

int OpenOrders_BULL4( string symbol)
  {
   int buys= 0 ;
   int i;
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)                                                                     // Loop is correct and use the same code
     {
       if ( ! OrderSelect (i, SELECT_BY_POS, MODE_TRADES) ) continue ;
       if (OrderSymbol()== Symbol () && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY)buys++;
     }
   return (buys);
  }

나는 두 번째 구매를 추가

여는 조건:

 bool BULL42send()
   {
   int i;
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
       if ( ! OrderSelect (i, SELECT_BY_POS, MODE_TRADES) ) continue ;
         if ( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol ()  && OrderType() == OP_BUY )
             if (OrderOpenPrice()+ 8 *MyPips < Ask) return ( true );
       else return ( false );
   }

BULL41과 동일한 코드를 열고 CheckForClose 및 닫기(핍만 다름)

시작 기능은 다음과 같습니다.

 void start()
  {
   if (BULL4() && BULL41send() && OpenOrders_BULL4( Symbol ())== 0 )             
     {
       OpenBULL41(); //do open buy position
     }
   if (BULL42send() && OpenOrders_BULL4( Symbol ())== 1 )             
     {
       OpenBULL42(); //do open buy position
     }     
     

   if (CheckForCloseBULL41()== true && OpenOrders_BULL4( Symbol ())== 1 ) CloseBULL4();
   if (CheckForCloseBULL42()== true && OpenOrders_BULL4( Symbol ())== 2 ) CloseBULL4();      
  }
//+------------------------------------------------------------------+

이제 플래그, 재설정 신호 및 변경 시작 기능이 필요합니다.

내 상상은 말한다 :

새로운 바:

 bool New_Bar = false ;

bool Fun_New_Bar()
   {
   static datetime New_Time= 0 ;
   New_Bar= false ;   
   if (New_Time!=Time[ 0 ])
      {
         New_Time=Time[ 0 ];
         New_Bar= true ;
      }
   }

시작은 그렇게 보입니다.

 void start()
  {
   bool SignalBULL41Executed= false ;
   bool SignalBULL42Executed= false ;
   
   if (Fun_New_Bar()== true )
      {
      SignalBULL41Executed= false ;
      SignalBULL42Executed= false ;
      }   
   
   if (BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4( Symbol ())== 0 )             
     {
       OpenBULL41(); //do open buy position
       SignalBULL41Executed= true ;
     }
   if (BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4( Symbol ())== 1 )             
     {
       OpenBULL42(); //do open buy position
       SignalBULL42Executed= true ;
     }     
     

   if (CheckForCloseBULL41()== true && OpenOrders_BULL4( Symbol ())== 1 ) CloseBULL4();
   if (CheckForCloseBULL42()== true && OpenOrders_BULL4( Symbol ())== 2 ) CloseBULL4();      
  }

코드가 작동하지만 오류가 있을 수 있습니다.


	          
 

ResetSignals()가 그리워 잘 작동하지 않습니다.

 
Wodzuuu :

나는 마지막 오류를 수정합니다
...
...
...

코드가 작동하지만 일부 오류가 있을 수 있습니다.


CheckForCloseBULL41() 함수 에서 else는 잘못된 형식이기 때문에 말하지 않았습니다. 당신은 아무것도 변경하지 않았습니다. 미결 주문 중 하나 이상이 아래에 일치하는 경우 루프가 모든 주문을 통해 실행되지 않으므로 문제가 발생합니다.

 if ( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol ()  && OrderType() == OP_BUY )

이미 열려 있는 특정 수의 주문에 대해서만 새 주문을 열면 신호 플래그가 필요하지 않습니다. 이것은 또한 코드가 더 많은 주문을 여는 것을 방지합니다.

 if (BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4( Symbol ())== 0 )

Fun_New_Bar() 함수가 올바르지 않습니다.

 

1. 다른 문제

이것이 정확하지 않으면 다시 검색하겠습니다.

 bool CheckForCloseBULL41()
{
   int i;
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
   {
       if ( ! OrderSelect (i, SELECT_BY_POS, MODE_TRADES) ) continue ;
        {
         if ( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol () && OrderType() == OP_BUY )
            {
             if (OrderOpenPrice()+ 8 *MyPips < Ask)
               {
                   return ( true );
               }
            }
         }
    }    
   return ( false ); 
}

2. 새 막대 문제

 bool Fun_New_Bar()                
   {                                
   static datetime New_Time= 0 ;      
                     
   if (New_Time!=Time[ 0 ])           
      {
      New_Time=Time[ 0 ];                
       return ( true );            
      }

   return ( false );
   }

3. 리셋 신호 문제

 void start()
  {
   bool SignalBULL41Executed;
   bool SignalBULL42Executed;
   
   if (Fun_New_Bar()== true )
      {
      SignalBULL41Executed= false ;
      SignalBULL42Executed= false ;
      }   
   
   if (BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4( Symbol ())== 0 )             
     {
       OpenBULL41(); //do open buy position
       SignalBULL41Executed= true ;
     }
   if (BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4( Symbol ())== 1 )             
     {
       OpenBULL42(); //do open buy position
       SignalBULL42Executed= true ;
     }     
     

   if (CheckForCloseBULL41()== true && OpenOrders_BULL4( Symbol ())== 1 ) CloseBULL4();
   if (CheckForCloseBULL42()== true && OpenOrders_BULL4( Symbol ())== 2 ) CloseBULL4();      
  }

내가 나쁜 점 2 와 3을 적었 다면 고칠 생각 없을 것이고 가능한 한 가장 큰 방향 을 물어볼 것입니다.

 

1. 다른 문제
결정된

2. 새 막대 문제
결정된

3. 리셋 신호 문제

 void start()
  {
   bool SignalBULL41Executed;   //<-- if defined inside the start function, the flags get reset with every tick.
   bool SignalBULL42Executed;   //    define it outside in global scope.
   
   if (Fun_New_Bar()== true )
      {
      SignalBULL41Executed= false ;
      SignalBULL42Executed= false ;
      }   
   
   if (BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4( Symbol ())== 0 )             
     {
       OpenBULL41(); //do open buy position   //<-- As far as I remember, you defined this as bool. Do only set the flag, if the function returns true.
       SignalBULL41Executed= true ;             //    change to: if(OpenBULL41())SignalBULL41Executed=true;
     }
위의 수정 사항은 플래그에 대한 것입니다. 그러나 열린 질문은 그것이 필요합니까? 새 주문만 여는 경우 특정 수의 주문 이 이미 열려 있는 경우 필요하지 않을 수 있습니다. 이것이 내가 노란색으로 표시된 표현으로 의미한 것입니다.
 if (BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4( Symbol ())== 0 )

그러나 걱정하지 마십시오. 플래그와도 함께 작동하며 나중에 사용되지 않는 것으로 판명되면 제거할 수 있습니다.

 

플래그 는 필수는 아니지만 언젠가유용 할 수 있다고 생각 합니다 .

하나의 EA에 두 개의 EA가 있는 방법무엇입니까?
EA BULL4 복사 하고 BULL6 idex 간격 을 변경 했습니다.
복사 EA Bull4 + EA Bull6 too new EA ( 숫자 () 모든 것) start() 및 magicma2 함수 내에서 변경 하십시오...

EA 는 매우 잘 작동 하며 시나리오 가 서로 간섭하지 않습니다 . 나는 행복하다 .

나는 당신의 도움 에 감사 하고 싶었 습니다. 당신의 도움 과 특히 당신의 지원없었다면 저는 이 글을 쓰지 않았을 것입니다.

주제는 내 생각에 끝입니다.

문안 인사

 
Wodzuuu :

EA 는 매우 잘 작동 하며 시나리오 가 서로 간섭하지 않습니다 . 나는 행복하다 .

나는 당신의 도움 에 감사 하고 싶었 습니다. 당신의 도움 과 특히 당신의 지원없었다면 저는 이 글을 쓰지 않았을 것입니다.

천만에요. 좋은 피드백 감사합니다.