코딩 도움말 - 페이지 352

 
freakout:
안녕하세요,

mladen 님 , 작은 요청이 있습니다. 아래에 첨부된 표시기가 왼쪽 상단 모서리에 표시하는 모든 정보를 끌 수 있습니까?

미리 감사드립니다 ;-)

댓글 켜기/끄기 옵션을 만들었습니다.

파일:
 
paradise77:
안녕,

나 여기 처음이야. 사각형 개체를 업데이트하고 싶지만 방법을 모르겠습니다. 아래 코드는 EMA가 교차하는 경우 객체 사각형을 만드는 데 사용되었습니다. 가격이 되돌아와서 터치하면 이 사각형이 끝나야 합니다. 그것을 하는 방법?

미리 감사드립니다.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrLime

#property indicator_width1 2

#property indicator_color2 clrMagenta

#property indicator_width2 2

extern int EMA1 = 3;

extern int EMA2 = 21;

extern int EMA3 = 63;

extern double arrowDistance = 0.0003;

extern color upRectColor = clrYellow;

extern color dnRectColor = clrDodgerBlue;

extern color touchRectColor = clrDarkGray;

//---

extern double rectHigh = 0.0001;

extern int rectDays = 3;

extern int bars_limit = 2000;

extern bool showRectangle = true;

double upArrow[];

double dnArrow[];

double prev2EMA1, prev2EMA2, prev2EMA3;

double prevEMA1, prevEMA2, prevEMA3;

double curEMA1, curEMA2, curEMA3;

double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;

string objRectName;

string rectArray[];

string indiName = "Emac";

int rectValidity = 0;

int arrayMaxAmounts = 99999;

int arrayCurAmount = 0;

int arrayLastAmount = 0;

//+------------------------------------------------------------------+

//| INIT() |

//+------------------------------------------------------------------+

int init() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);

IndicatorBuffers(2);

SetIndexBuffer(0,upArrow);

SetIndexBuffer(1,dnArrow);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexArrow(1,234);

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

SetIndexLabel(0,"Up");

SetIndexLabel(1,"Dn");

return(0);

}

//+------------------------------------------------------------------+

//| DEINIT() |

//+------------------------------------------------------------------+

int deinit() {

int k=0;

while (k<ObjectsTotal()) {

string objname = ObjectName(k);

if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")

ObjectDelete(objname);

else

k++;

}

return(0);

}

//+------------------------------------------------------------------+

//| START() |

//+------------------------------------------------------------------+

int start() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

int limit,i,k;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---

if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;

if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {

Alert("Adjust limit settings or put more bars on your chart!");

return(0);

}

//---

for (i=0; i<limit; i++) {

prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);

prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);

curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);

curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);

curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);

prevOpenPrc = iOpen(NULL,0,i+1);

prevClosePrc = iClose(NULL,0,i+1);

prevLowPrc = iLow(NULL,0,i+1);

prevHighPrc = iHigh(NULL,0,i+1);

rectValidity = rectDays*86400;

if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up

upArrow = prevLowPrc - arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down

dnArrow = prevHighPrc + arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

} // for

//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------

return(0);

} // start

//+------------------------------------------------------------------+

void DelObjects(string id) {

int ot1=ObjectsTotal();

while(ot1>=0) {

if (StringFind(ObjectName(ot1),id,0)>-1) {

ObjectDelete(ObjectName(ot1));

}

ot1--;

}

return;

}

//+------------------------------------------------------------------+

string FuncPeriodToStr(int thePeriod) {

switch(thePeriod) {

case 1: return("M1");

case 5: return("M5");

case 15: return("M15");

case 30: return("M30");

case 60: return("H1");

case 240: return("H4");

case 1440: return("D1");

case 10080: return("W1");

case 43200: return("MN1");

default: return("MN1");

}

}

//+------------------------------------------------------------------+

@Mladen,

사각형 편집에 대한 단서를 제공하는 데 도움을 주시겠습니까?

나는 이것을 찾았다 :

*) 객체 유형 - MQL4 문서

*) 객체 속성 - MQL4 문서

사각형 속성(time1, price1, time2, price2, color)을 얻은 다음 price1 또는 price2를 현재 Ask/Bid 가격과 비교할 수 있습니다. Ask/Bid price가 price1 또는 price2를 터치하면 다음을 수행해야 합니다.

a) Array는 필요하지 않지만 각 사각형 개체를 보면 됩니다.

객체를 삭제하고 new time2 및 newcolor를 사용하여 다시 생성합니다.

b) OBJPROP_PRICE1에서 캔들 포지션을 어떻게 알 수 있나요? 우리는 일반적으로 다음과 같은 "for" 루프를 사용합니다.

(i=한계, i>0, i--)

price1이 있는 막대의 "i"를 어떻게 얻을 수 있습니까?

c) 사각형을 삭제하고 다시 생성하지 않으면 ObjectSet을 사용하여 사각형 time2 및 색상을 변경할 수 있습니까?

