코딩하는 방법? - 페이지 327 1...320321322323324325326327328329330331332333334...347 새 코멘트 tkuan77 2013.06.05 11:24 #3261 안녕하세요, 저는 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); How to code? 포럼을 어지럽히 지 않도록 [ARCHIVE!] 포럼을 어지럽히 지 Mladen Rakic 2013.06.05 19:26 #3262 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); } How to code? Coding help 코딩 도움말 tkuan77 2013.06.06 15:15 #3263 안녕하세요 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); } How to code? Help with Entry Criteria 포럼을 어지럽히 지 않도록 Mladen Rakic 2013.06.06 16:15 #3264 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 Mastercash 2013.06.06 23:09 #3265 안녕 모두, 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); } //+----------------------------------------------- ----------------+ How to code? Indicators with alerts/signal [Archive!] Any rookie question, William Snyder 2013.06.06 23:41 #3266 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 아마도 도움이 될 것입니다. tkuan77 2013.06.09 03:19 #3267 mladen: 테런스 EA가 작동하는 내 테스트에서 다음은 테스트 결과와 백 테스트 보고서입니다. 1분 단위로 테스트 안녕하세요 mladen, 귀하의 의견에 따라 코드를 다시 검토했으며 두 개의 확률적 선이 동일한 양초에서 위 또는 아래로 트리거된 경우에만 거래가 트리거된다는 것을 알았습니다. 그러나 내가 달성하려는 것은 적도 표시기가 상승 추세를 나타내는 위로 교차하는 경우 적도와 빠른 표시기가 동일한 방향으로 트리거되는 대신 빠른 표시기가 위쪽으로 트리거되거나 그 반대의 경우 에만 EA가 길게 트리거된다는 것입니다. 같은 촛불. 그 기준에 맞게 EA를 조정하려고 했지만 원하는 결과를 얻을 수 없었습니다. 내가 잘못하고있는 것이 있습니까? 도와주세요. 다시 한번 감사합니다. 문안 인사 테런스 유니버설 MA 크로스 EA 트레이딩의 머신러닝: 이론, 모델, icustom 지그재그 Mladen Rakic 2013.06.09 05:37 #3268 tkuan77: 안녕하세요 mladen, 귀하의 의견에 따라 코드를 다시 검토했으며 두 개의 확률적 선이 동일한 양초에서 위 또는 아래로 트리거된 경우에만 거래가 트리거된다는 것을 알았습니다. 그러나 내가 달성하려는 것은 적도 표시기가 상승 추세를 나타내는 위로 교차하는 경우 적도와 빠른 표시기가 동일한 방향으로 트리거되는 대신 빠른 표시기가 위쪽으로 트리거되거나 그 반대의 경우에만 EA가 길게 트리거된다는 것입니다. 같은 촛불. 그 기준에 맞게 EA를 조정하려고 했지만 원하는 결과를 얻을 수 없었습니다. 내가 잘못하고있는 것이 있습니까? 도와주세요. 다시 한번 감사합니다. 문안 인사 테런스 테런스 이를 달성하기 위해 사용자 지정 표시기 를 작성해야 할 것입니다(EA에서 표시기를 수행하는 것과 동일한 방식으로 수행할 수 없는 일부 항목). tkuan77 2013.06.09 06:34 #3269 mladen: Terrance 당신은 아마도 그것을 달성하기 위해 커스텀 인디케이터를 작성해야 할 것입니다(EA에서 당신이 하는 것과 같은 방식으로 할 수 없는 것은 인디케이터) 안녕 mladen, 내가 이해하지 못하는 한 가지는 동일한 종류의 기준에도 불구하고 iMA가 아닌 MA로 이것을 할 수 있다는 것입니다. 일종의 표시기 설정이 아닐까요? 문안 인사 테런스 Mladen Rakic 2013.06.09 09:12 #3270 tkuan77: 안녕 mladen, 내가 이해하지 못하는 한 가지는 동일한 종류의 기준에도 불구하고 iMA가 아닌 MA로 이것을 할 수 있다는 것입니다. 일종의 표시기 설정이 아닐까요? 문안 인사 테런스 사용자 지정 표시기 를 사용하면 두 눈금 사이의 상태(추세)를 저장할 수 있고 iMA를 사용할 때는 저장할 수 없기 때문입니다(한 가지 예). 1...320321322323324325326327328329330331332333334...347 새 코멘트 사유: 취소 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
안녕하세요, 저는 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);
안녕하세요, 저는 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_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);
}
//+----------------------------------------------- -------------------+
//| 전문가 끝 기능 |
//+----------------------------------------------- -------------------+
테런스
내가 확인할 수 없었던 유일한 것은 "총"변수입니다
전체 변수가 올바르게 설정되어 있으면 코드가 작동해야 합니다. 다음은 귀하의 조건과 함께 사용한 테스트 표시기이며 유효한 매수 및 매도 신호를 발생시키고 있으므로(시각 모드에서 표시기를 실행하면 경고가 표시될 때를 볼 수 있음) 오류가 다른 곳에 있습니다.
#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); //오리지날 스톡 무브먼트
//+----------------------------------------------- ---------------------------------------+
//| 전문가 시작 기능 | 라인이 교차하고 캔들이 닫힌 경우에만 트리거 거래 설정 |//
//+----------------------------------------------- ---------------------------------------+
정수 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분 단위로 테스트
안녕 모두, 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);
}
//+----------------------------------------------- ----------------+
안녕 모두, 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 아마도 도움이 될 것입니다.
테런스
EA가 작동하는 내 테스트에서
다음은 테스트 결과와 백 테스트 보고서입니다. 1분 단위로 테스트안녕하세요 mladen, 귀하의 의견에 따라 코드를 다시 검토했으며 두 개의 확률적 선이 동일한 양초에서 위 또는 아래로 트리거된 경우에만 거래가 트리거된다는 것을 알았습니다.
그러나 내가 달성하려는 것은 적도 표시기가 상승 추세를 나타내는 위로 교차하는 경우 적도와 빠른 표시기가 동일한 방향으로 트리거되는 대신 빠른 표시기가 위쪽으로 트리거되거나 그 반대의 경우 에만 EA가 길게 트리거된다는 것입니다. 같은 촛불.
그 기준에 맞게 EA를 조정하려고 했지만 원하는 결과를 얻을 수 없었습니다. 내가 잘못하고있는 것이 있습니까? 도와주세요. 다시 한번 감사합니다.
문안 인사
테런스
안녕하세요 mladen, 귀하의 의견에 따라 코드를 다시 검토했으며 두 개의 확률적 선이 동일한 양초에서 위 또는 아래로 트리거된 경우에만 거래가 트리거된다는 것을 알았습니다.
그러나 내가 달성하려는 것은 적도 표시기가 상승 추세를 나타내는 위로 교차하는 경우 적도와 빠른 표시기가 동일한 방향으로 트리거되는 대신 빠른 표시기가 위쪽으로 트리거되거나 그 반대의 경우에만 EA가 길게 트리거된다는 것입니다. 같은 촛불.
그 기준에 맞게 EA를 조정하려고 했지만 원하는 결과를 얻을 수 없었습니다. 내가 잘못하고있는 것이 있습니까? 도와주세요. 다시 한번 감사합니다.
문안 인사
테런스테런스
이를 달성하기 위해 사용자 지정 표시기 를 작성해야 할 것입니다(EA에서 표시기를 수행하는 것과 동일한 방식으로 수행할 수 없는 일부 항목).
Terrance 당신은 아마도 그것을 달성하기 위해 커스텀 인디케이터를 작성해야 할 것입니다(EA에서 당신이 하는 것과 같은 방식으로 할 수 없는 것은 인디케이터)
안녕 mladen, 내가 이해하지 못하는 한 가지는 동일한 종류의 기준에도 불구하고 iMA가 아닌 MA로 이것을 할 수 있다는 것입니다. 일종의 표시기 설정이 아닐까요?
문안 인사
테런스
안녕 mladen, 내가 이해하지 못하는 한 가지는 동일한 종류의 기준에도 불구하고 iMA가 아닌 MA로 이것을 할 수 있다는 것입니다. 일종의 표시기 설정이 아닐까요?
문안 인사
테런스사용자 지정 표시기 를 사용하면 두 눈금 사이의 상태(추세)를 저장할 수 있고 iMA를 사용할 때는 저장할 수 없기 때문입니다(한 가지 예).