나는 중앙 MA를 사용하고 점선을 사용하여 플롯한 또 다른 2 MA를 사용하여 레벨과 동일한 효과를 제공합니다... 각 레벨에 대해 계산 이벤트를 사용하여 버퍼를 채웁니다... 당신이 말했듯이 뭔가 잘못되었습니다 ;-( 레벨을 시뮬레이션하는 2개의 MA는 수직으로 이동하지만 작동하지 않습니다.
나는 중앙 MA를 사용하고 점선을 사용하여 플롯한 또 다른 2 MA를 사용하여 레벨과 동일한 효과를 제공합니다... 각 레벨에 대해 계산 이벤트를 사용하여 버퍼를 채웁니다... 당신이 말했듯이 뭔가 잘못되었습니다 ;-( 레벨을 시뮬레이션하는 2개의 MA는 수직으로 이동하지만 작동하지 않습니다.
그래 그게 내 말이었다
문제는 다음과 같이 간단합니다.
생성 ma (평균)
레벨 1에 대해 위아래로 약간의 차이를 추가합니다(버퍼를 두 개 더 만들기).
레벨 2에 대해 약간의 차이를 위아래로 추가(버퍼 2개 더 만들기)
평균 계산이나 다른 어떤 것도 변경할 필요가 없습니다. 중앙(ma) 버퍼에서 간단히 더하거나 빼기만 하면 됩니다.
SSA(Singular Spectrum Analysis)는 끝점 버전이 아닌 경우 다시 계산합니다. 해당 표시기는 "일반" SSA를 사용하므로 다시 계산합니다.
코드에서 당신의 의도가 무엇인지 전혀 알 수 없다는 것이 두렵습니다.
레벨이 있는 평균을 얻으려면 내가 템플릿으로 게시한 것을 사용하십시오.
안녕,
예, 레벨과 함께 고급 ma를 사용할 것입니다.
하지만 사용자 지정 지표 를 만드는 방법을 이해하기 위해 직접 만들려고 했습니다.
내 생각은 동일한 구성 요소를 만드는 것입니다(기본적으로 2단계의 MA ..)
나는 중앙 MA를 사용하고 점선을 사용하여 플롯한 또 다른 2 MA를 사용하여 레벨과 동일한 효과를 제공합니다...
각 레벨에 대해 계산 이벤트를 사용하여 버퍼를 채웁니다... 당신이 말했듯이 뭔가 잘못되었습니다 ;-(
레벨을 시뮬레이션하는 2개의 MA는 수직으로 이동하지만 작동하지 않습니다.
안녕,
예, 레벨과 함께 고급 ma를 사용할 것입니다.
맞춤 지표를 만드는 방법을 이해하기 위해 직접 만들려고 했지만,
내 생각은 동일한 구성 요소를 만드는 것입니다(기본적으로 2단계의 MA ..)
나는 중앙 MA를 사용하고 점선을 사용하여 플롯한 또 다른 2 MA를 사용하여 레벨과 동일한 효과를 제공합니다...
각 레벨에 대해 계산 이벤트를 사용하여 버퍼를 채웁니다... 당신이 말했듯이 뭔가 잘못되었습니다 ;-(
레벨을 시뮬레이션하는 2개의 MA는 수직으로 이동하지만 작동하지 않습니다.
그래 그게 내 말이었다
문제는 다음과 같이 간단합니다.
평균 계산이나 다른 어떤 것도 변경할 필요가 없습니다. 중앙(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) 버퍼에서 간단히 더하거나 빼기만 하면 됩니다.
더하기/빼기(수직으로) ma에 대한 샘플 코드를 보여줄 수 있습니까? 시도했지만 코드가 실패합니다..
더하기/빼기(수직으로) ma에 대한 샘플 코드를 보여줄 수 있습니까? 시도했지만 코드가 실패합니다..
해당 표시기는 중심 TMA를 사용하여 다시 계산합니다. 경고는 무의미할 것입니다
좋아 화살표는 색이 변할 때
좋아 화살표는 색이 변할 때
신호(화살표)는 재계산/다시 그리기 특성으로 인해 무의미합니다.
@mladen 님,
Ecn을 지원하지 않는 전문가도 Ecn형 브로커로 문제 없이 사용할 수 있나요?
일부 전문가에는 Ecn 유형 브로커에 대한 옵션이 있습니다.
이로 인해 Ecn 유형 브로커에 대해 일부 코드를 최적화하거나 추가하는 것이 더 나을 수 있다고 생각했습니다.
친애하는 @mladen,
Ecn을 지원하지 않는 전문가도 Ecn형 브로커로 문제 없이 사용할 수 있나요?
일부 전문가에는 Ecn 유형 브로커에 대한 옵션이 있습니다.
이로 인해 Ecn 유형 브로커에 대해 일부 코드를 최적화하거나 추가하는 것이 더 나을 수 있다고 생각했습니다.
예, 손절매를 사용하지 않고 주문을 열 때 이익을 취하는 경우
다른 쪽에서 ecn/stp용으로 만든 경우 모든 브로커에서 전혀 문제 없이 작동합니다. 유일한 차이점은 주문을 여는 순간입니다. 다른 변경(또는 최적화)이 전혀 필요하지 않습니다.
자세한 답변 감사합니다.
내가 아는 한 첨부된 ea에는 Ecn 유형 브로커 지원이 없습니다.
이 ea를 Ecn형 브로커에서 SL과 TP를 이용하여 사용하고 싶습니다.
Ecn 유형의 브로커 지원을 제공하면 매우 기쁠 것입니다.
모든 사람이 이해할 수 있도록 다시 작성해야 합니다.
하지만 제가 사용하는 언어를 구사하지 못하기 때문에 도움을 드릴 수 없습니다. 죄송합니다