이니시에이터를 작성하려고 합니다. 왜 다시 그리는지 이해가 안됩니다. 또한 렌더링에만 그립니다. 도와주세요, 제발. 저는 프로그래밍의 초보자입니다.
#속성 표시기_차트_창 #속성 표시기_버퍼 2 #property indicator_color1 마젠타색 #property indicator_color2 빨간색 //---- 입력 매개변수 외부 intN; datetime some_time=D'1971.01.11 00:00'; datetime some_time_1=D'1971.01.11 00:00'; //---- 버퍼 이중 RLB_Buffer[]; 이중 RLB_Buffer_1[]; 이중 Real_Line_Balance=0,x=0,last_high,last_low,RLB,Real_Line_Balance_1=0,x1=0,last_high_1,last_low_1,RLB_1; bool dirlong, 먼저; int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1; //+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 초기화 기능 | //+----------------------------------------------- --------------------+ 정수 초기화() { 문자열 short_name; //---- 표시줄 SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0, 159); SetIndexBuffer(0,RLB_Buffer); //----; SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1, 159); SetIndexBuffer(1,RLB_Buffer_1); 리턴(0); } //+----------------------------------------------- --------------------+ //| | //+----------------------------------------------- --------------------+ 정수 시작() { int counted_bars=IndicatorCounted(); 주석(i," ",ii); //---- if(막대 < 3) 리턴(0); //------------ first_t_bar=iBarShift(NULL,0,some_time,false); // 상승 추세의 시작 막대 now_bar=iBarShift(NULL,0,TimeCurrent(),false); //마지막 막대, 맨 오른쪽 i=counted_bars-first_t_bar+1; //----------- first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //하향 추세 시작 막대 now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //마지막 막대, 맨 오른쪽 ii=counted_bars-first_t_bar_1+1; // if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; // 시각화인 경우 추세 시작 막대 if(counted_bars == 0) { 첫 번째 = 거짓; i=first_t_bar+1; ii=first_t_bar_1+1; } //------------ // 빼기 계산된 막대 dirlong=거짓; if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true; if(dirlong == true) // 추세가 상승한 경우 { 동안(i>=0) { x++; // 추세 시작부터 막대 카운터 Real_Line_Balance=닫기[i+5]; // 추세에서 절의 합계 계산 RLB=Real_Line_Balance; if(RLB<낮음[1]) RLB_Buffer[i]=Real_Line_Balance; //가격이 맨 위에 있는 경우에만 라인을 표시합니다. //------- if(RLB>Close[i]&& x>50) //가격이 위에서 아래로 RLB를 넘으면 { bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//그러면 다음 사이의 TOP을 정의합니다. //마지막 막대 및 추세 시작 some_time_1=시간[bar_high]; //하락 추세의 새로운 시작 x=0; //트렌드의 시작 부분에서 바 카운터 재설정 Real_Line_Balance=0; } 나--; }// 동안 //------- }//디르롱 //------------------------ //------------------------ if(dirlong == false) // 추세가 다운된 경우 { 동안(ii>=0) { x1++; // 추세 시작부터 막대 카운터 Real_Line_Balance_1=닫기[ii+10]; // 추세에서 절의 합계 계산 RLB_1=실제_라인_균형_1; if(RLB_1>높음[1]) RLB_Buffer_1[ii]=Real_Line_Balance_1; //------- if(RLB_1<Close[ii]&& x1>50) //가격이 위에서 아래로 RLB를 넘은 경우 { bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//그런 다음 우리는 사이의 LOWEST를 결정합니다. //마지막 막대 및 추세 시작 some_time=시간[bar_low]; // 상승세의 새로운 시작 x1=0; //트렌드의 시작 부분에서 바 카운터 재설정 Real_Line_Balance_1=0; } ii--; }//동안 //------- }//디르롱 //------------------------ 리턴(0); } //+----------------------------------------------- ------ --------------------+
문제는 다음과 같습니다. 고문은 지속적으로 주문을 다시 엽니다. 구매 신호가 있습니다. 그는 주문을 연 다음 이익으로 닫고 조건은 여전히 보존되며 다시 엽니 다. 다른 신호 후에만 열리는 것이 필요합니다.
일반적인 구매 및 정산 카운터의 도움으로 제거 할 수 있다고 생각했습니다 - 구매 주문이 카운터 +1을 열었고 카운터가 0보다 큰 동안 새 구매를 열 수 없으면 카운터는 재설정 만 해결된 후. 하지만 왜 작동하지 않는지 이유를 알 수 없습니까??? 논리 좀 봐, 내가 어딘가에 잘못된거야?? mql 미터는 정확히 비슷한 문제에 직면했습니다.
예를 들어 개장 시간의 파일에 쓰는 것과 같은 많은 옵션이 있지만 열린 주문을 스크롤하고 수명을 비교하는 것이 더 쉽습니다.
그리고 일반적으로 각 개별 직책에 대해 "특정 기간 후에 모든 열린 직위를 청산해야 합니다"라고 바꾸어 말하십시오(질문을 이해한 대로).
스크립트는 테스터의 시간을 쉽게 찾지 못하지만(지표는 찾을 수 있음) 시작 부분에 테스트 어드바이저를 첨부할 수 있습니다.
빠르고 안정적으로...
이니시에이터를 작성하려고 합니다. 왜 다시 그리는지 이해가 안됩니다. 또한 렌더링에만 그립니다. 도와주세요, 제발. 저는 프로그래밍의 초보자입니다.
#속성 표시기_차트_창
#속성 표시기_버퍼 2
#property indicator_color1 마젠타색
#property indicator_color2 빨간색
//---- 입력 매개변수
외부 intN;
datetime some_time=D'1971.01.11 00:00';
datetime some_time_1=D'1971.01.11 00:00';
//---- 버퍼
이중 RLB_Buffer[];
이중 RLB_Buffer_1[];
이중 Real_Line_Balance=0,x=0,last_high,last_low,RLB,Real_Line_Balance_1=0,x1=0,last_high_1,last_low_1,RLB_1;
bool dirlong, 먼저;
int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1;
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
문자열 short_name;
//---- 표시줄
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 159);
SetIndexBuffer(0,RLB_Buffer);
//----;
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 159);
SetIndexBuffer(1,RLB_Buffer_1);
리턴(0);
}
//+----------------------------------------------- --------------------+
//| |
//+----------------------------------------------- --------------------+
정수 시작()
{
int counted_bars=IndicatorCounted();
주석(i," ",ii);
//----
if(막대 < 3)
리턴(0);
//------------
first_t_bar=iBarShift(NULL,0,some_time,false); // 상승 추세의 시작 막대
now_bar=iBarShift(NULL,0,TimeCurrent(),false); //마지막 막대, 맨 오른쪽
i=counted_bars-first_t_bar+1;
//-----------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //하향 추세 시작 막대
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //마지막 막대, 맨 오른쪽
ii=counted_bars-first_t_bar_1+1;
// if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; // 시각화인 경우 추세 시작 막대
if(counted_bars == 0)
{
첫 번째 = 거짓;
i=first_t_bar+1;
ii=first_t_bar_1+1;
}
//------------ // 빼기 계산된 막대
dirlong=거짓;
if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true;
if(dirlong == true) // 추세가 상승한 경우
{
동안(i>=0)
{
x++; // 추세 시작부터 막대 카운터
Real_Line_Balance=닫기[i+5]; // 추세에서 절의 합계 계산
RLB=Real_Line_Balance;
if(RLB<낮음[1]) RLB_Buffer[i]=Real_Line_Balance; //가격이 맨 위에 있는 경우에만 라인을 표시합니다.
//-------
if(RLB>Close[i]&& x>50) //가격이 위에서 아래로 RLB를 넘으면
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//그러면 다음 사이의 TOP을 정의합니다.
//마지막 막대 및 추세 시작
some_time_1=시간[bar_high]; //하락 추세의 새로운 시작
x=0; //트렌드의 시작 부분에서 바 카운터 재설정
Real_Line_Balance=0;
}
나--;
}// 동안
//-------
}//디르롱
//------------------------
//------------------------
if(dirlong == false) // 추세가 다운된 경우
{
동안(ii>=0)
{
x1++; // 추세 시작부터 막대 카운터
Real_Line_Balance_1=닫기[ii+10]; // 추세에서 절의 합계 계산
RLB_1=실제_라인_균형_1;
if(RLB_1>높음[1]) RLB_Buffer_1[ii]=Real_Line_Balance_1;
//-------
if(RLB_1<Close[ii]&& x1>50) //가격이 위에서 아래로 RLB를 넘은 경우
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//그런 다음 우리는 사이의 LOWEST를 결정합니다.
//마지막 막대 및 추세 시작
some_time=시간[bar_low]; // 상승세의 새로운 시작
x1=0; //트렌드의 시작 부분에서 바 카운터 재설정
Real_Line_Balance_1=0;
}
ii--;
}//동안
//-------
}//디르롱
//------------------------
리턴(0);
}
//+----------------------------------------------- ------ --------------------+
말도 안되는 소리야. 대신에
i=counted_bars-first_t_bar+1;
셀 수 있는 막대를 셀 수 있는 디자인을 넣습니다. 모든 것이 정상적으로 진행되기 시작했습니다. IndicatorCounted(); 글리치 또는 내가 뭔가를 따라 잡고 있지 않습니다 ...
마감된 주문의 상태를 변수에 알리는 방법은 무엇입니까?
말도 안되는 소리야. 대신에
i=counted_bars-first_t_bar+1;
셀 수 있는 막대를 셀 수 있는 디자인을 넣습니다. 모든 것이 정상적으로 진행되기 시작했습니다. IndicatorCounted(); 버그인지 아니면 제가 놓치고 있는 부분인지...
while(i>=0)을 사용합니다. 즉, 새 촛대가 나타날 때 i=1입니다(물론 이전 촛대의 데이터는 고정 데이터에 따라 한 번 계산됨).
왜 some_time=D'1971.01.11 00:00'을 입력합니까? Bars를 사용 하면 IndicatorCounted가 버그가 아닙니다(오류는 아마도 이 first_t_bar 때문일 것입니다) .
귀하의 알고리즘과 귀하가 처리합니다.
" 저는 프로그래밍에 익숙하지 않습니다. " 2007년부터)).
마감된 주문의 상태를 변수에 알리는 방법은 무엇입니까?
:)
+ ...
비탈류카의 경우:
https://docs.mql4.com/ru/trading/OrderStopLoss
https://docs.mql4.com/en/trading/OrderTakeProfit
문제는 다음과 같습니다. 고문은 지속적으로 주문을 다시 엽니다. 구매 신호가 있습니다. 그는 주문을 연 다음 이익으로 닫고 조건은 여전히 보존되며 다시 엽니 다. 다른 신호 후에만 열리는 것이 필요합니다.
일반적인 구매 및 정산 카운터의 도움으로 제거 할 수 있다고 생각했습니다 - 구매 주문이 카운터 +1을 열었고 카운터가 0보다 큰 동안 새 구매를 열 수 없으면 카운터는 재설정 만 해결된 후. 하지만 왜 작동하지 않는지 이유를 알 수 없습니까??? 논리 좀 봐, 내가 어딘가에 잘못된거야?? mql 미터는 정확히 비슷한 문제에 직면했습니다.