묻다! - 페이지 21

 
billworld2:
개체 이름 내에서 선택한 텍스트 문자열을 기반으로 개체를 삭제하는 방법이 있습니까?

다음은 예입니다.

datetime currentDay = StrToTime(Year()+"."+Month()+"."+Day()+" 00.00");

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

{

문자열 이름 = ObjectName(i);

if( ObjectGet(이름,OBJPROP_TIME1) < 현재일 && ObjectGet(이름,OBJPROP_TIME2) < 현재일 && ObjectGet(이름,OBJPROP_TIME3) < 현재일)

{

ObjectDelete(개체명(i));

반환(거짓);

}

}

반환(참);

 
billworld2:
내 학습 프로젝트 중 하나는 Strateg Tester의 차트 표시 옵션을 제어하는 tester.tpl을 사용자 정의하는 것입니다. 기본 차트 스타일은 시각화하기가 매우 어렵습니다. 그래서 새 템플릿을 만든 다음 모든 화살표를 더 매력적인 화살표로 바꾸는 스크립트를 만들었습니다.

그러나 화살표 이름에서 정보를 가져와 차트에 텍스트로 표시하고 싶습니다. 화살표 이름에는 "#62 Buy" 또는 "73 Sell Close"와 같은 항목이 포함됩니다. 그렇게 하면 차트를 보고 특정 거래 번호가 입력/종료된 시점을 정확히 볼 수 있습니다. 다른 플랫폼(예: TradeStation)과 마찬가지로 이것이 기본적으로 Strategy Tester에 포함되지 않는 이유를 모르겠습니다.

어쨌든 문제의 텍스트를 잡고 차트의 기존 화살표 바로 아래에 새 텍스트 개체를 삽입하고 싶습니다. 그러나 이것을 수행하는 방법을 알지 못합니다.

이 작업을 수행하려면 어떻게 해야 합니까?

감사해요

청구서

글쎄, 스크립트를 작성하거나 화살표 정보를 읽고 그 아래에 텍스트 레이블을 만드는 기능 을 사용할 수 있습니다. 그런 다음 새 화살표가 그려질 때마다 스크립트를 실행합니다. 또는 ea의 주요 기능 끝에 기능을 배치하십시오. 이 정보가 메타트레이더에서 표준이 아닌 이유를 모르겠지만 그런 종류의 기능을 코딩하는 것은 간단합니다.

 
Kalenzo:
U는 날짜 및 시간 함수에 대해 읽고 iBarShift 함수를 사용하여 지정된 시간 프레임에서 지정된 월의 첫 번째 막대의 이동을 가져와야 합니다.

나는 그것이 당신에게 사소한 일이어야한다는 것을 알고 있습니다. 제한된 문서(여기에 제공된 예제가 많지 않음)를 따르면 아직 이해하지 못하고 있습니다. 이 작업을 수행하는 방법에 대한 예를 친절하게 제공할 수 있습니까?

감사해요

청구서

 
Kalenzo:
글쎄, 스크립트를 작성하거나 화살표 정보를 읽고 그 아래에 텍스트 레이블을 만드는 기능을 사용할 수 있습니다. 그런 다음 새 화살표가 그려질 때마다 스크립트를 실행합니다. 또는 ea의 주요 기능 끝에 기능을 배치하십시오. 이 정보가 메타트레이더에서 표준이 아닌 이유를 모르겠지만 그런 종류의 기능을 코딩하는 것은 간단합니다.

감사합니다. 하지만 스크립트를 코딩하는 방법에 대해 특별히 고민하고 있습니다. 짧은 예를 제공할 시간이 있다면 가장 감사하겠습니다.

다시 한번 감사합니다.

청구서

 

내가 팔로우하고 있는지 확실하지 않습니다. 분명히 하자면, 저는 개체 이름을 기반으로 하위 문자열 일치를 수행하는 방법을 찾고 있습니다. 예를 들어 다른 텍스트와 함께 "-206" 문자열이 포함된 개체 그룹이 있다고 가정해 보겠습니다. 이름에 "-206"이 포함된 모든 개체를 찾아 삭제하고 싶습니다.

아래 예에서 나를 혼란스럽게 하는 것은 OBJPROP_TIME1, OBJPROP_TIME2 및 OBJPROP_TIME3와의 연결입니다. 나는 객체가 최대 3개의 시간 좌표 를 가질 수 있다는 것을 알고 있습니다. 나는 그것이 내가 하려고 하는 것과 어떻게 일치하는지 따르지 않습니다.

Kalenzo:
다음은 예입니다.

datetime currentDay = StrToTime(Year()+"."+Month()+"."+Day()+" 00.00");

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

{

문자열 이름 = ObjectName(i);

if( ObjectGet(이름,OBJPROP_TIME1) < 현재일 && ObjectGet(이름,OBJPROP_TIME2) < 현재일 && ObjectGet(이름,OBJPROP_TIME3) < 현재일)

{

ObjectDelete(개체명(i));

반환(거짓);

}

}

반환(참);
 
billworld2:
내가 팔로우하고 있는지 확실하지 않습니다. 분명히 하자면, 저는 개체 이름을 기반으로 하위 문자열 일치를 수행하는 방법을 찾고 있습니다. 예를 들어 다른 텍스트와 함께 "-206" 문자열이 포함된 개체 그룹이 있다고 가정해 보겠습니다. 이름에 "-206"이 포함된 모든 개체를 찾아 삭제하고 싶습니다. 아래 예에서 나를 혼란스럽게 하는 것은 OBJPROP_TIME1, OBJPROP_TIME2 및 OBJPROP_TIME3와의 연결입니다. 나는 물체가 최대 3개의 시간 좌표를 가질 수 있다는 것을 알고 있습니다. 나는 그것이 내가 하려고 하는 것과 어떻게 일치하는지 따르지 않습니다.

좋아, 이것을 시도하십시오:

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

{

문자열 이름 = ObjectName(i);

if(StringSubstr(이름, 0, 3)==206)

{

ObjectDelete(개체명(i));

}

}

개체 이름의 처음 세 글자가 206이면 개체가 삭제됩니다.

 
billworld2:
감사합니다. 하지만 스크립트를 코딩하는 방법에 대해 구체적으로 고민하고 있습니다. 짧은 예를 제공할 시간이 있다면 가장 감사하겠습니다.

다시 한번 감사합니다.

청구서

먼저 전역 변수를 선언합니다(스크립트의 경우 전역) int objectCount;

그런 다음 ea 프로세스의 끝에서 모든 객체(예: 이름으로 검색할 수 있음)

for(int i=0;i>=ObjectsTotal( OBJ_ARROW ) ;i++)

{

//객체 레이블이 존재하지 않으면 그리면 됩니다.

//기존 화살표의 이름과 식별을 위해 L 레이블을 추가합니다.

if(ObjectFind(ObjectName(i)+"L")== -1)

{

ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i),(OBJPROP_PRICE1+3*Point)));

// 그리고 그게 다야

}

}

그것은 단지 예일 뿐이며 가능한 버그를 확인할 시간이 없습니다 그러나 이것은 작동해야 하며 이제 올바른 방법을 알고 있습니다.

 

괜찮아. 알았다. 실제로 StringFind() 를 사용해야 했습니다 . 포인터 주셔서 감사합니다!

#property show_inputs

외부 문자열 문자열 이름 = "블라";

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

//| 스크립트 프로그램 시작 기능 |

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

정수 시작()

{

//----

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

if(StringFind(객체이름(i),문자열이름,0)>0)

{

ObjectDelete(개체명(i));

}

Kalenzo:
좋아, 이것을 시도하십시오:

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

{

문자열 이름 = ObjectName(i);

if(StringSubstr(이름, 0, 3)==206)

{

ObjectDelete(개체명(i));

}

}

개체 이름의 처음 세 글자가 206이면 개체가 삭제됩니다.
 

감사합니다. 하지만 작동하지 않습니다. 먼저 "i>=ObjectsTotal"을 "i<=ObjectsTotal"(오타)로 변경했습니다. 그런 다음 화살표 개체의 이름을 포함하는 새 텍스트 개체를 만들려는 다른 화살표 개체 를 만들고 있다는 것을 알았습니다. 어쨌든 아래 코드는 동일한 좌표에서 모두 겹치는 화살표 묶음(약 50개)을 생성합니다.

아직 이것에 패배했습니다. 다시 한 번 살펴볼 기회가 있다면 정말 감사하겠습니다. 분명히 하기 위해 텍스트 개체의 텍스트 설명이 화살표 개체의 이름과 동일한 기존 화살표 개체 아래에 배치되는 하나의 새 텍스트 개체를 만들려고 합니다.

청구서

Kalenzo:
먼저 전역 변수(스크립트의 경우 전역)를 선언합니다. int objectCount;

그런 다음 ea 프로세스의 끝에서 모든 객체(예: 이름으로 검색할 수 있음)

for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++)

{

//객체 레이블이 존재하지 않으면 그리면 됩니다.

//기존 화살표의 이름과 식별을 위해 L 레이블을 추가합니다.

if(ObjectFind(ObjectName(i)+"L")== -1)

{

ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i),(OBJPROP_PRICE1+3*Point)));

// 그리고 그게 다야

}

}

그것은 단지 예일 뿐이며 가능한 버그를 확인할 시간이 없습니다 하지만 이것은 작동해야 하며 이제 올바른 방법을 알고 있습니다.
 

포함 기반 객체 삭제

개체 이름 내의 선택 텍스트 문자열을 기반으로 개체를 삭제하는 방법이 있습니까?

편집: Kalenzo의 포인터로 알아냈습니다. 답변은 게시물 #212에 있습니다.