EA는 BUY 및 SELL 주문을 혼합합니다.

 
안녕,

EA를 코딩하려고 하는데 내 코드의 특정 위치에서 열린 주문과 보류 중인 주문 의 손절매를 업데이트해야 합니다. 주문에 대한 정보와 함께 경고를 표시하고 있습니다.

실행하면 "Count: 2 Stoploss 1.44705 for buy order: 46450421 orderType: 1"과 같은 메시지를 받습니다.

orderType: 1은 주문 46450421이 OP_SELL 주문임을 의미하지만 "if ((orderType == OP_SELL)" 대신 "if ((orderType == OP_BUY || orderType == OP_BUYSTOP))" 테스트를 트리거하는 이유는 무엇입니까? || 주문 유형 == OP_SELLSTOP))"?

 int orderType;
   for (cnt = total- 1 ; cnt >= 0 ; cnt--)
   {
       while (! OrderSelect (cnt, SELECT_BY_POS)) { Sleep ( 500 );}
      orderType = OrderType();
       if ( /*OrderMagicNumber()==Magic &&*/ OrderSymbol()== Symbol ())
      {      
         if ((orderType == OP_BUY || orderType == OP_BUYSTOP)) {
             if (!(isSLinTheZone && areBuyOrdersInProfitAt( NormalizeDouble (Low[ 1 ] - NbPipsTolerance* Point * 10 , Digits ))))
               if ( NormalizeDouble (OrderStopLoss(), Digits ) != longSL) { 
                   if (Debug) {
                     Alert ( "LongSL: " + longSL);
                     Alert ( "Order SL: " + NormalizeDouble (OrderStopLoss(), Digits ));
                     Alert ( "Modif required" );
                     Alert ( "Count: " + cnt + " Stoploss " + longSL + " for buy order: " + OrderTicket() + " orderType: " +OrderType());
                  }
                  OrderModify(OrderTicket(), OrderOpenPrice(), longSL, OrderTakeProfit(), 0 , Yellow );
                   //cnt = total-1;
               }
         }
         
         if ((orderType == OP_SELL || orderType == OP_SELLSTOP)) { 
             if (!(isSLinTheZone && areSellOrdersInProfitAt( NormalizeDouble (High[ 1 ] + NbPipsTolerance* Point * 10 + Spread* Point * 10 , Digits ))))
               if ( NormalizeDouble (OrderStopLoss(), Digits ) != shortSL) { 
                   if (Debug) {
                     Alert ( "ShortSL: " + shortSL);
                     Alert ( "Order SL: " + NormalizeDouble (OrderStopLoss(), Digits ));
                     Alert ( "Modif required" );
                     Alert ( "Count: " + cnt + " Stoploss " + shortSL + " for sell order: " + OrderTicket() + " orderType: " +OrderType());
                  }
                  OrderModify(OrderTicket(), OrderOpenPrice(), shortSL, OrderTakeProfit(), 0 , Yellow );
                   //cnt = total-1; 
               }
         }   
      } // end of if
   } // end of for


도와주세요 :-)

다니엘
 

 
ubzen :


게시물을 업데이트했습니다.
 

우선, 정수 표현을 사용하고 테스트를 다시 실행하십시오. 그것이 당신의 문제를 해결하는지 확인하고 우리는 그것에 대해 더 이야기 할 것입니다. 편집: 나는 이것이 ordertype이 0에서 시작한다는 사실과 관련이 있다고 생각합니다. 그리고 orderselect는 마지막으로 선택한 순서 를 그대로 유지합니다.

 
ubzen :

우선, 정수 표현을 사용하고 테스트를 다시 실행하십시오. 그것이 당신의 문제를 해결하는지 확인하고 우리는 그것에 대해 더 이야기 할 것입니다.

아무것도 바뀌지 않았습니다. 내가 이해하지 못하는 것은 경고 메시지에서 OrderType() 이 1 이며 이는 판매 주문 임을 의미합니다. 실제로는 매도 주문이지만 매수 주문의 코드가 실행됩니다. 나는 정말로 길을 잃었다. 위의 코드에 표시된 것처럼 OrderSelect(...)가 true를 반환할 때까지 루프를 시도했습니다. 아마도 순서를 선택할 수 없다고 생각했습니다. 그러나 그것의 유무에 관계없이 정확히 동일합니다.
 
ubzen :

편집: 나는 이것이 ordertype이 0에서 시작한다는 사실과 관련이 있다고 생각합니다. 그리고 orderselect는 마지막으로 선택한 순서를 그대로 유지합니다.

수 있습니다. . .

orderType 을 있을 수 없는 것으로 선언해 보십시오. . . 예

 int orderType = 10 ;

. . . 그런 다음 메시지가 표시되지 않으면 주문 선택 이 작동하지 않는 것입니다.

 
RaptorUK :

수 있습니다. . .

orderType 을 있을 수 없는 것으로 선언해 보십시오. . . 예

. . . 그런 다음 메시지가 표시되지 않으면 주문 선택이 작동하지 않는 것입니다.


처음 선언하면 정확히 동일하게 작동합니다. int orderType = 10;

변수를 선언하는 대신 항상 OrderType()을 사용해 보았지만 동일한 문제가 있습니다.

또한 주문을 수정하기 직전에 OrderSelect(...)를 호출 하려고 시도했지만 변경되지 않았습니다.

 
백 테스터 또는 데모 계정에서 이것을 테스트하고 있습니까?
 
ubzen :
백 테스터 또는 데모 계정에서 이것을 테스트하고 있습니까?

라이브 테스트 중입니다. 나는 EA를 차트에 놓고 그것이 하는 일을 보고 "확인 요청" 확인란 을 사용하고 있습니다.
 

일부 Print()를 추가하십시오. 무엇이 잘못되었는지 알 수 있도록 설명합니다. . . 예

 if ( /*OrderMagicNumber()==Magic &&*/ OrderSymbol()== Symbol ())
      {      
         Print ( "orderType = " ,orderType);
         if ((orderType == OP_BUY || orderType == OP_BUYSTOP)) {

. . . 그런 다음 전문가 탭을 살펴보십시오.

 
Salaires 수동 확인을 사용하여 문제가 발생할 수 있습니까?