[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 525

 
죄송합니다. 마지막 추가 내용은 잡지에 기록되지 않습니다.
 //----
   for ( i= OrdersHistoryTotal ();i> 0 ;i--){
     OrderSelect (i- 1 ,SELECT_BY_POS,MODE_HISTORY  );
     if ( OrderMagicNumber ( )== 2000 
    && OrderSymbol ()== Symbol ()&&
     OrderTakeProfit ( )== OrderClosePrice (        )&&wremjapomnim< OrderCloseTime ( ) ||
   OrderMagicNumber ( )== 1000 && OrderSymbol ()== Symbol ()
   && OrderTakeProfit ( )== OrderClosePrice (       )&&wremjapomnim< OrderCloseTime ( )){
   Alert ( "нашли MODE_HISTORY" );
 for ( i= OrdersTotal ();i> 0 ;i--)  {
 Alert ( "паследний цикл" ,i);
   OrderSelect (i- 1 ,SELECT_BY_POS );
   if ( OrderMagicNumber ( )== 2000 && OrderSymbol ()== Symbol ()
  || OrderMagicNumber ( )== 1000 && OrderSymbol ()== Symbol ())  { 
   Alert ( "OrderTicket( )" , OrderTicket ( )); 
   OrderDelete ( OrderTicket ( )) ; Alert ( "OrderDelete-vse" ,   GetLastError ( ) ); 
   OrderClose ( OrderTicket ( ), OrderLots ( ), OrderClosePrice ( ) , 0 , CLR_NONE );
   Alert ( "OrderClose-vse" ,   GetLastError ( ) ); C= 0 ; }}}}                              
   

즉, 라인 Alert ( "OrderTicket( )" , OrderTicket ( )); 마지막주기가 아직 커밋되지 않았다고 말할 수 있습니다 !!

여기 로그가 있습니다 이전에는 종종 코드를 다시 작성했습니다. 내 의견으로는 4108 및 4050에서 오류가 자주 발생했습니다. 이제는 오류가 없습니다 !! 예, 어쨌든 작동하지 않습니다!

 

글쎄, 네, 그렇게 되었고 개가 뒤적거렸습니다.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

그래서 사실이야, se .. Chezh 내가 라인에서 똑똑했습니까?

 
신에 의해, 나는 조건을 조건으로 모른다.
 
Dimka-novitsek :

글쎄, 네, 그렇게 되었고 개가 뒤적거렸습니다.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

그래서 사실이야, se .. Chezh 내가 라인에서 똑똑했습니까?


|| 먼저 실행된 다음 &&
 
ilunga :
이 순간까지만 원격 대기 주문이 될 수 있으며 결과는 비정상적일 것입니다 ;)

나는 역사의 유행이 아니라 여기에서 먼 것을 선택하지 않는다는 것을 이해하지 못합니다. 알겠습니다. 아니오, 교착 상태입니다.
 

-아아!! 그래서 지금은 양쪽을 괄호로 묶겠습니다!! 감사합니다!!!!!

휴!!

그래서 지금은 샤워 파솔에 있습니다. 로스트 ..

 
Dimka-novitsek :

나는 역사의 유행이 아니라 여기에서 먼 것을 선택하지 않는다는 것을 이해하지 못합니다. 알겠습니다. 아니오, 교착 상태입니다.

삭제해야 하는 보류 중인 주문 이 1개 있고 해당 라인에 도달했다고 가정해 보겠습니다(읽기 쉽도록 연산자로 구분).

 OrderDelete ( OrderTicket ( ));
Alert ( "OrderDelete-vse" ,   GetLastError ( ) );
OrderClose ( OrderTicket ( ), OrderLots ( ), OrderClosePrice ( ) , 0 , CLR_NONE );
Alert ( "OrderClose-vse" ,   GetLastError ( ) );
 C= 0 ;

그래서 우리는 이 영장이 있습니다:

1) 삭제하는 동안:

) 우리는 운이 좋았고 그는 떠났다

b) 가격이 너무 비싸서 / 서버에 과부하가 걸리거나 인터넷이 막 다운되어 삭제되지 않을 수 있습니다. 그러나 어쨌든 계속합니다

2) 모든 것이 나쁘다고 쓴다면

3) 주문을 닫습니다(첫 번째 단락에서 삭제한 보류 중!!)

결과 ... 100% 예측할 수는 없지만 분명히 또 다른 실수

4) 이에 대한 메시지 표시

 
Dimka-novitsek :

글쎄, 네, 그렇게 되었고 개가 뒤적거렸습니다.

if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()
|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()) {

그래서 사실이야, se .. Chezh 내가 라인에서 똑똑했습니까?

이런 식으로 합시다 ... 아무도 자신을 쏘지 않고 명령을받지 않도록 ... :))

순서대로 시작합시다. 먼저, 마지막으로 닫힌 위치 를 찾아 그것이 take에 의해 닫혔는지 확인합니다:

   int j=- 1 ;
   datetime t;
   // Поищем в цикле последнюю закрытую позицию, которая закрылась по TakeProfit
   for ( int i= 0 ; i< OrdersHistoryTotal (); i++) {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
         if ( OrderSymbol ()!= Symbol ())     continue ;
         if ( OrderType ()> 1 )               continue ;
         if ( OrderMagicNumber ()== 1000 || OrderMagicNumber ()== 2000 ) {
             if (t< OrderCloseTime ()) {
                t= OrderCloseTime ();
                j=i;
               }
            }
         }
      }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
       if ( NormalizeDouble ( OrderClosePrice ()- OrderTakeProfit (), Digits )< 0.5 * Point ) {
         Alert ( "Позиция с тикетом #" , OrderTicket (), " закрыта по TakeProfit, закрываем остальные прозиции и удаляем отложенные ордера" );
         // Здесь код для закрытия всех открытых позиций (тоже в цикле)
         // Здесь код для удаления всех отложенных ордеров (также в цикле)
         }
      }

이것:

 // Здесь код для закрытия всех открытых позиций (тоже в цикле)
// Здесь код для удаления всех отложенных ордеров (также в цикле)

숙제가 될 것입니다... :)

 
감사합니다!!!!!!
 
잘썼다!!!!