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

 

안녕,

내 요청은 잠시 동안 정보를 제공하기 위한 것입니다.

과거를 계산하지 않고 라이브 데이터만 생성하는 지표가 있는 경우 전략 테스터 템플릿에 첨부하고 기록의 데이터로 오프라인 차트를 생성할 수 있습니까?

고맙습니다.

 
mladen:
제이존비치,

변경하지 않고 루프에서 반복해서 trendCurr의 값을 테스트하고 있습니다(따라서 항상 NONE을 반환할 것입니다)

iCustom()을 루프에 넣은 다음 해당 값을 테스트하십시오. 이 같은 :

if (trendCurr>0)

{

for(int i=1; i<=lookback; i++)

{

int testValue = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue<0) return(LONG);

}

return(NONE);

}

귀하에게. 나는 이것에 대해 두 단어만 가지고 있지만 그들은 반복을 참는다...

감사합니다, 감사합니다 그리고 감사합니다!!!

실제로 귀하의 코드는 완벽하게 작동했으며 귀하가 게시한 내용을 마침내 발견하기 전에 다른 'for' 루프, 시행착오 등을 검사하는 데 12시간 이상을 절약할 수 있었습니다 .

나는 실제로 루프에서 반복해서 trendCurr을 테스트하고 싶다고 생각했지만, 이제 당신 덕분에 오류가 보입니다. 그리고 "i"로 Stepbartotest를 변경하는 솔루션이 실제로 "i"를 사용하는 완벽한 솔루션임을 알 수 있습니다. 이것은 실제로 핵심이지만 완전히 명확하지 않은 것 같습니다. 적어도 나 같은 초보자에게는 이것을 알아 내기까지 시간이 걸렸을 것입니다 ...

코드가 의도한 대로 작동하는 동안 내 전체 블록은 그렇지 않습니다. 이 루프를 LONG 기준 내에서 실행하면 의도하지 않은 매우 흥미로운 결과가 발생합니다.

if(TwentyOneEMA > FiftyFiveEMA)

{

if (trendCurr>0) // 스텝 필터 전류 확인

{

if (입찰가 > TwentyOneEMA)

{

for(int i=0; i<=lookback; i++)

{

int testValue = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",길이,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue<0) return(LONG);

}

반환(없음);

}

}

}

지금 일어나는 일은 if가 충족되면 루프가 테스트되고 true이면 구매하고, 그렇지 않으면 아무 것도 하지 않는 것입니다. 그러나 전체 코드 블록은 "while" 루프처럼 작동합니다. 왜냐하면 if(TwentyOneEMA > FiftyFiveEMA)가 참인 한 그 아래의 나머지 코드는 계속 실행되고 다른 조건이 모두 참이 되면 빨판은 구매하기 때문입니다. ! 여기 내 코드 구조의 명백한 오류가 있습니다.... (다른 유사한 for 루프가 EMA를 테스트하여 EMA 교차가 새로운 것인지 확인할 수 있다고 생각합니다)

그러나 이것이 반드시 나쁜 것은 아닙니다(일부 분석에서 암시하는 것처럼). 사실 이것은 제 다음 목표와 비슷합니다. 다른 방식으로 훨씬 더 많은 테스트가 필요하지만 지금은 이 개정판을 떠날 것입니다. 이 봇에 배치하고 사본에서 다음 개정을 시작합니다.

과거를 보고 나서 내가 하려고 했던 것은 과거 루프가 거짓으로 판명되면 스텝 신호에 대해 NEXT 10개 막대를 확인하고 그것이 사실이 되면 거래를 취하는 것이었습니다(나는 이것을 위해 while 루프를 사용하는 것에 대해 생각하고 계십니까?). 그래서 이것은 예상되는 바에 10바 제한이 없다는 점을 제외하고는 이미 일어나고 있는 일입니다. 그리고 올바르게 작동하려면 전체를 어떻게 구성해야 하는지 잘 모르겠습니다. (Step 신호를 확인할 수 있다고 생각하고 마지막 10개 막대에서 새로운 MA 십자가를 찾을 수 있다고 생각하지만 이를 위해 모든 블록을 반복해야 하고 더 효율적이고 우아한 방법이 있어야 한다고 생각합니다)

당신의 도움에 다시 한 번 감사드립니다. 이것은 미래의 코딩에 매우 유용할 것이라고 확신합니다.

 

안녕,

첨부된 인디케이터를 수정하려고 합니다. 실질적으로 움직이는 에버리지가 가격을 터치하면 알람이 울리고 터치되는 시간 프레임이 변경됩니다. 나는 존경하는 알람에 지연을 두었지만 알람 후에 타임 프레임을 변경하면 무시합니다.

