코딩 도움말 - 페이지 237

 

안녕하세요,

몇 가지 간단한 코딩 질문이 있습니다. 제 MT4가 MQL5로 마이그레이션된 것 같습니다.

특정 삭제 코드 블록이 더 이상 작동하지 않습니다.

아래에 오류 메시지가 표시됩니다.

'(' 개체 포인터가 필요합니다.

//+----------------------------------------------- --------------------------+//| 닫기 및 삭제 |

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

if(판매)if(반대닫기)닫기(OP_BUY);

if(구매)if(반대닫기)닫기(OP_SELL);

if(hidetp || hidesl){hideclose(OP_BUY);hideclose(OP_SELL);}

if(usetimeout && onetime){closetime(OP_BUY);closetime(OP_SELL);}

if(onecancelother){if(totalsell>0){delete(OP_BUYSTOP);delete(OP_BUYLIMIT);}if(totalbuy>0){delete(OP_SELLSTOP);delete(OP_SELLLIMIT);}}

아래에 오류 메시지가 표시됩니다. '삭제' - 예상되는 이름 및

'}' - 전역 범위에서 표현식이 허용되지 않습니다.

무효 삭제(int 유형){

if(OrdersTotal()>0){

for(i=OrdersTotal();i>=0;i--){

주문 선택(i,SELECT_BY_POS,MODE_TRADES);

if(유형!=6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==매직 && OrderType()==유형){

주문삭제(주문티켓());

}

}

if(유형==6){

if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP

|| 주문 유형()==OP_BUYLIMIT || 주문 유형()==OP_SELLLIMIT){

주문삭제(주문티켓());

}

}

}

}

}

누군가 도와주시겠습니까?

미리 감사합니다!

 

안녕하세요 거래자/코더 여러분!

누군가 여기에서 나를 도울 수 있기를 바랍니다.

주변에서 몇 가지 EA를 검색하고 시도했지만 여전히 원하는 것을 찾지 못했습니다.

아마도 나는 찾기 힘든 것을 찾고 있거나 최선을 다하지 않고 있습니다 :-)

선을 긋고 임시 채널을 만들어 SR 시스템도 거래합니다. 가격이 라인에 도달했을 때 포지션을 실행할 수 있는 것이 있습니까? 문제는 가격이 선에 도달할 때마다 포지션을 열 수 있어야 한다는 것입니다. 빨간색은 매도, 파란색은 구매, 노란색은 SL, 녹색은 TP입니다. 따라서 한 번만 거래하거나 OCO가 없습니다.

미리 감사합니다!!

파일:
sr.png  34 kb
 
daytrade:
안녕하세요 거래자/코더 여러분!

누군가 여기에서 나를 도울 수 있기를 바랍니다.

주변에서 몇 가지 EA를 검색하고 시도했지만 여전히 원하는 것을 찾지 못했습니다.

아마도 나는 찾기 힘든 것을 찾고 있거나 최선을 다하지 않고 있습니다 :-)

선을 긋고 임시 채널을 만들어 SR 시스템도 거래합니다. 가격이 라인에 도달했을 때 포지션을 실행할 수 있는 것이 있습니까? 문제는 가격이 선에 도달할 때마다 포지션을 열 수 있어야 한다는 것입니다. 빨간색은 매도, 파란색은 구매, 노란색은 SL, 녹색은 TP입니다. 따라서 한 번만 거래하거나 OCO가 없습니다.

미리 감사합니다!!

이 스레드에서 EA를 확인했습니까? https://www.mql5.com/en/forum/176382 ?

 

손절매 수정

모두들 안녕,

내 수정 중지 주문이 올바르게 작동하지 않는 이유를 아는 사람이 있습니까?

DonchianLowM5가 OrderOpenPrice 위로 이동할 때 DonchianLowM5와 OrderOpenPrice 사이에서 손절매가 매우 빠르게 움직입니다.

이것은 코드입니다(제대로 붙여넣는 방법을 몰라서 죄송합니다).

//--- 손절매의 움직임

if (OrdersTotal() > 0)

{

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUY)

{

if (OrderStopLoss() < OrderOpenPrice())

{

if (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), 녹색);

}

}

if (OrderStopLoss() > OrderOpenPrice())

{

if (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), 녹색);

}

}

if (OrderStopLoss() >= OrderOpenPrice())

{

if (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), 녹색);

}

}

}

어떤 것은 당혹스러웠다.

코드의 목적은 다음과 같습니다.

1. 손절매를 수정하여 M5 차트의 낮은 Donchian 채널을 OrderOpenPrice까지 추적합니다. 정지 손실은 OrderOpenPrice를 넘어 M5 차트의 Donchian 채널을 따르지 않는 것입니다. 손익분기점으로 이동합니다.

2. 때때로 큰 양초가 OrderOpenPrice 이상으로 닫히므로 코드의 두 번째 섹션은 다시 손익분기점으로 되돌리는 것입니다.

3. 손절매는 H4 차트의 Donchian 채널이 OrderOpenPrice를 초과하면 H4 차트의 Donchian Low를 추적하는 것입니다.

Donchian 채널은 다음과 같이 코딩됩니다.

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1));

나는 저널을 확인했고 손절매는 정확히 OrderOpenPrice로 수정됩니다(M5 차트에서 Donchian Low를 추적하게 하는 분수 pip에 의해서도 아래가 아닙니다.

이것이 무엇을 하는지 아는 사람이 있습니까?

 
crsnape@btinternet.com:
모두들 안녕,

내 수정 중지 주문이 올바르게 작동하지 않는 이유를 아는 사람이 있습니까?

DonchianLowM5가 OrderOpenPrice 위로 이동할 때 DonchianLowM5와 OrderOpenPrice 사이에서 손절매가 매우 빠르게 움직입니다.

이것은 코드입니다(제대로 붙여넣는 방법을 몰라서 죄송합니다).

//--- 손절매의 움직임

if (OrdersTotal() > 0)

{

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

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUY)

{

if (OrderStopLoss() < OrderOpenPrice())

{

if (DonchianLowM5 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowM5, OrderTakeProfit(), OrderExpiration(), 녹색);

}

}

if (OrderStopLoss() > OrderOpenPrice())

{

if (DonchianLowH4 <= OrderOpenPrice())

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), 녹색);

}

}

if (OrderStopLoss() >= OrderOpenPrice())

{

if (DonchianLowH4 > OrderStopLoss())

{

OrderModify(OrderTicket(), OrderOpenPrice(), DonchianLowH4, OrderTakeProfit(), OrderExpiration(), 녹색);

}

}

}

어떤 것은 당혹스러웠다.

코드의 목적은 다음과 같습니다.

1. 손절매를 수정하여 M5 차트의 낮은 Donchian 채널을 OrderOpenPrice까지 추적합니다. 정지 손실은 OrderOpenPrice를 넘어 M5 차트의 Donchian 채널을 따르지 않는 것입니다. 손익분기점으로 이동합니다.

2. 때때로 큰 양초가 OrderOpenPrice 이상으로 닫히므로 코드의 두 번째 섹션은 다시 손익분기점으로 되돌리는 것입니다.

3. 손절매는 H4 차트의 Donchian 채널이 OrderOpenPrice를 초과하면 H4 차트의 Donchian Low를 추적하는 것입니다.

Donchian 채널은 다음과 같이 코딩됩니다.

DonchianLowM5 = iLow(NULL, TimingChart, iLowest(NULL, TimingChart, MODE_LOW, TimingDNCPeriod, TimingChartShift + 1));

DonchianHighM5 = iHigh(NULL, TimingChart, iHighest(NULL, TimingChart, MODE_HIGH, TimingDNCPeriod, TimingChartShift + 1));

나는 저널을 확인했고 손절매는 정확히 OrderOpenPrice로 수정됩니다(M5 차트에서 Donchian Low를 추적하게 하는 분수 pip에 의해서도 아래가 아닙니다.

이것이 무엇을 하는지 아는 사람이 있습니까?

DonchianLowM5 및 DonchianLowH4를 사용하고 있습니다(다른 값이라고 가정함). 그것은 당신에게 문제를 일으킬 수 있습니다

 

안녕하세요 믈라덴님

답장을 보내 주셔서 감사합니다.

DonchianLowM5와 DonchianLowH4는 다른 값이지만 각각 고유한 목적이 있습니다. DonchianLowM5는 거래의 초기 단계에서 손익분기점을 맞추기 위해 SL을 조정하는 데 사용됩니다. DonchianLowH4는 SL을 트레일링 스톱 메커니즘으로 조정합니다. 이는 DonchianLowH4가 OrderOpenPrice를 능가하는 경우에만 적용됩니다.

이 문제를 조금 더 조사한 결과 문제가 발견되었을 수 있습니다. 나는 OrderModify 함수가 SL을 OrderOpenPrice로 정확히 재배치하는지 여부를 확인하고 싶었다. 하지만 그렇지 않습니다. 내 저널의 OrderOpenPrice는 1.12224, 5자리 정밀도로 명시되어 있지만 아래의 인쇄 기능 에는 OrderOpenPrice가 4자리에 불과하다고 나와 있습니다. 따라서 SL은 5가 아닌 이 4자리 숫자를 사용할 것입니다. 5자리를 사용하려면 이 숫자가 필요합니다.

ordermodify가 SL을 5자리의 orderopenprice로 정확히 조정하도록 하려면 어떻게 해야 합니까?

이것은 내 코드입니다.

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), 녹색);

Print("주문 개시 가격으로 수정된 SL ", OrderOpenPrice());

}

나는 이것을 시도했지만 작동하지 않습니다 :

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), 녹색);

Print("주문 개시 가격으로 수정된 SL ", OrderOpenPrice());

저널이 1.12224에서 주문을 연 가격을 확인하기 때문에 내 브로커는 5자리입니다.

내 설명이 의미가 있기를 바랍니다. 어떤 아이디어?

 
crsnape@btinternet.com:
안녕하세요 믈라덴님

답장을 보내 주셔서 감사합니다.

DonchianLowM5와 DonchianLowH4는 다른 값이지만 각각 고유한 목적이 있습니다. DonchianLowM5는 거래의 초기 단계에서 손익분기점을 맞추기 위해 SL을 조정하는 데 사용됩니다. DonchianLowH4는 SL을 트레일링 스톱 메커니즘으로 조정합니다. 이는 DonchianLowH4가 OrderOpenPrice를 능가하는 경우에만 적용됩니다.

이 문제를 조금 더 조사한 결과 문제가 발견되었을 수 있습니다. 나는 OrderModify 함수가 SL을 OrderOpenPrice로 정확히 재배치하는지 여부를 확인하고 싶었다. 하지만 그렇지 않습니다. 내 저널의 OrderOpenPrice는 1.12224, 5자리 정밀도로 명시되어 있지만 아래의 인쇄 기능에는 OrderOpenPrice가 4자리에 불과하다고 나와 있습니다. 따라서 SL은 5가 아닌 이 4자리 숫자를 사용할 것입니다. 5자리를 사용하려면 이 숫자가 필요합니다.

ordermodify가 SL을 5자리의 orderopenprice로 정확히 조정하도록 하려면 어떻게 해야 합니까?

이것은 내 코드입니다.

{

OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), OrderExpiration(), 녹색);

Print("주문 개시 가격으로 수정된 SL ", OrderOpenPrice());

}

나는 이것을 시도했지만 작동하지 않습니다 :

OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(OrderOpenPrice(), 5), OrderTakeProfit(), OrderExpiration(), 녹색);

Print("주문 개시 가격으로 수정된 SL ", OrderOpenPrice());

저널이 1.12224에서 주문을 연 가격을 확인하기 때문에 내 브로커는 5자리입니다.

내 설명이 의미가 있기를 바랍니다. 어떤 아이디어?

4자리 정밀도로 인쇄된 가격을 얻는다는 사실은 문제가 되지 않습니다. 단순히 다음을 사용하십시오. Print(DoubleToStr(OrderOpenPrice(),Digits)); 올바른 인쇄물을 얻을 수 있습니다. 다른 것이 문제이며 두 개의 완전히 다른 가격을 비교하면 이러한 문제가 발생할 수 있다고 생각했습니다.

 

아 맞다.

무슨 뜻이에요? 괄호 구조가 잘못 되었습니까?

코드는 상황에 따라 DonchianLowM5 또는 DonchianLowH4를 선택해야 합니다.

내 괄호 빌드가 될 수 있습니다. 빌드 다운은 각 코드 요소에 대해 잘못되었습니다.

 

코드를 단순화해 보십시오. 첨부된 것과 같은 것

추신 : 그것이 당신이 염두에 두었던 논리인지 확인하십시오 .

파일:
 

안녕하세요, 여기 두 개의 지표가 있습니다. 하나는 RSI를 기반으로 하고 다른 하나는 강도 지수를 기반으로 하지만 문제는 저에게 rsi 모양의 곡선을 요구합니다. 원하는 것이 아님을 나타냅니다. 솔루션이 있다면 분명히 파일을 보내드릴 수 있습니다. 필요한 경우 도움을 주셔서 감사합니다 ... 영어 "google traductor"에 대해 죄송합니다.