포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 684

 
ModRed :
MA 지표가 있습니다. 그리고 비슷한 HMA가 있습니다. Expert Advisor에 어떻게 삽입할 수 있습니까? 코드를 완전히 복사하시겠습니까? 아니면 더 짧은 버전이 있습니까?

iCustom 배우기
 
Mitruha :

아이디어는 좋은데 거래를 다른 단말기로 옮기거나 복사하는 그런 프로그램은 여기에서 본 적이 없습니다 브로커의 서비스 없이 작동할 수 있습니까?

그런 ?
 
ModRed :
MA 표시기가 있습니다. 그리고 비슷한 HMA가 있습니다. Expert Advisor에 어떻게 삽입할 수 있습니까? 코드를 완전히 복사하시겠습니까? 아니면 더 짧은 버전이 있습니까?
완료 방법 .
 

모두에게 인사드립니다. 문제가 있습니다. 표시기를 "잃어버렸습니다." 이것은 일종의 평활 CCI로, 마침표와 일종의 승수라는 두 가지 매개변수를 변경할 수 있었습니다. 원래 버전에서 이러한 매개변수는 각각 20과 2와 같습니다. 그리고 내가 모든 것을 올바르게 기억한다면이 표시기의 이름은 두 단어로 구성되고 두 번째 단어는 영어 문자 "C"로 시작됩니다. 갑자기 누가 알겠습니까, 도와주세요!

 
alsu :

그러나 일반적으로 생성자를 오버로드하여 Init() 대신 사용할 수 있지만 결국 동일한 기능입니다. 어떤 선택을 할 것인지는 취향에 관한 모든 사람의 개인적인 문제입니다. 아시다시피 고문은 없습니다)


그리고 초기화에 실패했다면 Init()와 같은 메소드를 사용하는 경우 해당 타입의 값을 반환하는 것으로 설명하고 오류가 발생하면 해당 값을 반환할 수 있습니다. 따라서 호출 코드는 실패한 초기화를 인식하므로 개체를 사용할 수 없습니다. 생성자가 사용되는 경우 호출 코드는 실패한 초기화에 대해 어떻게 알 수 있습니까?

 

여러분, 올빼미가 신호에서 이전에 열린 위치와 동일한 막대에서 주문을 열지 않도록 하는 방법을 있지만 새 막대 를 기다렸다가 신호를 다시 확인하는 방법은 다음과 같습니다.

이것을 추가했습니다 -

 datetime    BARflag  = 0 ; 
그리고 -
 int start()
{
 datetime now = Time[ 0 ];
   if (BARflag >= now) return ( 0 );
   BARflag = now;
 
bergkamp. :

여러분, 올빼미가 신호에서 이전에 열린 위치와 동일한 막대에서 주문을 열지 않도록 하는 방법을 있지만 새 막대를 기다렸다가 신호를 다시 확인하는 방법은 다음과 같습니다.

이것을 추가했습니다 -

그리고 -

이 같은:

   //---
   if (iBarShift(OrderSymbol(), Period (),OrderOpenTime())== 0 ) {
       // выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
      }
   else {
       // выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий
      }
 
artmedia70 :

이 같은:

감사합니다. 예를 들어 규정된 줄을 해독하기가 더 어려워지지 않을까요?--//선택한 주문이 0(현재) 막대에서 열려 있습니다. 다음을 열기에는 너무 이르다는 의미입니다.

// 선택한 주문 은 0(현재) 막대에서 열리지 않으므로 다음 주문을 열 수 있습니다...???

 
bergkamp. :

감사합니다. 예를 들어 규정된 줄을 해독하기가 어렵지 않습니까?--//선택한 주문이 0(현재) 막대에서 열려 있습니다. 다음 주문을 열기에는 너무 이르다는 의미입니다.

// 선택한 주문은 0(현재) 막대에서 열리지 않으므로 다음 주문을 열 수 있습니다...???

다음은 마지막 열린 위치의 열린 막대를 반환하는 함수입니다.

 //+------------------------------------------------------------------+
   int BarOpenLastPos( string sy, int timeframe, int op, int mn) {
       datetime t= 0 ;
       int       i, j=- 1 , k= OrdersTotal ()- 1 ;
       for (i=k; i>= 0 ; i--) {
         if ( OrderSelect (i, SELECT_BY_POS)) {
             if (OrderSymbol()!=sy)         continue ;
             if (OrderType()!=op)           continue ;
             if (OrderMagicNumber()!=mn)   continue ;
             if (t<OrderOpenTime()) {
               t=OrderOpenTime();
               j=i;
               }
            }
         }
       if ( OrderSelect (j, SELECT_BY_POS)) return (iBarShift(sy,timeframe,OrderOpenTime()));
       return (- 1 );
   }
//+------------------------------------------------------------------+

함수가 -1을 반환하면 데이터가 함수에 전달되는 열린 위치가 없는 것입니다.

사용 예:

 if (BarOpenLastPos( Symbol (), Period (), OP_BUY, magic)> 0 ) {
   // бар открытия последней открытой позиции Buy на текущем символе, текущем таймфрейме, 
   // с магиком magic больше нулевого --> можно открывать следующую позицию
   }

또는

 if (BarOpenLastPos(USDCAD, PERIOD_M15 , OP_SELL, magic0)< 0 ) {
   // нет позиций Sell на USDCAD с магиком magic0 --> можно открывать позицию на USDCAD
   }
 

전문가들은 당신의 도움을 요청합니다 ...

test01 알고리즘

 //+------------------------------------------------------------------+
//test                                                                    
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGold
#property indicator_color2  clrBlue

#property indicator_level1    0

//--- indicator buffers
double Buf0[];
double Buf1[];

double t1[];
double t2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
   SetIndexBuffer(0,Buf0); SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,Buf1); SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,t1); 
   SetIndexBuffer(3,t2); 
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   
   {
   int i,counted_bars;
   counted_bars=IndicatorCounted();
   i=Bars-counted_bars-1;
   
int sr=24,n;
double sum,sum2;
double m1,m2;

  
   while(i>=0)
   {
   sum=0;
   sum2=0;
   
   for(n=i; n<=i+sr-1; n++) 
   {
   if(Open[i]>Open[i+1]) m1=sum=sum+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) m2=sum=sum+Close[i]-Close[n];
   
   if(Open[i]>Open[i+1]) t1[i]=sum2=sum2+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) t2[i]=sum2=sum2+Close[i]-Close[n];
   }
     
   Buf0[i]=(m1+m2)/sr;
   Buf1[i]=(t1[i]+t2[i])/sr;
   
   i--;
   }
return(0);
  }
//+------------------------------------------------------------------+

Buf1과 Buf0의 값이 다른 이유는 무엇입니까? 논리적으로 그들은 같아야합니까?

변수를 통해 일부 값이 있고 버퍼(데이터 배열)를 통해 다른 값이 있는 이유는 무엇입니까? (배열은 추가 계산에 필요함)? 배열과 변수 m1 및 m2를 통해 수행하는 방법

파일:
test01.mq4  2 kb