그것은 고칠 수 있습니까?

medie_mobili.mq4 감사합니다.

파일:
 

다시오

지표를 사용하면 변경할 수 없습니다. 표시기는 전역 범위 및 정적 변수를 기본값으로 재설정하므로 시간 프레임이나 기호를 변경할 때 일부 값을 유지할 수 없습니다. 전역 변수("GlobalVariable..." 함수로 관리되는 변수)를 사용할 수 있지만 코드가 매우 복잡해지며(여러 인스턴스, 여러 기호 등) 제 생각에는 그럴 가치가 없습니다.

dasio:
안녕,

첨부된 인디케이터를 수정하려고 합니다. 실질적으로 움직이는 에버리지가 가격을 터치하면 알람이 울리고 터치되는 시간 프레임이 변경됩니다. 나는 존경하는 알람에 지연을 두었지만 알람 후에 타임 프레임을 변경하면 무시합니다.

그것은 고칠 수 있습니까?

medie_mobili.mq4 감사합니다.
 

...

이전 게시물에 한 가지 추가 사항: 널리 알려지지 않은 한 가지 - EA는 해당 변수(전역 범위 및 정적 변수)를 다르게 취급합니다. 시간 프레임이나 기호가 변경될 때 재설정되지 않습니다. 다음은 지표에서와 같이 EA에서 해당 값이 재설정되지 않는 방법을 관심 있는 사람들에게 보여주는 매우 간단한 EA입니다.

int counter = 0;

int init()

{

return(0);

}

int start()

{

static int counterStart = 0;

counterStart++;

counter++;

Comment("counter from start : "+counterStart," counter using global scope : "+counter);

return(0);

}

그것조차도 일부 Eas에서 일부 오류의 원인입니다(EA가 시간 프레임이나 기호가 변경될 때 변수가 재설정되지 않을 것이라는 점을 고려하지 않으면 EA 작업에서 매우 이상한 오류가 발생할 수 있음)

 
mladen:
dasio 코드에서 코드의 의도가 무엇인지 알 수 없습니다. 어쨌든 다음은 표시기의 "기본" 값(코드의 첫 번째 부분)으로 실제 범위를 사용하거나 코드의 두 번째 부분을 다음과 같이 사용하려는 경우 선택할 수 있는 코드입니다. "기본" 값

다시 한번 mladen에게 감사드립니다.

이 조건에 따라 다른 줄을 추가할 수 있습니까?

항상 일 기간을 기준으로 하는 Avg[]의 >인 Work[]의 평균에 수평선 을 그립니다.

고맙습니다

 

신호 수정

안녕 믈라덴

이 코드에 판매 중지 또는 구매 중지 신호를 추가하고 싶습니다. 예를 들어 확률적 신호 라인이 메인 위에 있으면 판매 중지 등을 추가하고 싶습니다. 코드에 추가했지만 작동하지 않습니다... pls help

if(마침표()==240)

{

정적 날짜/시간 lastAlerted=0;

이중 ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

이중 ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

이중 RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

이중 RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

이중 b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

더블 nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

더블 b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

더블 nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// 경고

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=시간[0]))

{

lastAlerted=시간[0]; Alert("화살표 구매","\n"," 현재 시간 은 ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=시간[0]))

{

lastAlerted=시간[0]; Alert("화살표 판매","\n","현재 시간은 ",TimeToStr(CurTime()),"\n",Symbol());

}

}

 

다음과 같이 시도해 볼 수 있습니다.

if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MOD E_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,M ODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

alertType = "do nothing";

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trC CI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol()); alertType="buy";

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trC CI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol()); alertType="sell";

}

if (alertType=="do nothing")

{

lastAlerted=Time[0]; Alert("Stop previous action","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
Mastercash:
안녕 믈라덴

이 코드에 판매 중지 또는 구매 중지 신호를 추가하고 싶습니다. 예를 들어 확률적 신호 라인이 메인 위에 있으면 판매 중지 등을 추가하고 싶습니다. 코드에 추가했지만 작동하지 않습니다... pls help

if(마침표()==240)

{

정적 날짜/시간 lastAlerted=0;

이중 ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

이중 ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

이중 RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

이중 RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

이중 b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

더블 nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

더블 b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

더블 nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// 경고

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=시간[0]))

{

lastAlerted=시간[0]; Alert("화살표 구매","\n","현재 시간은 ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=시간[0]))

{

lastAlerted=시간[0]; Alert("화살표 판매","\n","현재 시간은 ",TimeToStr(CurTime()),"\n",Symbol());

}

}
 

글쎄, 나는 다시 붙어있다. 내 코드가 구조화된 방식으로 인해 미래를 내다보지 못하도록 EA를 수정하려고 합니다.

내 신호 코드는 "if"로 시작하며, 이것이 사실인 한, 다음 코드의 나머지 부분은 정상적으로 계속 실행됩니다(이것은 첫 번째 for 루프를 삽입하기 전에는 문제가 아니었지만 지금은 문제입니다). 그래서 이 문제를 해결하기 위해 여러 가지를 시도했지만 아무 것도 작동하지 않습니다. 나는 또한 매뉴얼을 확인 했지만 거기에 눈에 띄는 것은 없었습니다. 아마도 같은 블록에 두 개의 "for" 루프가 허용되지 않습니까?

다음은 내가 생각하는 최선의 노력(간단함을 위해 LONG 표시)이며 오류는 없지만 EA는 거래를 하지 않으므로 루프를 다시 망쳤을 가능성이 있습니다.

if (주문수 == 0)

{

if(TwentyOneEMA > FiftyFiveEMA+분리)

{

if (trendCurr>0)

{

for(int i=0; i<=lookbackma; i++)

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

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

if (testValue1 < testValue2-Separation2)

{

if (Bid TwentyOneEMA) // 뉴스 필터

{

for(i=0; i<=lookback; i++)

{

int testValue3 = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",길이,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue3 <0 && NumOrders < maxorders) return(LONG);

}

반환(없음);

}

}

}

}

}

===========

참고 if (testValue1 < testValue2-Separation2) 계속 시도했습니다. 하지만 오류로 '계속' 플래그를 지정했습니다. 2개의 루프가 허용되지 않으면 다른 루프를 추가하는 다음 작업이 잘못 안내될 수 있습니다...

 
jayjonbeach:
글쎄, 나는 다시 붙어있다. 내 코드가 구조화된 방식으로 인해 미래를 내다보지 못하도록 EA를 수정하려고 합니다.

내 신호 코드는 "if"로 시작하며, 이것이 사실인 한, 다음 코드의 나머지 부분은 정상적으로 계속 실행됩니다(이것은 첫 번째 for 루프를 삽입하기 전에는 문제가 아니었지만 지금은 문제입니다). 그래서 이 문제를 해결하기 위해 여러 가지를 시도했지만 아무 것도 작동하지 않습니다. 나는 또한 매뉴얼을 확인했지만 거기에 눈에 띄는 것은 없었습니다. 아마도 같은 블록에 두 개의 "for" 루프가 허용되지 않습니까?

다음은 내가 생각하는 최선의 노력(간단함을 위해 LONG 표시)이며 오류는 없지만 EA는 거래를 하지 않으므로 루프를 다시 망쳤을 가능성이 있습니다.

if (주문수 == 0)

{

if(TwentyOneEMA > FiftyFiveEMA+분리)

{

if (trendCurr>0)

{

for(int i=0; i<=lookbackma; i++)

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

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

if (testValue1 < testValue2-Separation2)

{

if (Bid TwentyOneEMA) // 뉴스 필터

{

for(i=0; i<=lookback; i++)

{

int testValue3 = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",길이,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue3 <0 && NumOrders < maxorders) return(LONG);

}

반환(없음);

}

}

}

}

}

===========

참고 (testValue1 < testValue2-Separation2) 계속하면 시도했습니다. 하지만 오류로 '계속' 플래그를 지정했습니다. 2개의 루프가 허용되지 않으면 다른 루프를 추가하는 다음 작업이 잘못 안내될 수 있습니다...

좋아, 나는 그것을 알아 냈다고 생각한다. 그것은 내가 for 루프를 구조화한 방식이었다. 왜냐하면 이 첫 번째 루프 직후에 상황이 "완료"되지 않을 것이기 때문에 두 번째 루프와 약간 다르게 구조화해야 했기 때문이다. 적어도 그것은 결론 나는 다른 봇을보고 왔습니다. 빠른 테스트는 다음 작업을 보여주지만 더 많은 테스트를 수행해야 합니다.

NumOrders = CalculateCurrentOrders();

if (주문수 == 0)

{

if(TwentyOneEMA > FiftyFiveEMA+분리)

{

if (trendCurr>0)

{

for(int i=0; i<=lookbackma; i++)

{

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

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

if (testValue1 <! testValue2-Separation2)

{

Print("거래 금지");

부서지다;

}

(Bid TwentyOneEMA) 계속하면; // 뉴스 필터

for(int j=0; j<=lookback; j++)

{

int testValue3 = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",길이,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+j);

if (testValue3 <0 && NumOrders < maxorders) return(LONG);

}

반환(없음);

}

}

}

}

사유: