미결 주문 총액 문제 - 페이지 3

 
수정된 전체 코드를 표시해야 합니다.
 
if 문 앞뒤에 변수를 인쇄 하고 그 이유를 찾으십시오.
 
WHRoeder :
if 문 앞뒤에 변수를 인쇄 하고 그 이유를 찾으십시오.

알겠습니다. 감사합니다. 그렇게 하고 더 연구하겠습니다. SL과 TP가 OrderSend와 분리되어 있기 때문에 흥미로운 코드도 발견했습니다. 이것도 살펴볼 예정

ticket = OrderSend ( Symbol (), OP_SELL, getPositionSize(), Bid, 3 , 0 , 0 , "Basic CCI EA" , magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
 

안녕하세요 여러분

대부분의 문제를 해결했고 테스터에서 EA가 제대로 작동하지만 여전히 OrdersTotal에 문제가 있습니다. 데모 모드에서는 보류 중인 중지 주문을 모두 열 수 있지만 대부분은 매수 또는 매도만 가능합니다. 두 보류 주문이 동시에(몇 초 이내) 열리길 원하지만 다른 주문이나 보류 주문이 열려 있지 않은 경우에만 가능합니다. 나는 때때로 주문 를 계산할 기회가 있기 전에 보류 중인 주문을 모두 여는 경우가 있고, 다른 경우에는 보류 중인 주문이 전송되었다는 사실을 실제로 깨닫고 다른 하나는 열지 않을 것이라고 생각합니다. 중괄호 안에 Ordersend를 넣으면 if 조건이 충족될 때 둘 다 실행될 것이라고 생각했습니다. 또한 이제 마지막 촛불이 형성되는 동안, 즉 Time 변수가 Time[0] 촛불과 일치하는 한 틱은 관련이 없는 한 삭제하면 보류 중인 주문이 계속 열릴 것이라는 것도 알고 있습니다.

다음은 해당 코드입니다.

 extern datetime StartTime1 = D'2016.03.15 15:05' ;
int start(){
int buy_ticket= 0 , sell_ticket= 0 , buystop_ticket= 0 , sellstop_ticket= 0 , total= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
       if ( OrderSelect (i,SELECT_BY_POS) && OrderMagicNumber()==magic && OrderSymbol()== Symbol ())
        {
         total++;
         if (OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
         if (OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
         if (OrderType()==OP_BUY) buy_ticket=OrderTicket();
         if (OrderType()==OP_SELL) sell_ticket=OrderTicket();
        }

   if (total== 0 && Time[ 0 ]==StartTime1)
     {
      buystop_ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,Ask+Price, 30 ,Ask-SL, 0 , "Pending" ,magic, 0 ,Lime);
      sellstop_ticket= OrderSend ( Symbol (),OP_SELLSTOP,Lots,Bid-Price, 30 ,Bid+SL, 0 , "Pending" ,magic, 0 ,Red);
     }

이 작업을 수행하는 더 좋거나 더 쉬운 방법이 있습니까? 고맙습니다

 
Trader3000 :

안녕하세요 여러분

대부분의 문제를 해결했고 테스터에서 EA가 제대로 작동하지만 여전히 OrdersTotal에 문제가 있습니다. 데모 모드에서는 보류 중인 중지 주문을 모두 열 수 있지만 대부분은 매수 또는 매도만 가능합니다. 두 보류 주문이 동시에(몇 초 이내) 열리길 원하지만 다른 주문이나 보류 주문이 열려 있지 않은 경우에만 가능합니다. 어떤 일이 발생하면 주문 수를 계산할 기회가 있기 전에 보류 중인 주문을 모두 열 때도 있고, 보류 중인 주문이 전송되었다는 사실을 실제로 깨닫고 다른 주문을 열지 않을 때도 있습니다. 중괄호 안에 Ordersend를 넣으면 if 조건이 충족될 때 둘 다 실행될 것이라고 생각했습니다. 또한 이제 마지막 촛불이 형성되는 동안, 즉 Time 변수가 Time[0] 촛불과 일치하는 한 틱은 관련이 없는 한 삭제하면 보류 중인 주문이 계속 열릴 것이라는 것도 알고 있습니다.

다음은 해당 코드입니다.

이 작업을 수행하는 더 좋거나 더 쉬운 방법이 있습니까? 고맙습니다

Buystop_ticket 및 Sellstop_ticket의 값을 확인 하고 있습니까? 1개만 열려 있으면 두 번째 항목은 열리지 않습니다(첫 번째 항목을 수동으로 제거하지 않는 한).
 
Trader3000 : SL과 TP가 OrderSend와 분리되어 있기 때문에 흥미로운 코드도 찾았습니다. 이것도 살펴볼 예정
ticket = OrderSend ( Symbol (), OP_SELL, getPositionSize(), Bid, 3 , 0 , 0 , "Basic CCI EA" , magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
ECN 브로커가 시작되면 SL/TP가 설정된 상태로 OrderSend 가 실패합니다. 대부분은 빌드 600 이후로 이 문제를 해결했습니다.
 
zirkoner :
Buystop_ticket 및 Sellstop_ticket의 값을 확인하고 있습니까? 1개만 열려 있으면 두 번째 항목은 열리지 않습니다(첫 번째 항목을 수동으로 제거하지 않는 한).

답변 감사합니다. 실제로 Buystop 및 Sellstop 주문은 모두 시간의 약 50%를 엽니다. 매수 또는 매도의 나머지 50%는 전송됩니다. 하지만 알아낸 것이 있습니다. 나는 마지막 오류에 대해 물었고 둘 다 보내는 경우 오류가 없지만 하나만 열릴 때 열리지 않은 오류 130이 발생합니다. 그래서 내 정류장이 잘못된 것처럼 보이지만 이유를 모르겠습니다. SL의 코드는 다음과 같습니다.

 extern int StopLossOriginal= 11 ;

int start(){
int stoplevel=(MarketInfo( Symbol (),MODE_STOPLEVEL))/ 10 ;
   if (StopLossOriginal<=stoplevel) StopLossOriginal=stoplevel;

double point= Point * 10 ,
       Price=Pipmove*point,
       SL=(StopLossOriginal-Pipmove)*point;

 if (total== 0 && (Time[ 0 ]==time1)
     {
      buystop_ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,Ask+Price, 30 ,Ask-SL, 0 , "Pending" ,magic, 0 ,Lime);
       Print ( "Buystop ticket =" ,buystop_ticket);
      sellstop_ticket= OrderSend ( Symbol (),OP_SELLSTOP,Lots,Bid-Price, 30 ,Bid+SL, 0 , "Pending" ,magic, 0 ,Red);
       Print ( "Sellstop ticket =" ,sellstop_ticket);
     }

또한 인쇄 기능 을 추가했습니다. 그것이 "buystop_ticket과 Sellstop_ticket의 가치를 확인하고 있습니까?"라는 말의 의미입니까? 다음과 같은 두 가지 값을 반환합니다.

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: 바이스톱 티켓 =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: 바이스톱 티켓 = 49644335



 
WHRoeder :
ECN 브로커가 시작되면 SL/TP가 설정된 상태로 OrderSend 가 실패합니다. 대부분은 빌드 600 이후로 이 문제를 해결했습니다.
당신의 답변에 감사드립니다. 이것도 해봤는데 별차이없더라구요. 저는 빌드 950입니다.
 
Trader3000 :

답변 감사합니다. 실제로 Buystop 및 Sellstop 주문은 모두 시간의 약 50%를 엽니다. 매수 또는 매도의 나머지 50%는 전송됩니다. 하지만 알아낸 것이 있습니다. 나는 마지막 오류에 대해 물었고 둘 다 보내는 경우 오류가 없지만 하나만 열릴 때 열리지 않은 오류 130이 발생합니다. 그래서 내 정류장이 잘못된 것처럼 보이지만 이유를 모르겠습니다. SL의 코드는 다음과 같습니다.

또한 인쇄 기능을 추가했습니다. 그것이 "buystop_ticket과 Sellstop_ticket의 가치를 확인하고 있습니까?"라는 말의 의미입니까? 다음과 같은 두 가지 값을 반환합니다.

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: 바이스톱 티켓 =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: 바이스톱 티켓 = 49644335



2개의 OrderSend() 사이에 RefreshRates()를 추가해야 합니다.
 
zirkoner :
2개의 OrderSend() 사이에 RefreshRates()를 추가해야 합니다.
훗 훗! 그게 효과가 있었다. 매우 감사합니다
사유: