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

 

...

LastProfitHigh는 어떻게 선언됩니까?

함수 본문 내에서 선언된 경우(예: start()) 정적으로 선언하지 않으면 항상 값이 변경됩니다. 따라서 함수 내에서 로컬로 선언된 경우 전역 범위에서 선언하거나 정적 변수로 선언하면 두 틱 사이의 값을 "상속"합니다.

aud4xtrader:
안녕하세요 여러분,

저는 코딩이 처음이고 언어와 구문을 천천히 배우고 있지만 MT4가 변수를 업데이트하는 방법에 대한 질문이 생겼습니다.

나는 현재 열려 있는 거래가 가지고 있는 가장 높은 이익을 표시하는 간단한 EA를 코딩하려고 시도했으며 새로운 최고에 도달한 경우에만 업데이트해야 하지만 발생하는 일은 이익만큼 금액이 위아래로 움직이고 있다는 것입니다. 코드 논리에서 내 오류를 보는 것 같습니다.

선택한 거래가 아직 열려 있는지 확인합니다.

t_CloseTime=주문 닫기 시간(); //주문이 완료되지 않은 경우 0을 반환합니다.

if(t_CloseTime==0) //0이 아니면 주문이 종료됩니다.

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();

if(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;

}//엔디프

따라서 논리가 맞다면 이 변수 "LastProfitHigh"가 위아래로 움직이는 이유는 무엇입니까?...

당신의 도움을 주셔서 감사합니다.
 

코딩을 처음 접하는 사람

mladen:
LastProfitHigh는 어떻게 선언됩니까? 함수 본문 내에서 선언된 경우(예: start()) 정적으로 선언하지 않으면 항상 값이 변경됩니다. 따라서 함수 내에서 로컬로 선언된 경우 전역 범위에서 선언하거나 정적 변수로 선언하면 두 틱 사이의 값을 "상속"합니다.

안녕하세요 mladen님

이제 변수를 start() 함수 외부로 이동하고 "정적 이중"으로 선언했습니다. 답변 덕분에 손가락이 교차되어 올바르게 표시됩니다.

코드의 논리가 올바르게 명시되어 있습니까??

 

aud4xtrader

논리는 괜찮아

변수를 시작 부분 외부로 이동하면 변수를 정적으로 선언할 필요가 없습니다( 함수 본문 외부에 있을 때 자동으로 전역 변수가 되며 전체 코드를 통해 "볼 수 있음"). 변수를 유지하려면 일부 함수에 로컬이고 여전히 이전 상태(예: 이전 틱의 상태)를 유지한 다음 정적으로 선언합니다.

다음은 동일한 결과로 끝나는 두 가지 예입니다.

double previousProfit=0;

int start()

{

...

if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();

}

[/PHP]

or the same thing but with static variable

[PHP]

int start()

{

static double previousProfit=0;

...

if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();

}

aud4xtrader:
안녕하세요 mladen님

이제 변수를 start() 함수 외부로 이동하고 "정적 이중"으로 선언했습니다. 답변 덕분에 손가락이 교차되어 올바르게 표시됩니다.

코드의 논리가 올바르게 명시되어 있습니까??
 

코딩하는 방법?

그것은 훌륭하게 작동합니다. 훌륭한 도움에 다시 한 번 감사드립니다.

mladen:
aud4xtrader

논리는 괜찮아

변수를 시작 부분 외부로 이동하면 변수를 정적으로 선언할 필요가 없습니다(함수 본문 외부에 있을 때 자동으로 전역 변수가 되며 전체 코드를 통해 "볼 수 있음"). 변수를 유지하려면 일부 함수에 로컬이고 여전히 이전 상태(예: 이전 틱의 상태)를 유지한 다음 정적으로 선언합니다.

다음은 동일한 결과로 끝나는 두 가지 예입니다.

double previousProfit=0;

int start()

{

...

if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();

}

[/PHP]

or the same thing but with static variable

[PHP]

int start()

{

static double previousProfit=0;

...

if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();

}

 

완벽한! 감사해요.

mladen:
다음 2가지 기능을 사용해 보세요.
첫 번째는 이미 정확히 동일한 시가를 가진 주문이 있는지 확인하는 것입니다.

두 번째는 원하는 가격에서 nnn포인트 이내의 주문이 있는지 확인하는 것입니다.

가격이 같거나 현재 열려 있는 일부 주문의 가격과의 거리가 지정된 거리 이내이면 둘 다 true를 반환합니다.

bool existsAtSamePrice(int magicNumber, double price)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

 

코딩하는 방법?

안녕하세요 핍님

코드 스니펫 덕분에 사람들이 아이디어와 코딩 스타일을 공유할 수 있어 정말 좋습니다. 지식이 늘어남에 따라 당신과 mladen 같은 사람들에게서 교훈을 얻을 수 있습니다.

Pip:
완벽한! 감사해요.
 

안녕,

요청이 있습니다.

ObjectDelete 명령으로 "example"이라는 단어를 포함하는 모든 개체를 삭제하려면 코드를 어떻게 작성해야 합니까?

예를 들어

개체 이름

"예시 13241"

"예시 453623"

"예제"라는 단어가 포함된 모든 개체를 삭제하고 싶습니다.

매우 감사합니다

 

...

다음과 같이 사용하십시오(이렇게 하면 이름이 "Example"로 시작하는 모든 개체가 삭제됨).

string lookFor = "Example";

int lookForLength = StringLen(lookFor);

for (int i=ObjectsTotal()-1; i>=0; i--)

{

string objectName = ObjectName(i);

if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);

}

dasio:
안녕,

요청이 있습니다.

ObjectDelete 명령으로 "example"이라는 단어를 포함하는 모든 개체를 삭제하려면 코드를 어떻게 작성해야 합니까?

예를 들어

개체 이름

"예시 13241"

"예시 453623"

"예제"라는 단어가 포함된 모든 개체를 삭제하고 싶습니다.

매우 감사합니다
 
mladen:
다음과 같이 사용하십시오(이렇게 하면 이름이 "Example"로 시작하는 모든 개체가 삭제됨).
string lookFor = "Example";

int lookForLength = StringLen(lookFor);

for (int i=ObjectsTotal()-1; i>=0; i--)

{

string objectName = ObjectName(i);

if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);

}

감사합니다. 완벽합니다.

질문이 하나 더 있습니다^^.

길이가 선언된 차트에서 추세선 세그먼트를 만듭니다. 색상을 설정할 수 있고 괜찮습니다. 동일한 추세선에 1개 이상의 색상을 설정할 수 있는지 알고 싶습니다.

예를 들어 첫 번째 1/3 부분의 경우 한 색상, 2/3 부분의 경우 다른 색상, 3/3 부분의 경우 다른 색상입니다.

것이 가능하다?

감사합니다^^

 

..

요컨대, 개체를 언급하는 경우 대답은 아니오입니다. 이를 위해 3개의 객체를 생성해야 합니다.

이를 위해 버퍼를 사용하는 경우 3색 다시 칠하지 않는 선에 대해 5개의 그리기 버퍼 가 필요하며 그리기 버퍼가 8개뿐이므로 크게 제한됩니다.

dasio:
감사합니다. 완벽합니다.

질문이 하나 더 있습니다^^.

길이가 선언된 차트에서 추세선 세그먼트를 만듭니다. 색상을 설정할 수 있고 괜찮습니다. 동일한 추세선에 1개 이상의 색상을 설정할 수 있는지 알고 싶습니다.

예를 들어 첫 번째 1/3 부분의 경우 한 색상, 2/3 부분의 경우 다른 색상, 3/3 부분의 경우 다른 색상입니다.

것이 가능하다?

감사합니다^^
사유: