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

 

여보세요...

나는 고문을 썼지 만 다음과 같은 문제가 발생했습니다.

나는 반대 주문을 가지고 있으며, 예를 들어 BUY의 경우 150포인트의 스탑과 150의 이익이 있습니다. 사실, 나를 위해 모든 것이 동시에 닫혀야 합니다. 매수 후 매도와 매도 매도 ..... 하지만 여기에는 기능이 다릅니다. 스프레드!)))) 그리고 나머지 8개의 주문은 이미 이들로부터 열렸습니다. 두 개의 반대 순서(물론 8개가 모두 필요한 경우가 아니면 조건이 다르며 4/4도 반대임)


같은 가격에 동시에 도달하면 모든 것이 닫히도록 코드를 올바르게 프로그래밍하는 방법은 무엇입니까? 테스터에서 테스트할 때 가격이 원하는 수준에 도달하는 경우가 있습니다. 예를 들어 매도가 종료되고(설정 수준에 도달하지 못하면 스프레드라고 생각합니다) 매수가 중단되고 잠시 후 하락하고 매수가 이미 스톱으로 마감되어 정확한 결과를 볼 수 없습니다.


아이디어를 프로그래밍 방식으로 표현해 주시면 감사하겠습니다. 코드.


더 자세히 이해하기 위해 두 개의 반대 (첫 번째) 주문이 열리는 부분을 제공합니다.

 if (by == FALSE) 
   {   g_ticket_112 = OrderSend ( Symbol (), OP_BUY, Lots, NormalizeDouble (Ask, Digits ), 1 , NormalizeDouble (Ask - SL * Point , Digits ), 
       NormalizeDouble (Ask + TP * Point , Digits ), "" , 111 , 0 , Blue );
   if (g_ticket_112 > 0 ) by = TRUE;
   } 
     
     if (se == false) 
   { for (g_pos_116 = OrdersTotal () - 1 ; g_pos_116 >= 0 ; g_pos_116--) 
   { if ( OrderSelect (g_pos_116, SELECT_BY_POS, MODE_TRADES)) 
   { if (OrderSymbol() != Symbol () || OrderMagicNumber() != 111 ) continue ;
     if (se == false) 
   {g_ticket_113 = OrderSend ( Symbol (), OP_SELL, Lots, NormalizeDouble (Bid, Digits ), 1 , 
    OrderTakeProfit(),OrderStopLoss() , "" , 222 , 0 , Blue );
     if (g_ticket_113 > 0 ) se = TRUE;}}}} 
 
주말 전체로 일정을 늘리는 스크립트가있는 남자, 즉 일정이 월요일 시작과 겹치지 않고 빈 날이 토요일과 일요일에 남아 있습니다.
 

안녕하세요.

문제는 새 막대 를 여는 사실을 결정하는 기능을 가질 수 있는 사람(시간 프레임에 관계없이), 더 정확하게는 새 막대를 찾기 위한 다양한 옵션(원칙)이 있다는 것입니다.

 
dmitriy086 :

안녕하세요.

문제는 새 막대를 여는 사실을 결정하는 기능을 가질 수 있는 사람(시간 프레임에 관계없이), 더 정확하게는 새 막대를 찾기 위한 다양한 옵션(원칙)이 있다는 것입니다.


시간을 기억 oldtime = Time[0] 그리고 기억된 시간을 비교 if( oldtime !=Time[0])Print("만세 new bar!!!");

추신: 예고편은 iTime () 함수에 있습니다.

:)

 
//+------------------------------------------------------------------+
bool fNewBar()
  {
   static datetime NewTime=0;
   if(NewTime!=iTime (Symbol(),0,0))
    {
     if(NewTime==0)
      {
       NewTime=iTime (Symbol(),0,1);return(false);
      }      
     NewTime=iTime (Symbol(),0,0);
     return(true);
    }
   return(false);     
  }
//+----------------------------------------------------------------------------+

IgorM , 문제는 이 함수가 합성 차트에 있다는 것입니다. 여기서 iTime[0]은 iTime[1]과 같을 수 있으므로 시간 없이 어떻게 하여 EA가 새 막대 에서 하나의 거래만 열 수 있습니까?
 
dmitriy086 :
IgorM , 문제는 이 함수가 iTime[0]이 iTime[1]과 같을 수 있는 합성 차트에 있다는 것입니다. 따라서 시간 없이 어떻게 하여 EA가 새 막대에서 하나의 거래만 열 수 있습니까?


이해할 수 없는 이유로 막대 0과 1의 시간을 일치시킬 수 없는 경우 - datetime 유형이 데이터를 초 단위 로 저장하고 막대 시간을 1초 이상 변경하십시오.

그런 다음 첫 번째 닫힌 막대의 모든 특성, 즉 OHLC, 부피 및 개봉 시간, 하나 이상의 매개변수가 변경되면 새 막대를 의미합니다.

추신: iBars() 함수는 현재 TF의 막대 수를 제공 하며 터미널 설정 에 의해 제한됩니다. 막대 수를 저장된 막대 수와 비교할 수 있으며 당시 새 막대 이 값이 다르지만 항상 그런 것은 아닙니다. 예, 하지만 아마도 MT4 빌드 번호에서 이 옵션이 작동하지 않을 수 있습니다.

 
혹시 기성품 코드가 없으신가요? OHLC[1]을(를) 기억하고 OHLC[0]과(와) 비교하는 방법을 스스로 알 수 없습니다.
 
dmitriy086 :
혹시 기성품 코드가 없으신가요? OHLC[1]을(를) 기억하고 OHLC[0]과(와) 비교하는 방법을 스스로 알 수 없습니다.


OHLC는 Open, High, Low, Close의 일반적인 약어입니다.

0과 비교하지 말고 이전에 기억한 첫 번째 것과 비교하십시오.

초기화(){

oldHigh = 높음[1];

///

}

시작(){

이중 tmp = 높음[1];

if(tmp !=oldHigh) { oldHigh = tmp;

//다른 막대 매개변수 확인

}

}

 

팁 감사합니다 한번 해봐야겠네요...

 

이 악기에 오픈 포지션이 있는지 없는지 포지션을 오픈하기 위한 조건에서 체크를 올바르게 설정하는 방법을 알려주세요. 그리고 해당 상품에 대한 포지션(매도 또는 매수)이 있으면 개설이 발생하지 않고, 그렇지 않으면 개설 신호가 처리됩니까?

다음은 코드입니다(포즈를 여는 역할을 한다고 생각합니다).

 if (NumberOfPositions( "" ,- 1 ,Magic)>= 2 )  флаг 1 = 1 ; //если число позиций >= 2
if (NumberOfPositions( "" ,- 1 ,Magic)< 1 )  флаг 1 = 0 ; //если нет откр. позиций
if ( TradeDOWN==true && флаг 1 == 0 ) { //если условия соответствуют заданным  
//продаем 1-й символ и покупаем второй символ
//----------------------------------------
if (NumberOfPositions(Symbol_1,OP_SELL,Magic)< 1 ){ //если нет поз.селл и поз.бай по 1-му символу
 if (NumberOfPositions(Symbol_1,OP_BUY,Magic)< 1 )
 {
 SL= 0 ;TP= 0 ; //открываем позицию, задаем стопы :
if (StopLoss_1> 0 )   SL=Bid_Tiker1+POINT_Tiker1*StopLoss_1;
if (TakeProfit_1> 0 ) TP=Bid_Tiker1-POINT_Tiker1*TakeProfit_1; 
 ti=OpenPosition(Symbol_1, OP_SELL, Lots_1, 0 , 0 ,Magic);
if (StopLoss_1> 0 || TakeProfit_1> 0 ) { //ставим стопы 
if ( OrderSelect (ti, SELECT_BY_TICKET)) ModifyOrder(- 1 , SL, TP, clModifySell);}
                                   }} //если нет поз.селл и поз.бай по 1-му символу
//--------------------------------------
if (NumberOfPositions(Symbol_2,OP_BUY,Magic)< 1 ){ //если нет поз. бай и поз. селл по 2-му символу 
 if (NumberOfPositions(Symbol_2,OP_SELL,Magic)< 1 )
 {
   SL= 0 ;TP= 0 ; //открываем позицию, задаем стопы :
if (StopLoss_2> 0 )   SL=Bid_Tiker2-POINT_Tiker2*StopLoss_2;
if (TakeProfit_2> 0 ) TP=Ask_Tiker2+POINT_Tiker2*TakeProfit_2;   
ti=OpenPosition(Symbol_2, OP_BUY, Lots_2, 0 , 0 ,Magic);
if (StopLoss_2> 0 || TakeProfit_2> 0 ) { //ставим стопы 
if ( OrderSelect (ti, SELECT_BY_TICKET))ModifyOrder(- 1 , SL, TP, clModifyBuy); }
                                   }} //если нет поз. бай и поз. селл по 2-му символу

논리적으로 맞는 것 같지만 어쨌든 작동하지 않습니다. 하나의 악기에 대해 여러 포즈를 엽니다.

추신: 저는 프로그래머가 아닙니다. 가능하면 찻주전자에게 자세히 설명하십시오.