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

 
costy_ :

예를 들어 개장 시간의 파일에 쓰는 것과 같은 많은 옵션이 있지만 열린 주문을 스크롤하고 수명을 비교하는 것이 더 쉽습니다.

그리고 일반적으로 각 개별 직책에 대해 "특정 기간 후에 모든 열린 직위를 청산해야 합니다"라고 바꾸어 말하십시오(질문을 이해한 대로).

고맙습니다! 귀하의 답변에서 "쉬운"이라는 단어가 핵심이므로 그러한 내장 기능이 없습니다. 그리고 저는 각각의 포지션 을 오픈한 지 2시간 후에 닫고 싶었 습니다.
 
costy_ :

스크립트는 테스터의 시간을 쉽게 찾지 못하지만(지표는 찾을 수 있음) 시작 부분에 테스트 어드바이저를 첨부할 수 있습니다.

빠르고 안정적으로...

고맙습니다. 나는 이것을 스크립트에서 했다:
     datetime time_start= GlobalVariableGet ( "Time_test" );
//    Alert(iBarShift(NULL,0,time_start)); 
    EndBar =   iBarShift ( NULL , 0 ,time_start);
모든 것이 작동합니다.
 

이니시에이터를 작성하려고 합니다. 왜 다시 그리는지 이해가 안됩니다. 또한 렌더링에만 그립니다. 도와주세요, 제발. 저는 프로그래밍의 초보자입니다.

#속성 표시기_차트_창
#속성 표시기_버퍼 2
#property indicator_color1 마젠타색
#property indicator_color2 빨간색
//---- 입력 매개변수
외부 intN;
datetime some_time=D'1971.01.11 00:00';
datetime some_time_1=D'1971.01.11 00:00';
//---- 버퍼
이중 RLB_Buffer[];
이중 RLB_Buffer_1[];
이중 Real_Line_Balance=0,x=0,last_high,last_low,RLB,Real_Line_Balance_1=0,x1=0,last_high_1,last_low_1,RLB_1;
bool dirlong, 먼저;
int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1;
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
문자열 short_name;
//---- 표시줄
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 159);
SetIndexBuffer(0,RLB_Buffer);
//----;
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 159);
SetIndexBuffer(1,RLB_Buffer_1);
리턴(0);
}
//+----------------------------------------------- --------------------+
//| |
//+----------------------------------------------- --------------------+
정수 시작()
{
int counted_bars=IndicatorCounted();
주석(i," ",ii);
//----
if(막대 < 3)
리턴(0);
//------------
first_t_bar=iBarShift(NULL,0,some_time,false); // 상승 추세의 시작 막대
now_bar=iBarShift(NULL,0,TimeCurrent(),false); //마지막 막대, 맨 오른쪽
i=counted_bars-first_t_bar+1;
//-----------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //하향 추세 시작 막대
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //마지막 막대, 맨 오른쪽
ii=counted_bars-first_t_bar_1+1;
// if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; // 시각화인 경우 추세 시작 막대
if(counted_bars == 0)
{
첫 번째 = 거짓;
i=first_t_bar+1;
ii=first_t_bar_1+1;
}
//------------ // 빼기 계산된 막대
dirlong=거짓;
if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true;
if(dirlong == true) // 추세가 상승한 경우
{
동안(i>=0)
{
x++; // 추세 시작부터 막대 카운터
Real_Line_Balance=닫기[i+5]; // 추세에서 절의 합계 계산
RLB=Real_Line_Balance;
if(RLB<낮음[1]) RLB_Buffer[i]=Real_Line_Balance; //가격이 맨 위에 있는 경우에만 라인을 표시합니다.
//-------
if(RLB>Close[i]&& x>50) //가격이 위에서 아래로 RLB를 넘으면
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//그러면 다음 사이의 TOP을 정의합니다.
//마지막 막대 및 추세 시작
some_time_1=시간[bar_high]; //하락 추세의 새로운 시작
x=0; //트렌드의 시작 부분에서 바 카운터 재설정
Real_Line_Balance=0;
}
나--;
}// 동안
//-------
}//디르롱
//------------------------
//------------------------
if(dirlong == false) // 추세가 다운된 경우
{
동안(ii>=0)
{
x1++; // 추세 시작부터 막대 카운터
Real_Line_Balance_1=닫기[ii+10]; // 추세에서 절의 합계 계산
RLB_1=실제_라인_균형_1;
if(RLB_1>높음[1]) RLB_Buffer_1[ii]=Real_Line_Balance_1;
//-------
if(RLB_1<Close[ii]&& x1>50) //가격이 위에서 아래로 RLB를 넘은 경우
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//그런 다음 우리는 사이의 LOWEST를 결정합니다.
//마지막 막대 및 추세 시작
some_time=시간[bar_low]; // 상승세의 새로운 시작
x1=0; //트렌드의 시작 부분에서 바 카운터 재설정
Real_Line_Balance_1=0;
}
ii--;
}//동안
//-------
}//디르롱
//------------------------
리턴(0);
}
//+----------------------------------------------- ------ --------------------+

 

말도 안되는 소리야. 대신에

i=counted_bars-first_t_bar+1;

셀 수 있는 막대를 셀 수 있는 디자인을 넣습니다. 모든 것이 정상적으로 진행되기 시작했습니다. IndicatorCounted(); 글리치 또는 내가 뭔가를 따라 잡고 있지 않습니다 ...

 

마감된 주문의 상태를 변수에 알리는 방법은 무엇입니까?


화신
2
2011년 10월 29일 21:26
안녕하세요!

고문이 손절매 또는 이익실현으로 주문을 마감했다고 가정해 보겠습니다. 주문이 손절 또는 이익실현으로 정확히 마감되었음을 변수에 알리는 방법은 무엇입니까?
미리 감사드립니다!
 
001 :

말도 안되는 소리야. 대신에

i=counted_bars-first_t_bar+1;

셀 수 있는 막대를 셀 수 있는 디자인을 넣습니다. 모든 것이 정상적으로 진행되기 시작했습니다. IndicatorCounted(); 버그인지 아니면 제가 놓치고 있는 부분인지...

while(i>=0)을 사용합니다. 즉, 새 촛대가 나타날 때 i=1입니다(물론 이전 촛대의 데이터는 고정 데이터에 따라 한 번 계산됨).

some_time=D'1971.01.11 00:00'을 입력합니까? Bars를 사용 하면 IndicatorCounted가 버그가 아닙니다(오류는 아마도 이 first_t_bar 때문일 것입니다) .

귀하의 알고리즘과 귀하가 처리합니다.

" 저는 프로그래밍에 익숙하지 않습니다. " 2007년부터)).

 
sergeev :

마감된 주문의 상태를 변수에 알리는 방법은 무엇입니까?


:)

+ ...

비탈류카의 경우:

https://docs.mql4.com/ru/trading/OrderStopLoss

https://docs.mql4.com/en/trading/OrderTakeProfit

 
좋은 오후입니다. 현재 연도의 6월 10일부터 9월 22일까지 견적이 로드되지 않는 이유를 알려주십시오. 2~3개 통화에 대한 히스토리 다운로드 를 수행했는데 모두 데이터 차이가 동일합니다.
 
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Закрвает открытые позиции через 2 суток
void DelOldPositions()                                    
{   
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
    {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
         if (OrderOpenTime()+2*24*60*60  > TimeCurrent())  
          {
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4 ),3,Red);
          }
        }
   }
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
Помогите поправить 2 последние строки, т.к. в тестере почему-то  мгновенно  закрывает все открытые позы. С уважением.
 

문제는 다음과 같습니다. 고문은 지속적으로 주문을 다시 엽니다. 구매 신호가 있습니다. 그는 주문을 연 다음 이익으로 닫고 조건은 여전히 보존되며 다시 엽니 다. 다른 신호 후에만 열리는 것이 필요합니다.

일반적인 구매 및 정산 카운터의 도움으로 제거 할 수 있다고 생각했습니다 - 구매 주문이 카운터 +1을 열었고 카운터가 0보다 큰 동안 새 구매를 열 수 없으면 카운터는 재설정 만 해결된 후. 하지만 왜 작동하지 않는지 이유를 알 수 없습니까??? 논리 좀 봐, 내가 어딘가에 잘못된거야?? mql 미터는 정확히 비슷한 문제에 직면했습니다.

 extern double TakeProfit = 150 ;
extern double Sl = 150 ;
extern double Lots = 0.1 ;
extern int n = 9 ;     
        
//-----------------------------------------------------------

int start()
 {
   int cnt, ticket, total, i, Buy= 0 , Sell= 0 ;
   double x1= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_TENKANSEN, 0 );   //красная
   double x2= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_KIJUNSEN, 0 );     //синяя
   double x3= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_SENKOUSPANA, 0 ); //фиол пунктир
   double x4= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_SENKOUSPANB, 0 );   //кр пунктир
   double x5= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_CHINKOUSPAN, 0 );   //зеленая
   double x6=Ask;
   double x61=Bid;
   double Lot= 0 ;  
  total= OrdersTotal ();
  
   for (i=total- 1 ;i>= 0 ;i--)   //счетчик выставленных ордеров
   { 
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) 
       {
         if ( OrderType ()==OP_BUY)
          { 
           Buy++;
            }  
           if ( OrderType ()==OP_SELL)
           { 
            Sell++;
             }  
        }
     }
   if (total< 1 ) //проверка количества ордеров 
   {
    
         if ( AccountFreeMargin ()<( 100 *Lots))
              {
     Print ( "Недостаточно средств = " , AccountFreeMargin ());
     return ( 0 );  
               }

         if (x6>x3 && x6>x4 && x1>x2 && x6>x2 && x6<(x2+ 60 ) && Buy== 0 ) //бай
               {
                   ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid-Sl* Point ,Ask+TakeProfit* Point , 0 , 0 , 0 , Green ); Sell= 0 ; // ордер и обнуление счетчика
                       if (ticket> 0 )
                      {
                         if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "открыта позиция BUY : " , OrderOpenPrice ());
      
                         else Print ( "Ошибка при открытии BUY позиции : " , GetLastError ()); 
                        }
              }
   
         if (x6<x3 && x6<x4 && x1<x2 && x6<x2 && x6>(x2- 60 ) && Sell== 0 ) //селл 
                {
                   ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+Sl* Point ,Bid-TakeProfit* Point , 0 , 0 , 0 , Red ); Buy= 0 ; //сам по себе ордер и обнуление счетчика 
                     if (ticket> 0 )
                     {
                         if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "открыта позиция SELL : " , OrderOpenPrice ());
    
                         else Print ( "Ошибка при открытии SELL позиции : " , GetLastError ());
      
                      } 
    
                  }
  
  
  } 

   if (( OrderType ()== 0 && x61<x3 && x61<x4 && x1>x2 && x1>x3 && x1>x4) || ( OrderType ()== 1 && x61>x3 && x61>x4 && x1<x2 && x1<x3 && x1<x4)) //закрытиеи на развороте
      {
           bool    result;
           double price;
           int     cmd,error;
//----
           if ( OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES))
              {
                  cmd= OrderType ();
                   if (cmd==OP_BUY || cmd==OP_SELL)
                    {
                       while (true)
                        {
                         if (cmd==OP_BUY) price=Bid;
                         else             price=Ask;
                         result= OrderClose ( OrderTicket (), OrderLots (),price, 3 , CLR_NONE );
                         if (result!=TRUE) { error= GetLastError (); Print ( "LastError = " ,error); }
                         else error= 0 ;
                         if (error== 135 ) RefreshRates ();
                         else break ;
                        }
                     }
               }
           else Print ( "Error when order select " , GetLastError ());
//----
          
      }
 
 }
 
 
파일: