코딩 도움말 - 페이지 743

 
mladen :
SSA(Singular Spectrum Analysis)는 끝점 버전이 아닌 경우 다시 계산합니다. 해당 표시기는 "일반" SSA를 사용하므로 다시 계산합니다.
매우 감사합니다
 
mladen :

코드에서 당신의 의도가 무엇인지 전혀 알 수 없다는 것이 두렵습니다.

레벨이 있는 평균을 얻으려면 내가 템플릿으로 게시한 것을 사용하십시오.

안녕,

예, 레벨과 함께 고급 ma를 사용할 것입니다.

하지만 사용자 지정 지표 를 만드는 방법을 이해하기 위해 직접 만들려고 했습니다.

내 생각은 동일한 구성 요소를 만드는 것입니다(기본적으로 2단계의 MA ..)

나는 중앙 MA를 사용하고 점선을 사용하여 플롯한 또 다른 2 MA를 사용하여 레벨과 동일한 효과를 제공합니다...
각 레벨에 대해 계산 이벤트를 사용하여 버퍼를 채웁니다... 당신이 말했듯이 뭔가 잘못되었습니다 ;-(
레벨을 시뮬레이션하는 2개의 MA는 수직으로 이동하지만 작동하지 않습니다.

 
baraozemo :

안녕,

예, 레벨과 함께 고급 ma를 사용할 것입니다.

맞춤 지표를 만드는 방법을 이해하기 위해 직접 만들려고 했지만,

내 생각은 동일한 구성 요소를 만드는 것입니다(기본적으로 2단계의 MA ..)

나는 중앙 MA를 사용하고 점선을 사용하여 플롯한 또 다른 2 MA를 사용하여 레벨과 동일한 효과를 제공합니다...
각 레벨에 대해 계산 이벤트를 사용하여 버퍼를 채웁니다... 당신이 말했듯이 뭔가 잘못되었습니다 ;-(
레벨을 시뮬레이션하는 2개의 MA는 수직으로 이동하지만 작동하지 않습니다.

그래 그게 내 말이었다

문제는 다음과 같이 간단합니다.

  • 생성 ma (평균)
  • 레벨 1에 대해 위아래로 약간의 차이를 추가합니다(버퍼를 두 개 더 만들기).
  • 레벨 2에 대해 약간의 차이를 위아래로 추가(버퍼 2개 더 만들기)

평균 계산이나 다른 어떤 것도 변경할 필요가 없습니다. 중앙(ma) 버퍼에서 간단히 더하거나 빼기만 하면 됩니다.

 

double pipLevel1 = - 10 ;
double pipLevel2 = 10 ;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtLineBuffer, INDICATOR_DATA ); //MA Buffer
   SetIndexBuffer ( 1 ,ExtLv1Buffer, INDICATOR_DATA ); //MA lv1 Buffer
   SetIndexBuffer ( 2 ,ExtLv2Buffer, INDICATOR_DATA ); //MA lv2 Buffer
//--- set accuracy
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits + 1 );
//--- sets first bar from what index will be drawn

   PlotIndexSetInteger ( 0 , PLOT_LINE_STYLE , STYLE_SOLID ); //MA Style
   PlotIndexSetInteger ( 1 , PLOT_LINE_STYLE , STYLE_DOT );   //MA lvl1 Style
   PlotIndexSetInteger ( 2 , PLOT_LINE_STYLE , STYLE_DOT );   //MA lvl2 Style

                                                       //IndicatorSetInteger(INDICATOR_LEVELS,1,InpLevel1); //MA lvl1 Value
//IndicatorSetInteger(INDICATOR_COLOR2,1,Cyan);
//IndicatorSetInteger(INDICATOR_STYLE2,1,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_IDTH,1,1);

//IndicatorSetInteger(INDICATOR_LEVELS,2,InpLevel2); //MA lvl2 Value
//IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,Cyan);
//IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,1);  

   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,InpMAPeriod); //MA
   PlotIndexSetInteger ( 1 , PLOT_DRAW_BEGIN ,InpMAPeriod); //MA lvl1
   PlotIndexSetInteger ( 2 , PLOT_DRAW_BEGIN ,InpMAPeriod); //MA lvl2
//---- line shifts when drawing

   PlotIndexSetInteger ( 0 , PLOT_SHIFT ,InpMAShift); //MA
   PlotIndexSetInteger ( 1 , PLOT_SHIFT ,InpMAShift); //MA lvl1
   PlotIndexSetInteger ( 2 , PLOT_SHIFT ,InpMAShift); //MA lvl2

//--- name for DataWindow
   string short_name= "unknown ma" ;
   switch (InpMAMethod)
     {
       case MODE_EMA :  short_name= "EMA" ;   break ;
       case MODE_LWMA : short_name= "LWMA" ; break ;
       case MODE_SMA :  short_name= "SMA" ;   break ;
       case MODE_SMMA : short_name= "SMMA" ; break ;
     }
   IndicatorSetString ( INDICATOR_SHORTNAME ,short_name+ "(" + string (InpMAPeriod)+ ")" );
//---- sets drawing line empty value--
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0.0 );   //MA
   PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , 0.0 );   //MA lvl1
   PlotIndexSetDouble ( 2 , PLOT_EMPTY_VALUE , 0.0 );   //MA lvl2
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Moving Average                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[])
  {
   double pipMultiplier= _Point * MathPow ( 10 , MathMod ( _Digits , 2 ));
   pipLevel1 = InpLevel1 * pipMultiplier;
   pipLevel2 = InpLevel2 * pipMultiplier;
//Print("point:"+_Point+" Digits:"+_Digits+ "pipMul:"+pipMultiplier);
//pipLevel1 = InpLevel1 / 10;
//pipLevel2 = InpLevel2 / 10;  

//--- check for bars count
   if (rates_total<InpMAPeriod- 1 +begin)
       return ( 0 ); // not enough bars for calculation
//--- first calculation or number of bars was changed
   if (prev_calculated== 0 )
     {
       ArrayInitialize (ExtLineBuffer, 0 );   //MA
       ArrayInitialize (ExtLv1Buffer, 1 );   //MA level1
       ArrayInitialize (ExtLv2Buffer, 2 );   //MA level2
     }
//--- sets first bar from what index will be draw
   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,InpMAPeriod- 1 +begin); //MA
   PlotIndexSetInteger ( 1 , PLOT_DRAW_BEGIN ,InpMAPeriod- 1 +begin); //MA lvl1
   PlotIndexSetInteger ( 2 , PLOT_DRAW_BEGIN ,InpMAPeriod- 1 +begin); //MA lvl2

//--- calculation
   switch (InpMAMethod)
     {
       case MODE_EMA :  
                      CalculateEMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total- 1 ]=price[rates_total- 1 ]+pipLevel1;
                      ExtLv2Buffer[rates_total- 1 ]=price[rates_total- 1 ]+pipLevel2;
                       //Print ("rates_total:"+rates_total+" prev:"+prev_calculated+" begin:"+begin+" price:"+price[rates_total-1]);
                       break ;
       case MODE_LWMA :
                      CalculateLWMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total- 1 ]=price[rates_total- 1 ]+pipLevel1;
                      ExtLv2Buffer[rates_total- 1 ]=price[rates_total- 1 ]+pipLevel2;
                       break ;
       case MODE_SMMA :
                      CalculateSmoothedMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total- 1 ]=price[rates_total- 1 ]+pipLevel1;
                      ExtLv2Buffer[rates_total- 1 ]=price[rates_total- 1 ]+pipLevel2;
                       break ;
       case MODE_SMA :  
                      CalculateSimpleMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total- 1 ]=price[rates_total- 1 ]+pipLevel1;
                      ExtLv2Buffer[rates_total- 1 ]=price[rates_total- 1 ]+pipLevel2;
                       break ;
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
믈라덴 :

그래 그게 내 말이었다

문제는 다음과 같이 간단합니다.

  • 생성 ma (평균)
  • 레벨 1에 대해 위아래로 약간의 차이를 추가합니다(버퍼를 두 개 더 만들기).
  • 레벨 2에 대해 약간의 차이를 위아래로 추가(버퍼 2개 더 만들기)

평균 계산이나 다른 어떤 것도 변경할 필요가 없습니다. 중앙(ma) 버퍼에서 간단히 더하거나 빼기만 하면 됩니다.

더하기/빼기(수직으로) ma에 대한 샘플 코드를 보여줄 수 있습니까? 시도했지만 코드가 실패합니다..

 
baraozemo :

더하기/빼기(수직으로) ma에 대한 샘플 코드를 보여줄 수 있습니까? 시도했지만 코드가 실패합니다..

내가 게시 한 버전에 있습니다. 코드를 다시 확인 하십시오
 
mladen :
해당 표시기는 중심 TMA를 사용하여 다시 계산합니다. 경고는 무의미할 것입니다

좋아 화살표는 색이 변할 때

 
dotmund :

좋아 화살표는 색이 변할 때

신호(화살표)는 재계산/다시 그리기 특성으로 인해 무의미합니다.
 
mladen :
신호(화살표)는 재계산/다시 그리기 특성으로 인해 무의미합니다.

@mladen 님,

Ecn을 지원하지 않는 전문가도 Ecn형 브로커로 문제 없이 사용할 수 있나요?

일부 전문가에는 Ecn 유형 브로커에 대한 옵션이 있습니다.

이로 인해 Ecn 유형 브로커에 대해 일부 코드를 최적화하거나 추가하는 것이 더 나을 수 있다고 생각했습니다.

 
oguz :

친애하는 @mladen,

Ecn을 지원하지 않는 전문가도 Ecn형 브로커로 문제 없이 사용할 수 있나요?

일부 전문가에는 Ecn 유형 브로커에 대한 옵션이 있습니다.

이로 인해 Ecn 유형 브로커에 대해 일부 코드를 최적화하거나 추가하는 것이 더 나을 수 있다고 생각했습니다.

예, 손절매를 사용하지 않고 주문을 열 때 이익을 취하는 경우

다른 쪽에서 ecn/stp용으로 만든 경우 모든 브로커에서 전혀 문제 없이 작동합니다. 유일한 차이점은 주문을 여는 순간입니다. 다른 변경(또는 최적화)이 전혀 필요하지 않습니다.

 
oguz :

자세한 답변 감사합니다.

내가 아는 한 첨부된 ea에는 Ecn 유형 브로커 지원이 없습니다.

이 ea를 Ecn형 브로커에서 SL과 TP를 이용하여 사용하고 싶습니다.

Ecn 유형의 브로커 지원을 제공하면 매우 기쁠 것입니다.

모든 사람이 이해할 수 있도록 다시 작성해야 합니다.

하지만 제가 사용하는 언어를 구사하지 못하기 때문에 도움을 드릴 수 없습니다. 죄송합니다