고맙습니다.

 
paradise77:
@Mladen,

사각형 편집에 대한 단서를 제공하는 데 도움을 주시겠습니까?

나는 이것을 찾았다 :

*) 객체 유형 - MQL4 문서

*) 객체 속성 - MQL4 문서

사각형 속성(time1, price1, time2, price2, color)을 얻은 다음 price1 또는 price2를 현재 Ask/Bid 가격과 비교할 수 있습니다. Ask/Bid price가 price1 또는 price2를 터치하면 다음을 수행해야 합니다.

a) Array는 필요하지 않지만 각 사각형 개체를 보면 됩니다.

객체를 삭제하고 new time2 및 newcolor를 사용하여 다시 생성합니다.

b) OBJPROP_PRICE1에서 캔들 포지션을 어떻게 알 수 있나요? 우리는 일반적으로 다음과 같은 "for" 루프를 사용합니다.

price1이 있는 막대의 "i"를 어떻게 얻을 수 있습니까?

c) 사각형을 삭제하고 다시 생성하지 않으면 ObjectSet을 사용하여 사각형 time2 및 색상을 변경할 수 있습니까?

고맙습니다.

귀하의 경우 가격은 괜찮습니다. 왼쪽과 오른쪽에서 상자를 제한하려면 시간을 사용해야 합니다.

 

우주 생물,

이 조각을 주셔서 감사합니다. 실제로는 instaforex 데모를 사용했습니다. 일반적인 방법으로 100만 가격을 가장 많이 다운로드했습니다. 그런 다음 EURUSD를 사용하여 설정을 수행하고 보고서 탭과 로그 아래의 스크린샷을 참조하세요.

//보고, 주목하지만 zerp, 왜?

cosmiclifeform:
안녕하세요 마스터캐시입니다.

FXDD 데모 계정에서 EA를 실행했는데...특별한 작업은 없었습니다...기본 설정으로 전략 테스터에서 EA를 실행했습니다.

더 많은 도움을 드리고 싶지만... 추적할 특정 단서(오류 로그, 스크린샷 및 기타 조건)가 없으면 빈 결과가 나타나는 이유를 찾는 것이 불가능합니다.

제가 추천할 수 있는건...

먼저 잘 작동하는 테스터에서 좋은 EA를 시도하십시오.

이렇게 하면 데모 계정과 절차가 모두 정상임을 확인할 수 있습니다.

모든 것이 예상대로 작동한다는 확신을 먼저 얻으십시오.

그런 다음 Nice TraderEA를 사용해 보고 무슨 일이 일어나는지 정확히 기록하십시오. 빈 화면이라도 확인할 로그가 있어야 합니다.

모든 곳에 PRINT 및 COMMENT 문을 추가한 다음... EA 탭과 Journal 탭 모두에서 로그를 다시 확인하세요...

또한 귀하의 COMMENT가 화면에 나타날 것이므로 EA가 작동하는지 여부를 실제로 확인해야 합니다.

좋은 코딩 도움을 받기 위한 결론은...

EA에 무슨 일이 일어나고 있는지 찾을 수 있는 가장 많은 단서를 제공하는 것입니다...

가능한 모든 것을 계속 시도하고 결과를 알려주세요.

잘 지내세요,

로버트
파일:
backtest1.png  14 kb
backtest2.png  3 kb
 
mladen:
귀하의 경우 가격은 괜찮습니다. 왼쪽과 오른쪽에서 상자를 제한하려면 시간을 사용해야 합니다.

감사합니다. Time2를 동적으로 사용해야 한다는 말입니까? Time1, price1 & price2는 고정되어 있습니다. 그러나 Time2는 현재 막대(i)에 의존하며, 가격 터치 사각형까지 이동 하거나 기본 사각형 설정 시간 이상입니다.

즉, 사각형 ?의 색상과 time2를 변경할 수 없습니다.

감사해요

 
paradise77:
감사합니다. Time2를 동적으로 사용해야 한다는 말입니까? Time1, price1 & price2는 고정되어 있습니다. 그러나 Time2는 현재 막대(i)에 의존하여 가격 터치 사각형까지 이동하거나 기본 사각형 설정 시간 이상입니다.

즉, 사각형 ?의 색상과 time2를 변경할 수 없습니다.

감사해요

파라다이스77

예, 당신은해야합니다

그렇게 하면 항상 상자의 오른쪽 테두리를 조정할 수 있습니다(조정이 필요한 경우).

 

안녕하세요 Mladen 씨와 Mrtools 씨.

나는 시각 시스템을 좋아하기 때문에 너무 많은 경고를 좋아하지 않기 때문에 모든 소음과 팝업 창은 주의를 산만하게 할 뿐입니다. 과매수 또는 과매수 시 CCI의 일부 경고만 설정했습니다.

그러나 내가 갖고 싶은 한 가지 경고가 있습니다. 즉, '내' SSA + MA가 위쪽 또는 아래쪽으로 MA와 교차할 때입니다.

또 하나, 저는 항상 이 멋진 도구에 세 가지 레벨을 추가합니다. 물론 0선, 0.0뿐만 아니라 -0.3과 0.3도 마찬가지입니다.

SSA가 -0.3 수준과 0.3 수준을 넘을 때 경고도 받고 싶습니다. 0.0 레벨은 필요하지 않습니다.

경고 간단한 소리와 팝업, 그게 다야.

고맙습니다 !

파일:
ssa__ma.mq4  5 kb
 
Wulong10:
안녕하세요 Mladen 씨와 Mrtools 씨.

나는 시각 시스템을 좋아하기 때문에 너무 많은 경고를 좋아하지 않기 때문에 모든 소음과 팝업 창은 주의를 산만하게 할 뿐입니다. 과매수 또는 과매수 시 CCI의 일부 경고만 설정했습니다.

그러나 내가 갖고 싶은 한 가지 경고가 있습니다. 즉, '내' SSA + MA가 위쪽 또는 아래쪽으로 MA와 교차할 때입니다.

또 하나, 저는 항상 이 멋진 도구에 세 가지 레벨을 추가합니다. 물론 0선, 0.0뿐만 아니라 -0.3과 0.3도 마찬가지입니다.

SSA가 -0.3 수준과 0.3 수준을 넘을 때 경고도 받고 싶습니다. 0.0 레벨은 필요하지 않습니다.

경고 간단한 소리와 팝업, 그게 다야.

고맙습니다 !

우롱10

SSA의 문제는 재계산 알고리즘이라는 것입니다. 그것에 경고를 추가 하는 것은 적어도 제 생각입니다. 항상 십자가의 위치를 바꿀 것이고 때로는 십자가가 완전히 사라질 것이기 때문에 현명하지 않습니다. 신호가 없는 모드에서 사용하는 것이 좋습니다(추정 전용).

 

안녕 믈라덴

SSA가 더 높은 기간에 다시 계산한다는 것을 알고 있습니다.

M5에서 사용하면 M15에서 훨씬 더 많이 바뀌겠지만 M1에서는 이 인디를 많이 테스트했고 매우 만족합니다. 내 설정에서는 실제로 많이 조정되지 않고 실제로 매우 정확합니다.

물론 가격이 장기간 상승하거나 장기간 하락하면 신뢰성이 그리 높지는 않지만 지표가 많은 경우에는 그렇지 않습니까?

그런 다음 안전 문제에 대해 차트에서 단순 이동 평균 을 사용합니다.

다른 사람은 알림을 사용할 수 없지만 저는 할 수 있습니다.

CCI의 경고도 항상 옳은 것은 아니지만 다음에 일어날 수 있는 일을 나타내는 것일 뿐입니다.

따라서 SSA가 경보를 발령하면 이에 대해 무엇을 할 것인지 결정하는 것은 나에게 달려 있으며 나는 그 일을 잘하고 있습니다.

게다가 SSA를 좋아하는 사람은 나뿐만이 아닌 것 같은데...

사라지는 십자가? M1에서는 자주 사용하지 않으며 며칠 동안 그 차트를 보고 있습니다.

따라서 가능하면 알림을 받고 싶습니다.

단케 쇤!

 
Wulong10:
안녕 믈라덴

SSA가 더 높은 기간에 다시 계산한다는 것을 알고 있습니다.

M5에서 사용하면 M15에서 훨씬 더 많이 바뀌겠지만 M1에서는 이 인디를 많이 테스트했고 매우 만족합니다. 내 설정에서는 실제로 많이 조정되지 않고 실제로 매우 정확합니다.

물론 가격이 장기간 상승하거나 장기간 하락하면 신뢰성이 그리 높지는 않지만 지표가 많은 경우에는 그렇지 않습니까?

그런 다음 안전 문제에 대해 차트에서 단순 이동 평균을 사용합니다.

다른 사람은 알림을 사용할 수 없지만 저는 할 수 있습니다.

CCI의 경고도 항상 옳은 것은 아니지만 다음에 일어날 수 있는 일을 나타내는 것일 뿐입니다.

따라서 SSA가 경보를 발령하면 이에 대해 무엇을 할 것인지 결정하는 것은 나에게 달려 있으며 나는 그 일을 잘하고 있습니다.

게다가 SSA를 좋아하는 사람은 나뿐만이 아닌 것 같은데...

사라지는 십자가? M1에서는 자주 사용하지 않으며 며칠 동안 그 차트를 보고 있습니다.

따라서 가능하면 알림을 받고 싶습니다.

단케 쇤!

우롱10

SSA는 항상 다시 계산합니다(내가 해당 dll을 계산하도록 만든 사람이기 때문에 저를 믿으십시오). 그 규칙에는 예외가 없습니다(사용하는 기간은 중요하지 않음).

또한 계산 횟수가 > 1로 설정되면 모든 막대를 다시 계산합니다. 계산 횟수를 1로 설정하면 최소한 "지연" 막대가 다시 계산됩니다.

사유: