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

 
Fox_RM :
안녕하세요!
특정(사용자 지정) 주문을 여는 문제가 발생했습니다.
이 문제를 해결해야 할 작은 코드를 작성하고 해결하는 것처럼 보이지만 순간이 있습니다.
임의의 수의 주문이 열릴 때 일반적으로 테스트가 끝날 때입니다.

아래는 코드 자체입니다.

문제에 대한 더 간단한 해결책이 있다면 기꺼이 댓글을 달겠습니다.


아마 그게 더 나을거야

 extern string Kolichestvo_orderov = "Количество единовременно открытых ордеров" ;
extern int OrederBuy = 1 ;
extern int OrederSell = 1 ;


int OrdS,OrdB,ticketBuy,ticketSell,lastticketSell= 0 ,lastticketBuy= 0 ;
//========================================================================================================//
                                 //Подсчет количества ордеров BUY & SELL//
//========================================================================================================//
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
       {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
         {
         if ( OrderType ()==OP_BUY)
            {
            OrdB++
            }
         if ( OrderType ()==OP_SELL)
            {
            OrdS++
            }
          }
       }   
//========================================================================================================//     
                                   //---- Открытие ордеров SELL ----//
//========================================================================================================//

   if (OrdS<=OrederSell)
    { //----- start 
     if (trendDn==true && SthFast> 88.2 && SthSlow< 38.2 )
       {
      ticketSell= OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 , 0 , 0 , 0 ,magick, 0 , Blue ); //--- Если ордер открыт параметр OrdS увеличиваю 
       }
     } //-----end
          
//========================================================================================================//  
                                   //----Открытие ордеров BUY ----//
//========================================================================================================//  

   if (OrdB<=OrederBuy)
     { //-----start
     if (trendUp==true && SthFast< 11.8 && SthSlow> 61.8 )
        {
        ticketBuy= OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 3 , 0 , 0 , 0 ,magick, 0 , Red ); //--- Если ордер открыт параметр OrdB увеличиваю
        }
      } //------end
//========================================================================================================//  
 
Lians :
감사합니다. 하지만 저에게는 너무 복잡하고 귀하의 기능은 한 번에 4개의 메시지를 표시하지만 하나가 필요합니다. 한 줄에 64자를 넘지 않는 것으로 나타났습니까?

아니요. 긴 메시지를 화면에서 읽기 편리한 만큼 분할하되 4개 이하로 나누십시오. 가장 중요한 것은 각 부분이 64자를 초과하지 않는다는 것입니다. 메시지가 짧으면 한 부분에서 함수에 전달할 수 있습니다.

이 기능을 테스트하기 위해 트레일러에 고문을 묶었습니다. 테스터에서 비주얼 모드로 실행하고 시각화 차트에 Win_Inform 표시기를 넣으십시오(예고편의 마지막 게시물에 있음). 이 기능이 어떻게 작동하는지 즉시 알 수 있습니다.

파일:
 
r772ra :


아마 그게 더 나을거야

대략 이 코드로 내 업그레이드를 시작했습니다. 귀하의 버전에는 3가지 문제가 있습니다:

- OP_BUY 및 OP_SELL 유형의 주문이 열리면 OrdB OrdS 매개 변수가 각 틱마다 자동으로 증가 하므로 해당 티켓(판매 또는 구매) 변경 시에만 재계산 조건을 추가했습니다.

- 모든 주문을 다시 계산하면 OrdB 및 Ord에서 오류가 발생하므로 주문의 최신 변경 사항만 계산하면 됩니다.

- 귀하의 버전에서는 (OrdB<=OrederBuy) , if (OrdS<=OrederSell)인 경우 추가 주문에 대한 OrdB 및 Ord 매개변수 가 감소하지 않습니다 .

그런 것 같습니다.

 
Fox_RM :

대략 이 코드로 내 업그레이드를 시작했습니다. 귀하의 버전에는 3가지 문제가 있습니다:

- OP_BUY 및 OP_SELL 유형의 주문이 열리면 OrdB OrdS 매개 변수가 각 틱마다 자동으로 증가 하므로 해당 티켓(판매 또는 구매) 변경 시에만 재계산 조건을 추가했습니다.

- 모든 주문을 다시 계산하면 OrdB 및 Ord에서 오류가 발생하므로 주문의 최신 변경 사항만 계산하면 됩니다.

- 귀하의 버전에서는 (OrdB<=OrederBuy) , if (OrdS<=OrederSell)인 경우 추가 주문에 대한 OrdB 및 Ord 매개변수 가 감소하지 않습니다 .

그런 것 같습니다.

예, 맞습니다. for 루프 전에 주문 카운터를 재설정해야 합니다.

 //========================================================================================================//
                                 //Подсчет количества ордеров BUY & SELL//
//========================================================================================================//
     OrdS= 0 ;
     OrdB= 0 ;
    
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
       {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
         {
         if ( OrderType ()==OP_BUY)
            {
            OrdB++
            }
         if ( OrderType ()==OP_SELL)
            {
            OrdS++
            }
          }
       }   
 

안녕하세요! Kim의 기능을 이해하도록 도와주세요.

 
double FindNearFractal ( string sy = " 0 " , int tf = 0 , int mode = MODE_LOWER ) {
 if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
  double f = 0 ;
  int d = MarketInfo ( sy , MODE_DIGITS ) , s ;
  if ( d == 0 ) if ( StringFind ( sy , " JPY " ) < 0 ) d = 4 ; else d = 2 ;
 
  for ( s = 2 ; s < 100 ; s ++ ) {
    f = iFractals ( sy , tf , mode , s ) ;
    if ( f != 0 ) return ( NormalizeDouble ( f , d )) ;
  }
  Print ( " FindNearFractal(): Фрактал не найден " ) ;
  return ( 0 ) ;
}

라인이 이해가 안감

 if ( d == 0 ) if ( StringFind ( sy , " JPY " ) < 0 ) d = 4 ; else d = 2 ;

첫 번째 if 뒤에 기호가 없는 이유는 표현식이 다음과 같이 작성되면 어떻게 될까요? StringFind 작업은 무엇이며 문자열 검색이 JPY를 기반으로 하는 이유는 무엇입니까? 어떻게 d = 0이 될 수 있고, 어떤 경우에 2가 할당되고 어떤 경우에 4가 할당됩니까? 나는 대답에 매우 감사 할 것입니다. 미리 감사드립니다)))

 
r772ra :

예, 맞습니다. for 루프 전에 주문 카운터를 재설정해야 합니다.

)) 웬일인지, 나는 그것에 대해 스스로 생각하지 않고 감기 시작했습니다.
 
Fox_RM :
)) 웬일인지, 나는 그것에 대해 스스로 생각하지 않고 감기 시작했습니다.

행운을 빕니다
 
Lisi4ka330 : 첫 번째 if 뒤에 기호가 없는 이유, 표현식이 다음과 같이 작성되면 어떻게 될까요? ... 어떻게 d = 0일 수 있으며, 어떤 경우에 2가 할당되고 어떤 경우에 4가 할당됩니까? 나는 대답에 매우 감사 할 것입니다. 미리 감사드립니다)))

그래서 더 명확해질 것 같아요

 if ( d == 0 )
{ 
  if ( StringFind ( sy , " JPY " ) < 0 )
  {
    d = 4 ;
  } 
  else
  {
    d = 2 ;
  }
}

d - 인용 정확도(소수점 뒤의 자릿수)

JPY 쌍의 경우 전공 과정은 대략 다음 형식 xxx.xx입니다.

쌍에 JPY가 없는 경우 주요 환율은 약 x.xxxx입니다(따라서 "4 자리 "라는 이름).

 
r772ra :

예, 맞습니다. for 루프 전에 주문 카운터를 재설정해야 합니다.


나는 또 다른 점을 놓쳤다.

- 귀하의 버전에서 (OrdB<=OrederBuy), (OrdS<=OrederSell) 경우 추가 개시 주문 에 대한 OrdB 및 OrdS 매개변수가 감소하지 않습니다 .

예를 들어 새 버전에서는 5개의 주문을 열고 계산한 다음 if 조건에서 새 주문을 열 수 없습니다. 나는 OrdB-- 및 OrdS- 의 이전 버전을 가지고 있습니다.

사용 된.

 
GaryKa :

그래서 더 명확해질 것 같아요

d - 인용 정확도(소수점 뒤의 자릿수)

JPY 쌍의 경우 전공 과정은 대략 다음 형식 xxx.xx입니다.

쌍에 JPY가 없는 경우 주요 환율은 약 x.xxxx입니다(따라서 "4자리"라는 이름).

GaryKa , 답변 감사합니다. d가 0과 같을 수 있는 방법은 약간 불분명합니다.
 d = MarketInfo ( sy , MODE_DIGITS )
소수점 이하 자릿수를 반환합니다. 즉, d는 항상 0보다 크고 조건은 항상 거짓입니다.