Ea는 여러 개의 동일한 보류/지정가 주문을 생성하고 있습니다. [Help pls] - 페이지 2

 
GumRai :

우선 다른 함수 안에서 함수를 선언하려고 하지 마십시오.

게시 한 코드를 보면 무엇을하려는지 알 수 없습니다. 그래서 나는 당신을 도울 수 없습니다.

귀하의 신속한 답변에 감사드립니다. 내 프로그램에는 다음과 같은 많은 조건이 있습니다. P12까지 확인했습니다. 그것은 피벗과 같습니다. 조건이 충족되면 해당 레벨 P1, P2...에서 제한 거래가 열립니다. 숫자는 12입니다. 모든 인스턴스에 대해 구매/판매 코드를 작성하고 싶지 않았습니다. 그래서 별도의 buycall/sellcall 함수 를 만들었습니다. 판매를 위한 내 이전 코드 아래에 있습니다.

     if ( P1 == 1 || P1 == 5 || P1 == 7 )
      {
       if ( BuyTicket == 0 )
      BuyCall(S0);
      }    
     if ( P2 == 1 || P2 == 5 || P2 == 7 )
      {
       if ( BuyTicket == 0 )
      BuyCall(S1);
      }  
         .......................many more
 
int SellCall( double SC)
{

if (! OrderSelect (SellTicket, SELECT_BY_TICKET))
  {    
   if ( SellTicket == 0 )
   {
   SellStopLoss = SC + (StopLoss * CalcPoint1);
   SellTakeProfit = SC - (TakeProfit * CalcPoint1);
   SellTicket = OrderSend ( Symbol (),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit, "Sell Limit Order" ,MagicNumber,expiration,Red);
   BuyTicket = 0 ; 
   // counter tradee //
   if ( Ask > SellStopLoss && BuyTicket == 0 )
   {   if (! OrderSelect (BuyTicket, SELECT_BY_TICKET))
       {
       BuyStopLoss = Ask - (StopLoss * CalcPoint1);
       BuyTakeProfit = Ask + (TakeProfit *  CalcPoint1);
       BuyTicket = OrderSend ( Symbol (),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit, "Buy Order" ,MagicNumber, 0 ,Green);
       SellTicket = 0 ;
       }
   }
  } 
 }
   return (SellTicket);
}
 

이것은 예입니다. 각 틱에 동일한 거래를 배치합니다. 매 시간마다 넣어야 해요. 시간당 피벗으로.

 
int SellCall( double SC)
{

if (! OrderSelect (SellTicket, SELECT_BY_TICKET))
  {    
   if ( SellTicket == 0 )
   {
   SellStopLoss = SC + (StopLoss * CalcPoint1);
   SellTakeProfit = SC - (TakeProfit * CalcPoint1);
   SellTicket = OrderSend ( Symbol (),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit, "Sell Limit Order" ,MagicNumber,expiration,Red);
   BuyTicket = 0 ; 
   // counter tradee //
   if ( Ask > SellStopLoss && BuyTicket == 0 )
   {   if (! OrderSelect (BuyTicket, SELECT_BY_TICKET))
       {
       BuyStopLoss = Ask - (StopLoss * CalcPoint1);
       BuyTakeProfit = Ask + (TakeProfit *  CalcPoint1);
       BuyTicket = OrderSend ( Symbol (),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit, "Buy Order" ,MagicNumber, 0 ,Green);
       SellTicket = 0 ;
       }
   }
  } 
 }
   return (SellTicket);
}

판매 한도 를 열 때 BuyTicket을 0으로 설정합니다.

다음으로 BuyTicket==0인지 확인합니다. 물론 그렇습니다. 방금 설정했습니다.

그런 다음 SellTicket을 0으로 설정합니다.

다음 틱인 Sellticket==0이므로 판매 한도를 열고 BuyTicket을 다시 0으로 설정합니다.

등등 등등............

 
GumRai :

판매 한도를 열면 BuyTicket을 0으로 설정합니다.

다음으로 BuyTicket==0인지 확인합니다. 물론 그렇습니다. 방금 설정했습니다.

그런 다음 SellTicket을 0으로 설정합니다.

다음 틱인 Sellticket==0이므로 판매 한도를 열고 BuyTicket을 다시 0으로 설정합니다.

등등 등등............

그런 다음 강조 표시한 두 줄을 제거해야 합니다. 내가 그거 했어. 이제 2개월 간의 데이터 백 테스트에 대한 단 1시간의 결과를 보여줍니다.

내가 알아차린 또 다른 점은 내 매도 콜에서 매수에 대한 역거래가 있다는 것입니다. 매도 거래가 중단되면 매수 거래가 열립니다. 이제 Sellcall 함수 의 경우(Selltickets)가 반환되므로 괜찮습니까?

고맙습니다

 

 int SellCall( double SC)
{

if (! OrderSelect (SellTicket, SELECT_BY_TICKET))
  {    
   if ( SellTicket == 0 )
   {
   SellStopLoss = SC + (StopLoss * CalcPoint1);
   SellTakeProfit = SC - (TakeProfit * CalcPoint1);
   SellTicket = OrderSend ( Symbol (),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit, "Sell Limit Order" ,MagicNumber, 0 ,Red);
   
   // reverse tradee //
   if ( Ask > SellStopLoss && BuyTicket == 0 )
   {   if (! OrderSelect (BuyTicket, SELECT_BY_TICKET))
       {
       BuyStopLoss = Ask - (StopLoss * CalcPoint1);
       BuyTakeProfit = Ask + (TakeProfit *  CalcPoint1);
       BuyTicket = OrderSend ( Symbol (),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit, "Buy Order" ,MagicNumber, 0 ,Green);
       
       }
   }
 } 
 }
   return (SellTicket);

이제 이 코드에서 확인합니다. 먼저 Sellticket == 0 yes 명백한 다음 판매 주문을 배치하고 다음 buyticket == 0 yes, 다음은 주문을 구매합니다...하지만 돌아올 때...다시 확인 sellticket == 0 , no 지금이 아니라... 그래서 E가 1세트를 하고 멈췄다. 그러나이 문제를 제거하는 방법. 내 EA에서 비활성 보류 주문은 시작 시간부터 59분마다 삭제됩니다. 저는 그렇게 설정했습니다.

 

이제 다음과 같이 코드를 변경했습니다. 모든 지원 및 저항에 대해 읽습니다.

한 시간 동안 최대 6지지 및 6 저항이 있습니다. 그 6개 중 조건을 충족하면 6개에 대한 제한 주문을 엽니다. 1개가 충족되면 해당 주문에 대한 제한 주문을 엽니다. 이것은 알고입니다.

그래서 함수 호출을 위해 다음과 같이 코드를 설정했습니다.

 int BuyCall( double BC)
{  
      
if ( BuyTicket >= 0 && BuyTicket <= 5 )
  {
   BuyStopLoss = BC - (StopLoss * CalcPoint1);
   BuyTakeProfit = BC + (TakeProfit *  CalcPoint1);
   BuyTicket = OrderSend ( Symbol (),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit, "Buy limit Order" ,MagicNumber, TimeCurrent ()+ 3540 ,Green);
    
   }   
return ( 0 );
}

int SellCall( double SC)
{
  
 if ( SellTicket >= 0 && SellTicket <= 5 )
   {
   SellStopLoss = SC + (StopLoss * CalcPoint1);
   SellTakeProfit = SC - (TakeProfit * CalcPoint1);
   SellTicket = OrderSend ( Symbol (),OP_SELLLIMIT,LotSize,SC,UseSlippage,SellStopLoss,SellTakeProfit, "Sell Limit Order" ,MagicNumber, TimeCurrent ()+ 3540 ,Red);
  
   } 
   return ( 0 );
}

이제 1시간 동안 실행되고 각 매수/매도에 대해 6단계를 확인합니다. 하지만 1시간 동안만 운행합니다. 전체 데이터 세트에 대해 완벽하게 실행하려면 여기에서 해야 할 일.

 
if ( BuyTicket >= 0 && BuyTicket <= 5 )

이것은 전략 테스터 에서만 작동하며 처음 6개의 주문이 열리면 더 이상 작동하지 않습니다.

이런 식으로 시험에 티켓 번호를 사용할 수 없습니다

 
GumRai :

이것은 전략 테스터에서만 작동하며 처음 6개의 주문이 열리면 더 이상 작동하지 않습니다.

이런 식으로 시험에 티켓 번호를 사용할 수 없습니다

당신의 답변에 감사드립니다.

그럼 어떻게 해야 할까요? BuyTicket => 0 또는 BuyTicket 조건을 제거하면. 그런 다음 EA는 매 틱마다 동일한 거래를 많이 하고 있습니다 ..... 나에게 148의 주문 전송 오류를 제공합니다.

 
cashcube : 그럼 어떻게 해야 할까요?
이전에 답변했습니다.
 
cashcube :

당신의 답변에 감사드립니다.

그럼 어떻게 해야 할까요? BuyTicket => 0 또는 BuyTicket 조건을 제거하면. 그런 다음 EA는 매 틱마다 동일한 거래를 많이 하고 있습니다.....주문 보내기 오류가 148입니다.

우리는 당신이 무엇을하려고하는지 모릅니다

한 번에 하나의 미결 거래만 원하는 경우 새 주문을 보내기 전에 미결 주문이 없는지 확인하십시오 .

막대당 하나의 거래만 원하면 막대당 한 번만 테스트하십시오.

조건 조합을 원하면 조합을 테스트하십시오.