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

 
Wodzuuu :

아직 EA 를 이해 하지 못하는 사람들 위해 이야기작성 하십시오 : D 헤헤


이벤트 양초 입니다 . 매수 및 매도 또는 마감 을 위한 다양한 옵션이 있습니다 .

나는 당신이 쓴 것을 읽는 것보다 당신의 코드를 보면 더 많이 이해합니다. . . ;-)
 

두 번째 기능으로 TV 쇼를 보는 대신 을 읽고 이해하는 것을 고려해야 합니다. ;-)

당신이 달성하려고 하는 것은 간단하고 많은 전략에서 사용되지만, 당신의 코드와 당신의 이야기는 혼란스럽고 부분적으로 틀립니다. 적어도 코드는 .... 이야기에 대해 잘 모릅니다.

 //Pseudo code

if (NewBar) ResetSignals();                 //Set all SignalxExecuted to false
if (SignalBuy1&&!SignalBuy1Executed&&OpenOrders()== 1 ){
//do open buy position
  SignalBuy1Executed= true ;                //Set Signal to exectued to prevent a reuse in the same bar
}

if (SignalBuy2&&!SignalBuy2Executed&&OpenOrders()== 2 ){
//do open buy position
  SignalBuy2Executed= true ;                //Set Signal to exectued to prevent a reuse in the same bar
}

SignalBuy1=CheckForOpenBull42();          //Check for Signal1 condition is true
SignalBuy2=CheckForOpenBull62();	  //Check for Signal2 condition is true	

if(OpenOrders()>0)CheckForClose();        //Check any order needs to be closed


//and so on.....

일단 신호 하나만 구현하고 필요한 기능에 대한 코딩에 집중해보는 건 어떨까요? 하나의 신호에 대한 좋은 코드가 있다면 다른 신호를 구현하는 것이 쉬울 것이고 많은 기능이 이미 존재합니다.

나중에 배열 및 기타 기능을 사용하여 단순화할 수 있지만 위의 코드를 단순화하는 것이 현재로서는 가장 큰 문제가 되지 않아야 합니다.

 

크로닌 네! 당신은 저를 이해합니다 :), 하나EA많은 전략 이 있습니다.
150개의 정책 작성 해야 하고 동일한 그래프에서 동시에 이동해야 하고 모든 전략 한 번에 실행 해야 합니다 . 150EA를 동시에 실행하면 PC 폭발할 입니다. 그렇게 생각 합니다.

그 후에는 하나전략 EA있고 많은 전략이 이미 내부 에 있을 수 있기 때문에 의미 없습니다.

물론, 전략 서로 간섭 할 수 없으며 1회 실행 시 1초도 실행할 수 있으며, 1회, 3회, 5회 전략과 전략(1,3,5)을 동시에 실행할 수 있습니다.

더이상의 이야기쓰지 않겠 습니다 :)


코드가 잘못 되었습니다. 두 가지 전략 을 단일 EA 에 넣으 려고 했습니다 . 코드 작동 하지만 전체 가 제대로 작동 하지 않습니다.

귀하의 코드는 매우 흥미롭습니다. 연구하겠습니다 . 시간 주십시오 .

 

안녕하세요 친구 여러분 , 오랜 시간 코드 작업 끝에 Kronin정보 통해 코드가 구성되고 작동합니다 .
코드단일 EA 에서 두 가지 전략제시합니다 .


1. 작은 양초 구매 시나리오 의 경우 파란색 화살표 로 표시되며 BUY 에 대한 두 가지 옵션 있습니다.
2. 평균 촛불 의 경우 구매 시나리오 촛불빨간색 화살표 로 표시되며 BUY 에 대한 세 가지 옵션입니다.


1 포인트 = 1핍 편리한 상황도 있습니다 ( 문제 를 해결 하는 것은 나중을 위한 것입니다 )
( NewBar ) ResetSignals () 옵션을 사용 하지 마십시오 . 오류 의 원인 이 아니라고 생각하기 때문 입니다.

start() blue 에서 PART 2 함수 를 삭제 하면 하나의 전략 이 작동 하고 제대로 작동합니다 .
두 가지 실행 전략 이 포함된 PART1 PART2 코드 를 실행하면 겹칠 것 입니다. 이것은 오류입니다

크로닌 봐주 시겠어요 ?

 //+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA   20050610

//+------------------------------------------------------------------+
//| Check NEW BAR     WORK AT BARS  M15                                 |
//+------------------------------------------------------------------+
/*

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;                    
      }
   }
*/

//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS                    |
//+------------------------------------------------------------------+

int OpenOrders( string symbol)
  {
   int buys= 0 ,sells= 0 ;
//----
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false ) break ; 
       if (OrderSymbol()== Symbol () && OrderMagicNumber()==MAGICMA)
        {
         if (OrderType()==OP_BUY) buys++;
        }
     }
//---- return orders volume
   return (buys);
  }

//+------------------------------------------------------------------+
//| Calculate candle      These is condidion                         |
//+------------------------------------------------------------------+

// scenario 1 / EA 1  /  startegy 1 / blue

bool BULL4()
   {
   if (Close[ 1 ]-Open[ 1 ]>= 4 * Point && Close[ 1 ]-Open[ 1 ]<= 5 * Point )
   return ( true );
   } 

// scenario 2 / EA 2  /  startegy 2 / red

bool BULL6()
   {
   if (Close[ 1 ]-Open[ 1 ]>= 6 * Point && Close[ 1 ]-Open[ 1 ]<= 7 * Point )
   return ( true );
   }
      
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

// Check for open for scenario 1 / EA 1  /  startegy 1 
 
bool OpenBULL41()
  {
   int     res;
   if (Bid==Close[ 1 ]+ 3 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.41 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
       return ( true );
     }
   return ( false );  
  }
  
//----------------------------------- 
bool OpenBULL42()
  {
   int     res;
   if (Ask>OrderOpenPrice()+ 4 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.42 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
       return ;
     }
  }  
  
// Check for open for scenario 2 / EA 2  /  startegy 2
  
void OpenBULL61()
  {
   int     res;
   if (Bid==Close[ 1 ]+ 4 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.61 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
       return ;
     }
  }
//-----------------------------------  
 
void OpenBULL62()
  {
   int     res;
   if (Ask>OrderOpenPrice()+ 2 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.62 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
       return ;
     }
  }
  
//----------------------------------- 
void OpenBULL63()
  {
   int     res;
   if (Ask>OrderOpenPrice()+ 2 * Point )  
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.63 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Red);
       return ;
     }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

void CheckForClose()
{
   RefreshRates();
   if (OrderOpenPrice()+ 4 * Point < Ask)
   for ( int i = OrdersTotal ()- 1 ; i >= 0 ;i--)       // I Have do -1 in "OrdersTotal()-1"
   {
       OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
       if (OrderSymbol() == Symbol ()) 
      {
         bool ticket = true ;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid, 1 ,Black);

      }
   }
} 
/*
void CheckForClose2()
{
   RefreshRates();
   if(OrderOpenPrice()+6*Point< Ask)
   for (int i = OrdersTotal(); i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);

      }
   }
} 
*/
                                       
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
      
//------------------                                                          PART1      
           bool SignalBULL41Executed= false ;
             if (BULL4() && !SignalBULL41Executed && OpenOrders( Symbol ())== 0 )
               {
               OpenBULL41(); //do open buy position
               SignalBULL41Executed= true ;
               }
               
             bool SignalBULL42Executed= false ;
             if (!SignalBULL42Executed && OpenOrders( Symbol ())== 1 )
               {
               OpenBULL42(); //do open buy position
               SignalBULL42Executed= true ;
               }  
               
             if (OpenOrders( Symbol ())> 0 )CheckForClose();  
            
//------------------                                                          PART 2
            
             bool SignalBULL61Executed= false ;
             if (BULL6() && !SignalBULL61Executed && OpenOrders( Symbol ())== 0 )
               {
               OpenBULL61(); //do open buy position
               SignalBULL61Executed= true ;
               }
               
             bool SignalBULL62Executed= false ;
             if (!SignalBULL62Executed && OpenOrders( Symbol ())== 1 )
               {
               OpenBULL62(); //do open buy position
               SignalBULL62Executed= true ;
               }  
               
           bool SignalBULL63Executed= false ;
             if (!SignalBULL63Executed && OpenOrders( Symbol ())== 2 )
               {
               OpenBULL63(); //do open buy position
               SignalBULL63Executed= true ;
               }                
               
//            if(SignalBULL61Executed && OpenOrders(Symbol())>0)CheckForClose2();                    
            
  }
//+------------------------------------------------------------------+
 
Wodzuuu :

( NewBar ) ResetSignals () 옵션을 사용 하지 마십시오 . 오류 의 원인 이 아니라고 생각하기 때문 입니다.

Fun_NewBar() 함수 가 코딩된 방식으로는 그렇게 할 수 없습니다. . . bool 유형이고 bool 값을 반환하도록 이렇게 해야 합니다. . .

 bool Fun_New_Bar()                
   {                                
   static datetime New_Time= 0 ;      
                     
   if (New_Time!=Time[ 0 ])           
      {
      New_Time=Time[ 0 ];                
       return ( true );       // <---- we have a new bar so the function returns true
      }

   return ( false );
   }
 

, 맞습니다. bool반환 하고 이전에 보지 못한 int( 이미 수정 됨) 가 있습니다. 감사합니다
하지만 기능내가 사용하지 않는 텍스트

나는 이것이 두 개의 겹치는 전략 분리 하는 기능적용 되지 않는다고 생각 합니다 . 나는 관계를 보지 않는다 . 아니면 내가 틀렸나 요?

 //Pseudo code

if (NewBar) ResetSignals();                 //Set all SignalxExecuted to false
if (SignalBuy1&&!SignalBuy1Executed&&OpenOrders()== 1 ){
//do open buy position
  SignalBuy1Executed= true ;                 //Set Signal to exectued to prevent a reuse in the same bar
}
 

조금이나마 발전하셨다니 다행입니다만, 아직 갈 길이 멉니다 :-)

RaptorUK가 위에서 언급한 것을 수정해야 합니다. 신호 재설정이 중요합니다. 그렇지 않으면 EA가 새로운 거래를 시작하면서 곧 중단됩니다.
구현이 잘못되었습니다. 매 틱마다 SignalExecuted를 재설정하면 의미가 없습니다. OpenOrders도 필터링하기 때문에 더 많은 거래를 열지 않을 수도 있습니다. 그러나 전략을 통해 여러 주문을 열 수 있으므로 주문을 닫는 알고리즘도 원한다고 상상할 수 있으므로 새 막대에서 SignalExecuted 플래그를 재설정해야 합니다(구현에서는 쓸모없고 필요하지 않음) .

내가 당신을 맞다면 BULL6도 참이면 BULL4를 실행하지 않을 것입니다. 즉, 빨간색 전략이 유효하지 않은 경우 파란색 전략만, 평균 캔들이 유효하지 않은 경우에만 작은 캔들입니다.

 if (BULL4()&&!BULL6(){             // <--- only strategy BULL4 is valid, we are looking at a 'small' bar.
   if (!SignalBULL41Executed && OpenOrders( Symbol ())== 0 ){
    OpenBULL41(); //do open buy position
    SignalBULL41Executed= true ;
  }
   if (!SignalBULL42Executed && OpenOrders( Symbol ())== 1 ){
    OpenBULL42(); //do open buy position
    SignalBULL42Executed= true ;
}
 

다음 단계:

 // Check for open for scenario 1 / EA 1  /  startegy 1 
 
bool OpenBULL41()
  {
   int     res;
   if (Bid==Close[ 1 ]+ 3 * Point )  					                       // <--- equal makes no sense here and you should not compare doubles for equality. 
                                                                                                  Read (again): https://www.mql5.com/en/forum/136997 
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.41 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue); // <--- what is your plan with res? You are aware, it does include the ticket 
                                                                                                  number or -1, aren't you?

       return ( true );                                                                   // <--- Even if OrderSend() fails you return true.
     }
   return ( false );  
  }
  
//----------------------------------- 
bool OpenBULL42()
  {
   int     res;
   if (Ask>OrderOpenPrice()+ 4 * Point ) 							// <--- OrderOpenPrice() from a somewhere selected order may or may not work here 
                                                                                                  (may because only one order is open), but it is not nice coded. 
     {
      res= OrderSend ( Symbol (),OP_BUY, 0.42 ,Ask, 0 ,Close[ 1 ]- 25 * Point , 0 , "" ,MAGICMA, 0 ,Blue);
       return ;
     }
  }  

CheckForClose() 함수에는 거의 동일한 문제가 있으며 추가로 매직 넘버에 대한 필터가 없습니다. 또한 여기에서 구매 카운트의 주문에서 선택한 OrderOpenPrice()가 잘못된 주문을 마감하는 것으로 끝날 수 있습니다(실제로 작동하는지 확신할 수 없음).
Raptor가 이 스레드의 첫 페이지에 쓴 내용도 다시 읽으십시오.

귀하의 게시물과 코드의 댓글에서 어떤 순서가 어떤 전략에 속하는지 알고 싶어하는 느낌이 듭니다. 이를 달성하기 위해 두 번째 전략에 대한 두 번째 매직 넘버를 정의할 수 있습니다. 그런 다음 열린 전략에 따라 주문을 마감하는 것이 더 쉽습니다.

 
kronin :

다음 단계:

귀하의 게시물과 코드의 댓글에서 어떤 순서가 어떤 전략에 속하는지 알고 싶어하는 느낌이 듭니다. 이를 달성하기 위해 두 번째 전략에 대한 두 번째 매직 넘버를 정의할 수 있습니다. 그런 다음 열린 전략에 따라 주문을 마감하는 것이 더 쉽습니다.

각각 자체 차트에 있는 2개의 개별 EA에서 2개의 다른 전략을 실행하는 것이 더 간단하지 않을까요?
 
RaptorUK :
각각 자체 차트에 있는 2개의 개별 EA에서 2개의 다른 전략을 실행하는 것이 더 간단하지 않을까요?

예, 2, 3, 4, 5... 동의했습니다. 그러나 이야기와 이 기사에 따르면 " 나는 150개의 정책 작성 해야 하고 동일한 그래프에서 동시에 이동해야 하고 모든 전략 을 한 번에 실행 해야 합니다 . 150개의 EA를 동시에 실행하면 PC 폭발할 것입니다. - 그렇게 생각해요 . "
하나의 EA에서 더 많은 전략을 실행할 계획이라고 생각합니다....