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

 

여러분, 나는 이미 새로운 양초 가 나타날 때만 주문을 여는 방법에 대해 여기에서 물었습니다. 저는 TF D1을 사용합니다.

나는 이전 양초의 분석을 기반으로 특정 수준(buystop_lvl 및 Sellstop_lvl)에서 지연을 설정하기로 결정했습니다.

따라서 하루의 시작에 배치해야하며 새 양초가 오면 삭제하고 보류가 활성화되었는지 여부는 중요하지 않습니다. 작동하는 경우 시장 주문은 반드시 또한 폐쇄. 최대 2개의 주문, 바이스톱 및 셀스톱.

내가 쓴 내용은 다음과 같습니다.

1. 먼저 보류 또는 시장가 주문이 있는지 확인하고 있으면 삭제/종료합니다.

 int total= OrdersTotal ();
   if (total!= 0 && NewBar()==true){
                 for ( int i= 0 ; i<total; i++)
                    {
                     OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
                     if ( OrderType ()==OP_BUY)   OrderClose ( OrderTicket (), OrderLots (),Bid, 10 );
                     if ( OrderType ()==OP_SELL) OrderClose ( OrderTicket (), OrderLots (),Ask, 10 );
                     if ( OrderType ()==OP_BUYSTOP)   OrderDelete ( OrderTicket ());
                     if ( OrderType ()==OP_SELLSTOP) OrderDelete ( OrderTicket ());
                    }
                }

2. 그런 다음 계산된 수준에 따라 보증금을 설정합니다.

 if (NewBar() == True && OrdersTotal ()== 0 )
    {
     OrderSend ( Symbol (),OP_BUYSTOP ,Lot,buystop_lvl , 10 ,buystop_SL ,buystop_TP, "Expert buystop\sellstop" );
     Sleep ( 10000 );
     OrderSend ( Symbol (),OP_SELLSTOP,Lot,sellstop_lvl, 10 ,sellstop_SL,sellstop_TP, "Expert buystop\sellstop" );
     
    }

3. 여기에서 나에게 제안된 새 막대(NewBar)의 기능:

 //Функция нового бара
bool NewBar()
{
   static datetime lastbar = 0 ;
   datetime curbar = iTime ( Symbol (), 1440 , 0 );
   if (lastbar != curbar)
  {
    lastbar = curbar;
     return (true);
  }
   else return (false);
}

그 결과 캔들 개봉과 함께 주문이 들어오고 바로 삭제된다는 사실을 알게 되었습니다. 그리고 끊임없이.

포인트 (1)에서 코드를 주석 처리했을 때 일반적으로 피펫이었고 테스터에서는 가격이 예금에 접근했지만 열리지 않았습니다. 상품화되지 않았습니다.

자, 무엇이 문제일 수 있는지 말씀해 주시겠습니까?

 

이 NewBar() 함수는 연속으로 두 번 사용할 수 없습니다.

다음과 같은 것이 좋습니다.

부울 newBar = NewBar();

// 그리고 텍스트 아래로 NewBar()를 newBar로 대체합니다.

 
젠장, 아직 어떻게 해야할지 모르겠어. 주문을 삭제하고 닫는 코드는 다음 캔들에서만 작동해야 합니다. 그러나 다른 사람들도 그것을 열어야 할 것입니다. 따라서 프로그램은 다시 제거에 들어갈 것입니다. 일종의 깃발이 필요하지만, 그것을 구축하는 방법을 이해하기 위해 이미 두뇌는 땀을 흘리고 있습니다. :)
 
Noterday :
그리고 일반적으로 NewBar nafig를 버리고 마지막 주문 의 오픈 시간을 보고 Time[0]과 비교합니다. 더 많은 경우 - 귀하의 경우 모든 것을 삭제할 수 있습니다.
 
trend_lab :
그리고 일반적으로 NewBar nafig를 버리고 마지막 주문의 오픈 시간을 보고 Time[0]과 비교합니다. 더 많은 경우 - 귀하의 경우 모든 것을 삭제할 수 있습니다.

예, 그래야 할 것 같습니다. 그것도 감사합니다 :)
 
Noterday :
젠장, 아직 어떻게 해야할지 모르겠어. 주문을 삭제하고 닫는 코드는 다음 캔들에서만 작동해야 합니다. 그러나 다른 사람들도 그것을 열어야 할 것입니다. 따라서 프로그램은 다시 제거에 들어갈 것입니다. 일종의 깃발이 필요하지만, 그것을 구축하는 방법을 이해하기 위해 이미 두뇌는 땀을 흘리고 있습니다. :)

OrderSend() 함수에 대해 주의 깊게 읽으십시오. 보류 중인 주문의 경우 매개변수가 있습니다.

expiration - Срок истечения отложенного ордера.

현재일 = iTime(Symbol(), PERIOD_D1, 0)의 시작 부분에서 보류 주문을 열 때 이 시간에 하루 더 추가 - 1440 * 60. 그리고 작동하지 않은 보류 주문은 처음에 삭제됩니다. 다음 날의.

PS 현재 막대의 끝은 iBarShift() 함수를 통해 제어할 수도 있습니다.

     if ( iBarShift ( Symbol (), PERIOD_D1 , OrderOpenTime()) == 0 ) return ( 0 );

또는 이 조건에 따라 마지막 주문의 OrderTicket()을 추적하여 일부 다른 "신체 움직임".

 
TarasBY :

OrderSend() 함수에 대해 주의 깊게 읽으십시오. 보류 중인 주문의 경우 매개변수가 있습니다.

현재일 = iTime(Symbol(), PERIOD_D1, 0)의 시작 부분에서 보류 주문을 열 때 이 시간에 하루 더 추가 - 1440 * 60. 그리고 작동하지 않은 보류 주문은 처음에 삭제됩니다. 다음 날의.


DC에서 캠페인을 지원하지 않는다고 들었습니다.
 
Noterday :
DC에서 캠페인을 지원하지 않는다고 들었습니다.
이런 일이???
 
글쎄, 분명히 예, 또는 아마도 내 터미널이있는 일종의 잼 일 것입니다. 나는 이미 다음 스레드에서 ACCOUNT HISTORY 탭의 보고서도 저장되지 않는다고 말했습니다 ...
 
Noterday :
글쎄, 분명히 예, 또는 아마도 내 터미널이있는 일종의 잼 일 것입니다. 나는 이미 다음 스레드에서 ACCOUNT HISTORY 탭의 보고서도 저장되지 않는다고 말했습니다 ...
이상하게도 내 빌드는 416입니다. 사실, 터미널은 만료 후 작동하지 않는 보류 중인 주문 을 삭제하는 프로세스와 아무 관련이 없습니다. 이것이 DC 서버의 능력입니다.