코딩하는 방법? - 페이지 327

 

안녕하세요, 저는 Stocastic의 EA에 이 특정 오류가 있습니다.

제 기준은 이렇습니다.

내 stocEquator가 교차할 때(Uptrend), 내 stocTrigger가 교차할 때 long만 트리거되고 stocEquator가 교차할 때(Downtrend) stocTrigger가 교차할 때 short만 트리거됩니다.

그러나 테스트를 위해 EA를 실행할 때 거래가 트리거되지 않았고 여기에 무엇이 문제가 될 수 있는지 궁금하고 누군가 여기에서 나를 도울 수 있다면 감사하겠습니다.

도움을 주셔서 미리 감사드립니다.

문안 인사

테런스

정수 isCrossedTrigger = 0;

더블 shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

더블 longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

더블 shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

이중 longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

이중 diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

이중 diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

그렇지 않으면 isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

이중 shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

더블 longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

이중 shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

이중 longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

이중 diff1Equator = shortStoc1Equator-longStoc1Equator;

이중 diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

그렇지 않으면 isCrossedEquator = 2;

}

if(총 < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

구입하다

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

팔다

}

리턴(0);

}

반환(0);

 
tkuan77:
안녕하세요, 저는 Stocastic의 EA에 이 특정 오류가 있습니다.

제 기준은 이렇습니다.

내 stocEquator가 교차할 때(Uptrend), 내 stocTrigger가 교차할 때 long만 트리거되고 stocEquator가 교차할 때(Downtrend) stocTrigger가 교차할 때 short만 트리거됩니다.

그러나 테스트를 위해 EA를 실행할 때 거래가 트리거되지 않았고 여기에 무엇이 문제가 될 수 있는지 궁금하고 누군가 여기에서 나를 도울 수 있다면 감사하겠습니다.

도움을 주셔서 미리 감사드립니다.

문안 인사

테런스

정수 isCrossedTrigger = 0;

더블 shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

더블 longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

더블 shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

이중 longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

이중 diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

이중 diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

그렇지 않으면 isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

이중 shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

더블 longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

이중 shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

이중 longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

이중 diff1Equator = shortStoc1Equator-longStoc1Equator;

이중 diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

그렇지 않으면 isCrossedEquator = 2;

}

if(총 < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

구입하다

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

팔다

}

리턴(0);

}

리턴(0);

테런스

내가 확인할 수 없었던 유일한 것은 "총"변수입니다

전체 변수가 올바르게 설정되어 있으면 코드가 작동해야 합니다. 다음은 귀하의 조건과 함께 사용한 테스트 표시기 이며 유효한 매수 및 매도 신호를 발생시키고 있으므로(시각 모드에서 표시기를 실행하면 경고가 표시될 때를 볼 수 있음) 오류가 다른 곳에 있습니다.

#property indicator_separate_window

#property indicator_buffers 0

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int init()

{

return(0);

}

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 

안녕하세요 mladen, 하이라이트 주셔서 감사합니다. 나는 돌아가서 내 코드를 살펴보고 "총"변수가 의미하는 바를 이해할 수 없었습니다. 내 오류의 원인은 무엇입니까?

문안 인사

테런스

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

//| My_First_EA.mq4 |

//| TK|

//| MetaTrader 4 거래 플랫폼 / MetaQuotes Software Corp. |

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

#재산권 "TK"

#속성 링크 "http://www.metaquotes.net"

//--- 입력 매개변수

외부 이중 TakeProfit=500.0;

외부 이중 로트=0.1;

외부 이중 StopLoss=500.0;

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

//| 전문가 초기화 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 초기화 해제 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 시작 기능 |

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

날짜/시간 뉴바;

정수 시작()

{

if(newbar==시간[0])반환(0);

else newbar=시간[0];

int 티켓, 합계;

if(막대<100)

{

Print("100개 미만의 막대");

리턴(0);

}

if(테이크프로핏<10)

{

Print("TakeProfit이 10 미만입니다.");

리턴(0);

}

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

//| 전문가 시작 기능 | 확률적 트리거

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

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //오리지날 스톡 무브먼트

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //오리지날 스톡 무브먼트

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

//| 전문가 시작 기능 | 라인이 교차하고 캔들이 닫힌 경우에만 트리거 거래 설정 |//

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

int isCrossed = 0;

이중 shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

이중 longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

이중 shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

이중 longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

이중 diff1 = shortStoc1-longStoc1;

이중 diff2 = shortStoc2-longStoc2;

if ((diff1*diff2)<0)

{

if (shortStoc1>longStoc1)

isCrossed = 1;

그렇지 않으면 isCrossed = 2;

}

// 적도 주식 시작 --------------------------------------

int isCrossedEquator = 0;

이중 shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

더블 longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

이중 shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

이중 longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

이중 diff1Equator = shortStoc1Equator-longStoc1Equator;

이중 diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

그렇지 않으면 isCrossedEquator = 2;

}

// 적도 스톡 끝 -------------------------------------

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

//| 전문가 끝 기능 | 라인이 교차하고 캔들이 닫힌 경우에만 트리거 거래 설정 |//

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

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

//| 전문가 끝 기능 | 확률적 트리거

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

//| 전문가 시작 기능 | 트리거 순서

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

총계 = OrdersTotal();

if(total < 2) //개방된 거래 수 제한

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"내 EA",12345,0,녹색);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("구매 주문이 열렸습니다 : ",OrderOpenPrice());

}

else Print("구매 주문 열기 오류: ",GetLastError());

리턴(0);

}

if(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

리턴(0);

}

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

//| 전문가 끝 기능 |

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

mladen:
테런스

내가 확인할 수 없었던 유일한 것은 "총"변수입니다

전체 변수가 올바르게 설정되어 있으면 코드가 작동해야 합니다. 다음은 귀하의 조건과 함께 사용한 테스트 표시기이며 유효한 매수 및 매도 신호를 발생시키고 있으므로(시각 모드에서 표시기를 실행하면 경고가 표시될 때를 볼 수 있음) 오류가 다른 곳에 있습니다.

#property indicator_separate_window

#property indicator_buffers 0

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int init()

{

return(0);

}

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 
tkuan77:
안녕하세요 mladen, 하이라이트 주셔서 감사합니다. 나는 돌아가서 내 코드를 살펴보고 "총"변수가 의미하는 바를 이해할 수 없었습니다. 내 오류의 원인은 무엇입니까?

문안 인사

테런스

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

//| My_First_EA.mq4 |

//| TK|

//| MetaTrader 4 거래 플랫폼 / MetaQuotes Software Corp. |

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

#재산권 "TK"

#속성 링크 "http://www.metaquotes.net"

//--- 입력 매개변수

외부 이중 TakeProfit=500.0;

외부 이중 로트=0.1;

외부 이중 StopLoss=500.0;

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

//| 전문가 초기화 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 초기화 해제 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 시작 기능 |

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

날짜/시간 뉴바;

정수 시작()

{

if(newbar==시간[0])반환(0);

else newbar=시간[0];

int 티켓, 합계;

if(막대<100)

{

Print("100개 미만의 막대");

리턴(0);

}

if(테이크프로핏<10)

{

Print("TakeProfit이 10 미만입니다.");

리턴(0);

}

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

//| 전문가 시작 기능 | 확률적 트리거

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

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //오리지날 스톡 무브먼트

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //오리지날 스톡 무브먼트

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

//| 전문가 시작 기능 | 라인이 교차하고 캔들이 닫힌 경우에만 트리거 거래 설정 |//

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

정수 isCrossed = 0;

이중 shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

이중 longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

이중 shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

이중 longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

이중 diff1 = shortStoc1-longStoc1;

이중 diff2 = shortStoc2-longStoc2;

if ((diff1*diff2)<0)

{

if (shortStoc1>longStoc1)

isCrossed = 1;

그렇지 않으면 isCrossed = 2;

}

// 적도 주식 시작 --------------------------------------

int isCrossedEquator = 0;

이중 shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

더블 longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

이중 shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

이중 longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

이중 diff1Equator = shortStoc1Equator-longStoc1Equator;

이중 diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

그렇지 않으면 isCrossedEquator = 2;

}

// 적도 스톡 끝 -------------------------------------

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

//| 전문가 끝 기능 | 라인이 교차하고 캔들이 닫힌 경우에만 트리거 거래 설정 |//

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

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

//| 전문가 끝 기능 | 확률적 트리거

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

//| 전문가 시작 기능 | 트리거 순서

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

총계 = OrdersTotal();

if(total < 2) //개방된 거래 수 제한

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"내 EA",12345,0,녹색);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("구매 주문이 열렸습니다 : ",OrderOpenPrice());

}

else Print("구매 주문 열기 오류: ",GetLastError());

리턴(0);

}

if(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"내 EA",12345,0,레드);

if(티켓>0)

{

if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))

Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());

}

else Print("판매 주문 열기 오류: ",GetLastError());

리턴(0);

}

리턴(0);

}

리턴(0);

}

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

//| 전문가 끝 기능 |

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

테런스

EA가 작동하는 내 테스트에서

다음은 테스트 결과와 백 테스트 보고서입니다. 1분 단위로 테스트

파일:
tk.zip  16 kb
result.gif  13 kb
 

안녕 모두, pls는 누군가가 아래의 이 코드로 저를 도와줄 수 있습니다.,,,, 거래 필수 조건이 트리거될 때만이 아니라 매 틱마다 건전한 경고를 계속 제공합니다! 매 틱마다 또는 새로운 촛대가 형성될 때마다 경보가 울리는 것을 원하지 않습니다.

#속성 표시기_차트_창

#속성 표시기_버퍼 2

#property indicator_color1 라임

#property indicator_color2 빨간색

//---- 입력 매개변수

extern int ADXbars=14;

외부 정수 CountBars=350;

//---- 버퍼

이중 val1[];

이중 val2[];

더블 b4plusdi,nowplusdi,b4minusdi,nowminusdi;

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

//| 커스텀 인디케이터 초기화 해제 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 사용자 지정 표시기 반복 기능 |

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

정수 초기화()

{

//-- 표시기 짧은 이름

IndicatorShortName("PipsdatorPro1("+Symbol()+")");

//---- 표시줄

표시 버퍼(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0, val1);

SetIndexBuffer(1, val2);

//----

리턴(0);

}

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

//| AltrTrend_Signal_v2_2 |

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

정수 시작()

{

if (CountBars>=막대) CountBars=막대;

SetIndexDrawBegin(0,바-카운트바);

SetIndexDrawBegin(1,바-카운트바);

int i,shift,counted_bars=IndicatorCounted();

//---- 가능한 오류 확인

if(counted_bars<0) return(-1);

//---- 초기 0

if(counted_bars<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;

}

for (shift = CountBars, shift>=0, shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);

if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=낮음[shift]-5*포인트;

// Alert("화살표 구매","\n","현재 시간은 ",TimeToStr(CurTime()),"\n",Symbol());

나는 ++;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=높음[shift]+5*포인트;

// Alert("화살표 매도","\n","현재 시간은 ",TimeToStr(CurTime()),"\n",Symbol());

나는 ++;

}

}

반환(0);

}

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

 
Mastercash:
안녕 모두, pls는 누군가가 아래의 이 코드로 저를 도와줄 수 있습니다.,,,, 거래 필수 조건이 트리거될 때만이 아니라 매 틱마다 건전한 경고를 계속 제공합니다! 매 틱마다 또는 새로운 촛대가 형성될 때마다 경보가 울리는 것을 원하지 않습니다.

#속성 표시기_차트_창

#속성 표시기_버퍼 2

#property indicator_color1 라임

#property indicator_color2 빨간색

//---- 입력 매개변수

extern int ADXbars=14;

외부 정수 CountBars=350;

//---- 버퍼

이중 val1[];

이중 val2[];

더블 b4plusdi,nowplusdi,b4minusdi,nowminusdi;

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

//| 커스텀 인디케이터 초기화 해제 기능 |

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 사용자 지정 표시기 반복 기능 |

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

정수 초기화()

{

//-- 표시기 짧은 이름

IndicatorShortName("PipsdatorPro1("+Symbol()+")");

//---- 표시줄

표시 버퍼(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0, val1);

SetIndexBuffer(1, val2);

//----

리턴(0);

}

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

//| AltrTrend_Signal_v2_2 |

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

정수 시작()

{

if (CountBars>=막대) CountBars=막대;

SetIndexDrawBegin(0,바-카운트바);

SetIndexDrawBegin(1,바-카운트바);

int i,shift,counted_bars=IndicatorCounted();

//---- 가능한 오류 확인

if(counted_bars<0) return(-1);

//---- 초기 0

if(counted_bars<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;

}

for (shift = CountBars, shift>=0, shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);

if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=낮음[shift]-5*포인트;

// Alert("화살표 구매","\n","현재 시간은 ",TimeToStr(CurTime()),"\n",Symbol());

나는 ++;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=높음[shift]+5*포인트;

// Alert("화살표 매도","\n","현재 시간은 ",TimeToStr(CurTime()),"\n",Symbol());

나는 ++;

}

}

반환(0);

}

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

Mastercash, 여기에 해당 표시기의 버전이 있습니다. https://www.mql5.com/en/forum/173574/page320 아마도 도움이 될 것입니다.

 
mladen:
테런스

EA가 작동하는 내 테스트에서

다음은 테스트 결과와 백 테스트 보고서입니다. 1분 단위로 테스트

안녕하세요 mladen, 귀하의 의견에 따라 코드를 다시 검토했으며 두 개의 확률적 선이 동일한 양초에서 위 또는 아래로 트리거된 경우에만 거래가 트리거된다는 것을 알았습니다.

그러나 내가 달성하려는 것은 적도 표시기가 상승 추세를 나타내는 위로 교차하는 경우 적도와 빠른 표시기가 동일한 방향으로 트리거되는 대신 빠른 표시기가 위쪽으로 트리거되거나 그 반대의 경우 에만 EA가 길게 트리거된다는 것입니다. 같은 촛불.

그 기준에 맞게 EA를 조정하려고 했지만 원하는 결과를 얻을 수 없었습니다. 내가 잘못하고있는 것이 있습니까? 도와주세요. 다시 한번 감사합니다.

문안 인사

테런스

 
tkuan77:
안녕하세요 mladen, 귀하의 의견에 따라 코드를 다시 검토했으며 두 개의 확률적 선이 동일한 양초에서 위 또는 아래로 트리거된 경우에만 거래가 트리거된다는 것을 알았습니다.

그러나 내가 달성하려는 것은 적도 표시기가 상승 추세를 나타내는 위로 교차하는 경우 적도와 빠른 표시기가 동일한 방향으로 트리거되는 대신 빠른 표시기가 위쪽으로 트리거되거나 그 반대의 경우에만 EA가 길게 트리거된다는 것입니다. 같은 촛불.

그 기준에 맞게 EA를 조정하려고 했지만 원하는 결과를 얻을 수 없었습니다. 내가 잘못하고있는 것이 있습니까? 도와주세요. 다시 한번 감사합니다.

문안 인사

테런스

테런스

이를 달성하기 위해 사용자 지정 표시기 를 작성해야 할 것입니다(EA에서 표시기를 수행하는 것과 동일한 방식으로 수행할 수 없는 일부 항목).

 
mladen:
Terrance 당신은 아마도 그것을 달성하기 위해 커스텀 인디케이터를 작성해야 할 것입니다(EA에서 당신이 하는 것과 같은 방식으로 할 수 없는 것은 인디케이터)

안녕 mladen, 내가 이해하지 못하는 한 가지는 동일한 종류의 기준에도 불구하고 iMA가 아닌 MA로 이것을 할 수 있다는 것입니다. 일종의 표시기 설정이 아닐까요?

문안 인사

테런스

 
tkuan77:
안녕 mladen, 내가 이해하지 못하는 한 가지는 동일한 종류의 기준에도 불구하고 iMA가 아닌 MA로 이것을 할 수 있다는 것입니다. 일종의 표시기 설정이 아닐까요?

문안 인사

테런스

사용자 지정 표시기 를 사용하면 두 눈금 사이의 상태(추세)를 저장할 수 있고 iMA를 사용할 때는 저장할 수 없기 때문입니다(한 가지 예).

사유: