코딩 도움말 - 페이지 351

 
mladen:
stevenpun 이를 위해 해당 표시기에 "기울기 방향" 버퍼를 추가하거나 버퍼에서 이미 해당 기울기가 해결된 다른 MACD를 사용하는 것이 가장 쉽습니다.

이거 어때요 https://www.mql5.com/en/forum/178018/page67

그러나 문제는 내가 코드에 넣어야 하는 것이 무엇인지, 나는 구글에 많은 EA를 가지고 있지만 몇 가지 예를 찾는 데 성공하지 못했습니다.

몇 가지 예를 보여주세요. 도와주셔서 감사합니다.

 
stevenpun:
이거 어때요 https://www.mql5.com/en/forum/178018/page67

그러나 문제는 내가 코드에 넣어야 하는 것이 무엇인지, 나는 구글에 많은 EA를 가지고 있지만 몇 가지 예를 찾는 데 성공하지 못합니다.

몇 가지 예를 보여주세요. 도와주셔서 감사합니다.

스티븐펀

사용하기에 좋은 예가 될 것입니다.

"색상" 버퍼를 읽고 그 값이 -1에서 1로 변경되면 매수 신호이고 값이 1에서 -1로 변경되면 매도 신호입니다("from"은 이전 값 색상 버퍼의 "to"가 현재 값이거나 닫힌 막대로만 작업하려는 경우 "from"은 2 막대 전이고 "to"는 1 막대 전입니다)

 

안녕,

나 여기 처음이야. 사각형 개체 를 업데이트하고 싶지만 방법을 모르겠습니다. 아래 코드는 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");

}

}

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

 

둘 이상의 EA 간에 통신하는 방법은 무엇입니까?

 

newBie는 이것을 MT4 빌드 670으로 개발하려고합니다. 도움말 ~

MetaTrader Market 에서 MetaTrader 5용 '3 이동 평균' 거래 로봇(전문가 고문)을 다운로드 하시겠습니까?

나는 KISS를 좋아하기 때문에 이것을 좋아합니다 (단순한 바보로 유지)

저는 초보자이고 이것을 개발하고 싶습니다.

(1. 버전_01)

실행하면 EA가 켜지는 즉시 위치를 배치합니다.

.mq4를 생성하기 위해 .ex5에서 리버스 엔지니어링하는 것과 같습니다.

(2. version_02)

같은 차트에서 지그재그에서 찾을 Weekly R&S를 시각화합니다.

(3. version_03)

논리 추가,

--- 추세선의 20핍 위 또는 아래에 입력하지 마십시오.

주간 R&S와 별도로 20핍에서 포지션을 청산합니다.

당신의 도움은 감사할 것입니다 ~

미리 감사드립니다~

 

cosmiclifeform, 그 이후로 Nice TraderEA를 다시 테스트할 수 없다는 것이 웃기네요. 그래서 최적화할 수 없었습니다. alpari 데모와 ista forex에서도 똑같이 했습니다.... 계속 빈 결과가 나옵니다. . 백테스트 에 사용하는 팁을 알려주세요.

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

나는 아무 문제 없이 전략 테스터에서 NiceTrader EA를 다운로드하고 실행할 수 있었습니다.

나는 단지 기본 설정을 사용했고 아무 것도 변경하지 않았습니다...그리고 어떤 오류 메시지도 받지 않았습니다.

내 데모에서 실시간으로 실행하려고 하지는 않았지만... 이 EA는 Strategy Tester에서 잘 작동합니다. 첨부된 차트 참조...

로그 오류 메시지나 다른 단서가 왜 거래되지 않는지 알 수 있습니까...?

도움이 되었기를 바랍니다,

로버트

 
Mastercash:
cosmiclifeform, 그 이후로 Nice TraderEA를 다시 테스트할 수 없다는 것이 웃기네요. 그래서 최적화할 수 없었습니다. alpari 데모와 ista forex에서도 똑같이 했습니다.... 계속 빈 결과가 나옵니다. .백테스트에 사용하는 팁을 알려주세요.

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

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

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

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

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

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

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

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

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

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

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

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

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

잘 지내세요,

로버트

 
apprentice coder:
둘 이상의 EA 간에 통신하는 방법은 무엇입니까?

전용 기능 또는 기능 세트가 있다면 대답은 n 그런 것이 있습니다.

나는 꽤 많은 시도를 보았고 지금까지 내가 본 방법 중 어느 것도 모든 상황에서 작동하지 않습니다. 한명 빼고. 그러나 하나는 내가 발명했으며 아이디어가 너무 단순해서 아무도 그것에 대해 생각하지 않았다는 것이 여전히 믿기지 않습니다(그것은 심지어 동일한 위치에 있지 않고 API를 사용하지 않는 EA의 통신도 제공합니다). 나는 그 솔루션을 유지하고 있습니다 (이 경우 누군가가 같은 것을 생각하는지 확인하기를 기다리고 있습니다)

예상 범위를 벗어나 생각하려고 노력하십시오.

 
mladen:
전용 기능 또는 기능 세트가 있다면 대답은 n 그런 것이 있습니다.

나는 꽤 많은 시도를 보았고 지금까지 내가 본 방법 중 어느 것도 모든 상황에서 작동하지 않습니다. 한명 빼고. 그러나 하나는 내가 발명했으며 아이디어가 너무 단순해서 아무도 그것에 대해 생각하지 않았다는 것이 여전히 믿기지 않습니다(그것은 심지어 동일한 위치에 있지 않고 API를 사용하지 않는 EA의 통신도 제공합니다). 나는 그 솔루션을 유지하고 있습니다 (이 경우 누군가가 같은 것을 생각하는지 확인하기를 기다리고 있습니다)

예상 범위를 벗어나 생각하려고 노력하십시오.

무슨 말인지 압니다. 아이디어는 때때로 그 이후에 어떻게 만들어지는지보다 훨씬 더 가치가 있습니다. 감사해요

 

안녕하세요,

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

미리 감사드립니다 ;-)

파일: