코딩 도움말 - 페이지 157

 
mladen:
크리스토프

그렇게하면 Decimals 변수가 정상이어야합니다.

어쨌든 주문(부분) 마감에 실패한 경우 어떤 오류 코드가 나타나는지 확인하십시오.

믈라덴,

힌트를 주셔서 감사합니다.

문제는 오류 메시지가 없다는 것입니다. 작동하지 않을 때는 PartialTP 함수 도 호출되지 않은 것처럼 보입니다. 다른 경우 - 일반적으로 EA가 다시 시작된 후 첫 번째 주문에서 - 잘 작동합니다.

변수 중 하나가 0 값으로 돌아가지 않거나 이와 유사한 것으로 생각했지만 여전히 버그를 찾을 수 없습니다.

 
chrisstoff:
믈라덴,

힌트를 주셔서 감사합니다.

문제는 오류 메시지가 없다는 것입니다. 작동하지 않을 때는 PartialTP 함수도 호출되지 않은 것처럼 보입니다. 다른 경우 - 일반적으로 EA가 다시 시작된 후 첫 번째 주문에서 - 잘 작동합니다.

변수 중 하나가 0 값으로 돌아가지 않거나 이와 유사한 것으로 생각했지만 여전히 버그를 찾을 수 없습니다.

크리스토프

죄송하지만 부분 코드로는 더 이상 도움을 드릴 수 없습니다

당신이 설명하는 것은 코드를 디버그할 필요가 있다는 것을 의미합니다. 그리고 그것은 일종의 제어점 을 사용하는 동안 실행해야만 수행할 수 있습니다.

 
mladen:
크리스토프

죄송하지만 부분 코드로는 더 이상 도움을 드릴 수 없습니다

당신이 설명하는 것은 코드를 디버그할 필요가 있다는 것을 의미합니다. 그리고 그것은 일종의 제어점을 사용하는 동안 실행해야만 수행할 수 있습니다.

고마워, 믈라덴.

코드에서 문제가 발견되지 않았으니 안심할 수 있습니다.

코드의 관련 부분이 모두 게시된 것 같아서 다른 곳에서 버그를 찾아야 합니다.

 
mladen:
호크87

해당 문제의 해결 방법은 게시물 위의 게시물을 참조하세요.

이에 대한 완전한 코드는 다음과 같습니다.

int TotalOrders = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

말든,

계정 잔액 의 일정 비율로 로트 크기를 열려면 어떻게 코딩합니까?

예시:

내 계정 잔액 $500,

5%로 로트 크기를 열면 자동으로 계산되고 $0.25 랏, TP=10 SL=20을 엽니다.

그것을 코딩하는 방법?

감사해요.

 
hock87:
말든,

내 계정 잔액의 일정 비율로 로트 크기를 열려면 어떻게 코딩합니까?

예시:

내 계정 잔액 $500,

5%로 로트 크기를 열면 자동으로 계산되고 $0.25 랏, TP=10 SL=20을 엽니다.

그것을 코딩하는 방법?

감사해요.

이를 위해 다음과 같은 기능 을 사용할 수 있습니다.

double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

추신: stopLoss는 이미 pips/points 단위로 함수에 전달되어야 합니다(정수 값이 아님).

 
mladen:
이를 위해 다음과 같은 기능을 사용할 수 있습니다.
double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

추신: stopLoss는 이미 pips/points 단위로 함수에 전달되어야 합니다(정수 값이 아님).

고마워, 믈라덴.

하지만 주문 코드를 구매하기 위해 코드를 합성하지 못했습니다.

많은 오류와 경고가 나타납니다.

그것을 합성하는 방법?

감사해요.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
 
hock87:
고마워, 믈라덴.

하지만 주문 코드를 구매하기 위해 코드를 합성하지 못했습니다.

많은 오류와 경고가 나타납니다.

그것을 합성하는 방법?

감사해요.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}

다음과 같이 시도하십시오(지금 테스트했으며 작동함).

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int init() { return(0); }

int deinit() { return(0); }

int start()

{

int TotalOrders = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point*MathPow(10,Digits%2));

prof=(Ask+profsize*Point*MathPow(10,Digits%2));

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
파일:
_test_1.mq4  1 kb
test_1.gif  78 kb
 

친애하는 mladen과 씨. 도구 pls,

미리 정의된 조건을 충족하는 3개 또는 4개의 지표 신호와 같은 특정 조건에 따라 신호를 제공하는 ea를 생성할 수 있습니까?

ea가 구매 신호를 보내길 원합니다.

에마 8 크로스 에마 21

0보다 큰 qqe

비 지연 ma는 녹색입니다

그리고 촛불은 ichimoku 구름 위에 있습니다

EA는 거래를 개시해서는 안 되며 명시된 조건이 충족될 때 신호를 보내야 합니다.

 

고마워, 믈라덴.

나는 그것을 시도했다.

하지만 여전히 $0.1로 제비를 뽑습니다.

하고싶다 계정 잔액 의 일정 비율로 로트 크기를 엽니다 .

예: 계정 잔액이 $500입니다.

5%로 로트 크기를 열면 자동 계산되고 $0.25 랏, TP=10 SL=20을 엽니다.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = $ 0.25

그런 다음 $0.25 랏과 TP=10 SL=20을 자동으로 엽니다.

그것을 만드는 방법?

감사해요.

 
hock87:
고마워, 믈라덴.

나는 그것을 시도했다.

하지만 여전히 $0.1로 제비를 뽑습니다.

내 계정 잔액의 일정 비율로 로트 크기를 열고 싶습니다 .

예: 계정 잔액이 $500입니다.

5%로 로트 크기를 열면 자동 계산되고 $0.25 랏, TP=10 SL=20을 엽니다.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = $ 0.25

그런 다음 $0.25 랏과 TP=10 SL=20을 자동으로 엽니다.

그것을 만드는 방법?

감사해요.

첨부된 것과 같이

파일:
_test_2.mq4  2 kb