참고: 배열을 통한 솔루션(표시기에서 First[], Second[] 및 Third[] 배열로 마지막 3개 값 복사) - 두 iMA의 교차 - OnTick():
//--- We look for crossing of two indicatorsdouble First[];
double Second[];
double Third[];
ArraySetAsSeries (First, true ); // index [0] - the most right bar on a chartsArraySetAsSeries (Second, true ); // index [0] - the most right bar on a chartsArraySetAsSeries (Third, true ); // index [0] - the most right bar on a chartsint buffer_num= 0 ; // indicator buffer number int start_pos= 0 ; // start position int count= 3 ; // amount to copy if (!iMAGet(handle_iMA_First,buffer_num,start_pos,count,First))
return ;
if (!iMAGet(handle_iMA_Second,buffer_num,start_pos,count,Second))
return ;
if (InpFilterMA)
if (!iMAGet(handle_iMA_Third,buffer_num,start_pos,count,Third))
return ;
//--- step 1: check in the arrays bars [0] and [1]if (First[ 0 ]>Second[ 0 ] && First[ 1 ]<Second[ 1 ]) // buy
{
if (InpFilterMA)
if (Third[ 0 ]>=First[ 0 ])
return ;
if (! RefreshRates ())
{
PrevBars= iTime ( 1 );
return ;
}
double sl=m_symbol. Bid ()-InpStopLoss*m_adjusted_point;
double tp=m_symbol. Ask ()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return ;
}
elseif (First[ 0 ]<Second[ 0 ] && First[ 1 ]>Second[ 1 ]) // sell
{
if (InpFilterMA)
if (Third[ 0 ]<=First[ 0 ])
return ;
if (! RefreshRates ())
{
PrevBars= iTime ( 1 );
return ;
}
double sl=m_symbol. Ask ()+InpStopLoss*m_adjusted_point;
double tp=m_symbol. Bid ()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return ;
}
//--- step 2: on a step of 1 crossing haven't found. check in the arrays bars [0] and [2]if (First[ 0 ]>Second[ 0 ] && First[ 2 ]<Second[ 2 ]) // buy
{
//--- search in historyif (SearchPositions( iTime (start_pos+ 3 ), iTime (start_pos)))
return ;
if (! RefreshRates ())
{
PrevBars= iTime ( 1 );
return ;
}
double sl=m_symbol. Bid ()-InpStopLoss*m_adjusted_point;
double tp=m_symbol. Ask ()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return ;
}
elseif (First[ 0 ]<Second[ 2 ] && First[ 1 ]>Second[ 2 ]) // sell
{
//--- search in historyif (SearchPositions( iTime (start_pos+ 3 ), iTime (start_pos)))
return ;
if (! RefreshRates ())
{
PrevBars= iTime ( 1 );
return ;
}
double sl=m_symbol. Ask ()+InpStopLoss*m_adjusted_point;
double tp=m_symbol. Bid ()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return ;
}
귀하의 경우(한 번에 하나의 값을 가져옴) 루프는 다음과 같이 보일 것입니다.
int signal= 0 ; // "-1" -> Sell; "0" -> Not signal; "1" -> Buydouble MA1_curr=iMAGet(handle_iMA_1, 0 ); // the value of the 1st MA on i bardouble MA2_curr=iMAGet(handle_iMA_2, 0 ); // the value of the 1st MA on i barfor ( int i= 0 ;i< 100 ;i++)
{
double MA1_prev=iMAGet(handle_iMA_1,i+ 1 ); // the value of the 1st MA on i+1 th bardouble MA2_prev=iMAGet(handle_iMA_2,i+ 1 ); // the value of the 1st MA on i+1 th bar//---
signal= 0 ; // "-1" -> Sell; "0" -> Not signal; "1" -> Buyif (MA1_prev<MA2_prev && MA1_curr>MA2_curr)
signal= 1 ;
elseif (MA1_prev>MA2_prev && MA1_curr<MA2_curr)
signal=- 1 ;
//---
MA1_curr=MA1_prev;
MA2_curr=MA2_prev;
}
#property indicator_level1 30 - 매개변수를 설정합니다. 차트에 지표를 로드할 때 . 그것은 나를 재설정합니다.
프로그램 코드에서 ColorBuffer[] 함수를 사용하여 라인이 이 매개변수 아래로 떨어지면 라인을 다른 색상으로 변경합니다.
그리고 문제가 생겼습니다. 지표를 입력하고 이 매개변수를 다른 매개변수로 변경하면 지표를 로드할 때에도 필요한 곳에 레벨선이 다시 그려지고 지표 자체가 이전에 설정한 매개변수에 따라 모든 것을 계산합니다.
프로그램 실행 중에 변경할 수 있도록 이 수준에 어떻게 액세스해야 합니까?
- 이미 매개변수를 확인하려고 했습니다. 그리고 전체 표시기 회로를 다시 계산하십시오.
Vseravno는 내가 필요에 따라 다시 그리기를 원하지 않습니다!
돕다!
:)
시퀀싱
RSI.mqh
#속성 표시기_레벨1 30
#속성 표시기_레벨2 70
Calculaite 설명 코드에서. 전체를 실행하는 마지막 부분에 For 선이 이 수준 아래에 있으면 선의 색상을 변경하는 기능을 추가했습니다. ExtColorsBuffer[i]=0; if (ExtRSIBuffer [i]> indicator_level2&& indicator_levelcolor!=NULL) { ExtColorsBuffer[i]=1; } if (ExtRSIBuffer [i]< indicator_level1&& indicator_levelcolor!=NULL) { ExtColorsBuffer[i]=2;
예상 결과
그림과 동일할 것으로 예상되지만 인디케이터 사용 중 설정에 들어가서 Indicator_level1/2 레벨을 변경하면 인디케이터가 다시 그려지므로 선이 레벨을 넘으면 색이 변합니다. 그리고 나는 여전히 초기 수준에서 그것을 가지고 있습니다 :(
#property indicator_level1 30 - 매개변수를 설정합니다. 차트에 지표를 로드할 때 . 그것은 나를 재설정합니다.
프로그램 코드에서 ColorBuffer[] 함수를 사용하여 라인이 이 매개변수 아래로 떨어지면 라인을 다른 색상으로 변경합니다.
그리고 문제가 생겼습니다. 지표를 입력하고 이 매개변수를 다른 매개변수로 변경하면 지표를 로드할 때에도 필요한 곳에 레벨선이 다시 그려지고 지표 자체가 이전에 설정한 매개변수에 따라 모든 것을 계산합니다.
프로그램 실행 중에 변경할 수 있도록 이 수준에 어떻게 액세스해야 합니까?
- 이미 매개변수를 확인하려고 했습니다. 그리고 전체 표시기 회로를 다시 계산하십시오.
Vseravno는 내가 필요에 따라 다시 그리기를 원하지 않습니다!
돕다!
:)
시퀀싱
RSI.mqh
#속성 표시기_레벨1 30
#속성 표시기_레벨2 70
Calculaite 설명 코드에서. 전체를 실행하는 마지막 부분에 For 선이 이 수준 아래에 있으면 선의 색상을 변경하는 기능을 추가했습니다. ExtColorsBuffer[i]=0; if (ExtRSIBuffer [i]> indicator_level2&& indicator_levelcolor!=NULL) { ExtColorsBuffer[i]=1; } if (ExtRSIBuffer [i]< indicator_level1&& indicator_levelcolor!=NULL) { ExtColorsBuffer[i]=2;
예상 결과
그림과 같을 것으로 예상되지만 인디케이터 사용 중 설정에 들어가서 Indicator_level1/2 레벨을 변경하면 인디케이터가 다시 그려지므로 선이 레벨을 넘으면 색이 변합니다. 그리고 나는 여전히 초기 수준에서 그것을 가지고 있습니다 :(
추가 정보
...
IndicatorSetInteger ( INDICATOR_LEVELCOLOR , 0 , clrCrimson ); // Поменяет цвет самого первого по счёту уровня на цвет CrimsonIndicatorSetInteger ( INDICATOR_LEVELCOLOR , 1 , clrDeepSkyBlue ); // Поменяет цвет второго по счёту уровня на цвет DeepSkyBlue
감사해요!
/
.
아하, 배열을 통하지 않고 똑같이 결정하셨습니다.
참고: 배열을 통한 솔루션(표시기에서 First[], Second[] 및 Third[] 배열로 마지막 3개 값 복사) - 두 iMA의 교차 - OnTick():
귀하의 경우(한 번에 하나의 값을 가져옴) 루프는 다음과 같이 보일 것입니다.
MA1_curr - 막대 #i의 MA1 표시기 값, MA1_prev - 막대 #i+1의 MA1 표시기 값
MA2_curr - 막대 #i의 MA2 표시기 값, MA2_prev - 막대 #i+1의 MA2 표시기 값
크로스오버를 얻을 때(신호 변수가 "-1" 또는 "1"과 같음) - i의 값은 크로스오버가 발생한 막대의 번호가 됩니다.
이것은 가장 간단한 교차 검색 알고리즘이지만 가장 정확하지는 않습니다.
예, 당신은 배열을 통하지 않고 똑같이 결정했습니다 ...
감사합니다. 다른 Expert Advisor MA Cross 가 예시로 사용되었습니다.
그 중 3, 5, ... n바를 넘은 후 진입을 하고 싶습니다.
귀하의 경우(한 번에 하나의 값을 가져옴) 루프는 다음과 같이 보일 것입니다.
교차로가 발견될 때 루프에서 출구가 없는 이유는 무엇입니까?
이러한 조건을 루프 외부에 배치할 수 있습니까?
.
안녕하세요. 견적 내역을 가져오기 위해 Finam 서버 또는 MFD.ru에서 내역 데이터를 다운로드하는 형식을 알려주십시오. 전혀 할 수 없습니다 .. txt에서 csv로만 저장할 수 있습니다.
안녕하세요. 견적 내역을 가져오기 위해 Finam 서버 또는 MFD.ru에서 내역 데이터를 다운로드하는 형식을 알려주십시오. 전혀 할 수 없습니다 .. txt에서 csv로만 저장할 수 있습니다.
MetaTrader 5에서 아무 것도 다운로드할 필요가 없습니다. :) - 거래 서버에 연결하는 즉시 실제 틱 기록에 액세스할 수 있습니다. CopyTicks 를 바라보세요
MetaTrader 5에서 아무 것도 다운로드할 필요가 없습니다. :) - 거래 서버에 연결하는 즉시 실제 틱 기록에 액세스할 수 있습니다. CopyTicks 를 바라보세요
10년 동안 러시아 주식에 대한 몇 분이 필요합니다.. 제 중개인이 그렇게 많이 주지도 않고 있을 것 같지도 않습니다.
문제에 대한 설명
시퀀싱
RSI.mqh
#속성 표시기_레벨1 30
#속성 표시기_레벨2 70
Calculaite 설명 코드에서. 전체를 실행하는 마지막 부분에 For 선이 이 수준 아래에 있으면 선의 색상을 변경하는 기능을 추가했습니다.
ExtColorsBuffer[i]=0;
if (ExtRSIBuffer [i]> indicator_level2&& indicator_levelcolor!=NULL) {
ExtColorsBuffer[i]=1;
}
if (ExtRSIBuffer [i]< indicator_level1&& indicator_levelcolor!=NULL) {
ExtColorsBuffer[i]=2;
예상 결과
그림과 동일할 것으로 예상되지만 인디케이터 사용 중 설정에 들어가서 Indicator_level1/2 레벨을 변경하면 인디케이터가 다시 그려지므로 선이 레벨을 넘으면 색이 변합니다. 그리고 나는 여전히 초기 수준에서 그것을 가지고 있습니다 :(
추가 정보
...
5.0 빌드 1755
문제에 대한 설명
시퀀싱
RSI.mqh
#속성 표시기_레벨1 30
#속성 표시기_레벨2 70
Calculaite 설명 코드에서. 전체를 실행하는 마지막 부분에 For 선이 이 수준 아래에 있으면 선의 색상을 변경하는 기능을 추가했습니다.
ExtColorsBuffer[i]=0;
if (ExtRSIBuffer [i]> indicator_level2&& indicator_levelcolor!=NULL) {
ExtColorsBuffer[i]=1;
}
if (ExtRSIBuffer [i]< indicator_level1&& indicator_levelcolor!=NULL) {
ExtColorsBuffer[i]=2;
예상 결과
그림과 같을 것으로 예상되지만 인디케이터 사용 중 설정에 들어가서 Indicator_level1/2 레벨을 변경하면 인디케이터가 다시 그려지므로 선이 레벨을 넘으면 색이 변합니다. 그리고 나는 여전히 초기 수준에서 그것을 가지고 있습니다 :(
추가 정보
...
5.0 빌드 1755
문제에 대한 설명
그리고 별도의 주제에 대한 답변이 마음에 들지 않은 것은 무엇입니까?
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
도움이 필요합니다. MQL5 #property indicator_level
알렉세이 빅토 로프 , 2018.01.31 09:06
이고르, 우리 둘 다 틀렸어. 나는 즉시 문제를 이해하지 못했습니다 ...
#property 지시문 외에도 함수를 사용하여 표시기 수준을 설정할 수 있습니다.
따라서 이 레벨은 표시기의 입력 매개변수에서 설정해야 합니다. 이 경우 레벨은 주어진 값에 따라 그려지며 이 값에 따라 레벨도 변경되어야 합니다.
테스트 옵션
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
오류, 버그, 질문
알렉세이 로디오노프 , 2018.02.06 16:31
여기서 흥미로운 것을 발견했습니다.
pintf에서 % G를 제거하면 값이 표시되지 않지만 Print에서는 % G 없이 표시됩니다.
Print에서 잔액 값은 10000.0이고 printf에서는 정수 10000입니다.
저는 Print와 printf의 차이점이 무엇인지, 그리고 가장 중요한 것은 % G 없이 표시되지 않는 이유에 대한 질문에 더 관심이 있습니다. 설명서의 내용을 이해하지 못했습니다.
동료들을 환영합니다! 그런 질문이 있습니다. "forex money" 포럼의 서명에 신호 위젯 을 삽입하려고 하는데 거기에서 비활성화되어 있거나 HTML이 차단되어 있습니다. URL로 변환할 수 있는 방법이 있습니까? 정상적으로 삽입되어 표시되기 때문입니다.
다음은 <iframe frameborder="0" width="220" height="140" src="https://www.mql5.com/ru/signals/widget/signal/328l?t=green">< 코드입니다. / 아이프레임>