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

 

수학적인 기대치 도움 부탁드립니다

여보세요

나 자신을 어느 정도 속인 것 같다.

내 EA 내에서 예상 공식을 사용하려고 합니다. 공식이 1-avgwin/avgloss*system 정확도+1이고 제대로 작동하지만 Order와 StopLoss 간의 차이를 계산하고 표시하는 방법을 알고 싶습니다. 예

OP_SELLSTOP 1.63406

손절매 1.63603

1.63406 - 1.63603 = -0.00197 양수여야 한다고 생각합니다.

1.45의 기대치

따라서 TakeProfit -0.00197 * 1.45 = -0.00285를 계산하려면

OP_SELLSTOP 1.63406 - 1.63121 에 TP 배치

롱 포지션의 경우 반대의 경우도 마찬가지입니다.

이 스레드의 모든 부분은 https://www.mql5.com/en/forum/178980 이며 Excel 시트를 보면 제가 거의 거기에 있음을 알 수 있습니다.

어떤 도움이라도 좋습니다.

건배 베노

 
Beno:
여보세요

어느 정도 자신을 속였던 것 같다.

내 EA 내에서 예상 공식을 사용하려고 합니다. 공식이 1-avgwin/avgloss*system 정확도+1이고 제대로 작동하지만 Order와 StopLoss 간의 차이를 계산하고 표시하는 방법을 알고 싶습니다. 예

OP_SELLSTOP 1.63406

손절매 1.63603

1.63406 - 1.63603 = -0.00197 양수여야 한다고 생각합니다.

1.45의 기대치

따라서 TakeProfit -0.00197 * 1.45 = -0.00285를 계산하려면

OP_SELLSTOP 1.63406 - 1.63121 에 TP 배치

롱 포지션의 경우 반대의 경우도 마찬가지입니다.

이 스레드의 모든 부분은 https://www.mql5.com/en/forum/178980 이며 Excel 시트를 보면 제가 거의 거기에 있음을 알 수 있습니다.

어떤 도움이라도 좋습니다.

건배 베노

가장 간단한 방법은 그것에 대해 생각하지 않고 다음을 사용하는 것입니다.

이중 MathAbs(이중 값)

MathAbs - MQL4 문서

문안 인사

 

안녕하세요 CRN

답변 감사합니다 제가 시도한 방법입니다

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

나는 그것이 맞다고 생각하지만 PipSL 15769.68328362를 인쇄합니다.

1 2011.01.04 00:00 매도 정지 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 매도 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

3 2011.01.07 08:20 수정 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 종가 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

Sell과 SL의 실제 차이가 필요합니다.

 

누가 좀 도와주세요.

모두를 위한 Hello and Happy의 크리스마스입니다.

먼저 저는 이 포럼에 처음 온 사람입니다. Ea에 문제가 있는데 누군가 고칠 수 있습니까? 문제는 실제 거래를 위해 이 EA를 설정하고 내 라이브 거래에서 EA를 회색으로 설정하는 방법입니다.

여기 첨부 파일:

Spielershedge_library.mqh

spielershedge_pipstar.mq4

spielershedge_ea_v2.8.1.ex4

Spielershedge_divergence_v5.1.ex4

-오래되었지만 우리 모두에게 도움이 될 무언가를 공유하고 취할 수 있다고 생각합니다.

-나는 이것을 선물 스프레드 거래에서 파생된 헤지 거래 스필러 시스템에서 찾았습니다 - Page 193 @ Forex Factory ( SpielersHedge PipStar.mq4 ) 및 나머지 는 선물 스프레드 거래에서 파생된 헤지 거래 스필러 시스템에서 - Page 87 @ Forex Factory

-내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다.

P/S : 제 개선을 위해 여러분 모두의 강의, 가이드, 의견 및 비판에 감사드립니다. 우리가 지식을 더 많이 줄수록 더 많은 지식을 얻게 된다고 믿었습니다.

 
Beno:
안녕하세요 CRN

답변 감사합니다 제가 시도한 방법입니다

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

나는 그것이 맞다고 생각하지만 PipSL 15769.68328362를 인쇄합니다.

1 2011.01.04 00:00 매도 정지 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 매도 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

3 2011.01.07 08:20 수정 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 종가 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

Sell과 SL의 실제 차이가 필요합니다.

실제 사용이 필요한 경우 iClose (0,0,0)-OrderStopLoss().

그러나 먼저 OrderSelect로 올바른 순서를 선택하십시오.

문안 인사

 

CloseAll이 포함된 시간 필터 도움말

기드데이

EA에서 작업하는 시간 필터가 있지만 클로즈올을 첨부하려고 했기 때문에 시간이 클로즈 시간과 같으면 오픈 포지션을 클로즈합니다.

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}
 

도와주세요

extern int BuyStopTakeProfit =10;

extern int BuyStopSL=1000;

코딩하는 방법

BuyStopTakeProfitTakeProfit 을 적중하면 보류 중인 모든 주문 을 삭제합니다.

아무나 도와주세요

 

돕다!!!! 제발!!!! 아이커스텀 기능

돕다,

내 C_EA_rev6.mq4가 사용자 지정 표시기 VSATEXTSIGNALS.mq4에서 버퍼를 호출하도록 모든 것을 시도했습니다. iCustom 함수를 사용했지만 항상 오류 코드인 2147483647을 반환합니다. 사용자 지정 표시기는 볼륨 스프레드 분석 기술을 기반으로 차트에 텍스트 신호를 배치합니다. 사용자 지정 지표를 차트에 첨부하면 제대로 실행됩니다. 나는 이것에 수많은 시간을 보냈고 내가 아는 모든 조합을 시도했습니다. 도움을 주시면 대단히 감사하겠습니다. 또한 질문이 있습니다. 스크립트 또는 .dll 파일을 호출하는 사용자 지정 표시기에서 iCustom 함수를 사용할 수 있습니까?

표시기 및 EA에 대한 코드는 첨부 파일을 참조하십시오.

감사해요,

cmfxtrader

파일:
 
cmfxtrader:
돕다,

내 C_EA_rev6.mq4가 사용자 지정 표시기 VSATEXTSIGNALS.mq4에서 버퍼를 호출하도록 모든 것을 시도했습니다. iCustom 함수를 사용했지만 항상 오류 코드인 2147483647을 반환합니다. 사용자 지정 표시기는 볼륨 스프레드 분석 기술을 기반으로 차트에 텍스트 신호를 배치합니다. 사용자 지정 지표를 차트에 첨부하면 제대로 실행됩니다. 나는 이것에 수많은 시간을 보냈고 내가 아는 모든 조합을 시도했습니다. 도움을 주시면 감사하겠습니다. 또한 질문이 있습니다. 스크립트 또는 .dll 파일을 호출하는 사용자 지정 표시기에서 iCustom 함수를 사용할 수 있습니까?

표시기 및 EA에 대한 코드는 첨부 파일을 참조하십시오.

감사해요,

cmfxtrader

여기요,

문제는 표시기에서 버퍼를 읽으려는 동안 버퍼가 아닌 텍스트 메시지를 출력한다는 것입니다. 따라서 오류가 아닌 EMPTY_VALUE인 2147483647 값을 얻는 이유는 무엇입니까?

어쨌든 이 표시기의 신호를 자동화하고 싶은 것 같습니다. 이에 대한 간단한 해결책이 있습니다. 표시기는 7개의 버퍼(#property indicator_buffers 7)를 갖는 것으로 선언되었지만 5개만 사용하고 있습니다. 표시기는 최대 8개의 버퍼를 사용할 수 있습니다. 이는 계산을 위해 또 다른 추가 버퍼를 선언하고 메시지 식별로 채울 수 있음을 의미합니다. TextOutput 함수에서 메시지 번호를 찾을 수 있습니다. 버퍼에 숫자를 추가하기만 하면 표시되는 메시지에 따라 다릅니다. 예를 들어 텍스트가 "UPTHRUST / Weakness_"이면 버퍼에 1을 추가하고 메시지가 PSEUDO UPTHRUST / Weakness_이면 4를 추가하는 식입니다. 버퍼의 인덱스는 "i" 변수의 값과 동일합니다.

두 번째 질문에 관해서는 : 항상 표시기(스크립트 아님)에 대해 iCustom 함수를 사용할 수 있으며 표시기에 선언된 버퍼를 채우면 값을 읽을 수 있습니다. 예를 들어 이것이 선을 그리는 표시기라면 선 값을 읽을 수 있습니다. 왜냐하면 무언가를 그리려면 표시기가 버퍼를 채워야 하기 때문입니다. 표시기가 그래픽 개체(예: 첨부한 개체)를 생성 하는 경우 a) 그래픽 개체에서 값을 읽거나 b) 표시기를 다시 코딩해야 합니다(위에서 제안한 것처럼). 표시기가 DLL을 사용하는지 여부는 중요하지 않습니다. iCustom 함수에서 값을 읽으려면 버퍼를 적절하게 채워야 합니다.

 
Beno:
기드데이

EA에서 작업하는 시간 필터가 있지만 클로즈올을 첨부하려고 했기 때문에 시간이 클로즈 시간과 같으면 오픈 포지션을 클로즈합니다.

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

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

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}

이 부분을 확인 하려고:

if((일반 필터 && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==거짓 && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

코드의 다른 부분이 더 쉬울 수 있지만 작동해야 합니다.

그러나 모든 부분을 닫기 전에 스크립트를 종료하면 작동하지 않으며 스크립트가 그렇게 하는 것 같습니다.

예를 들어 이 부분을 살펴보십시오.

(fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday) return(0);

영어로 의미: 금요일이고 friday 필터가 켜져 있고 TimeMark가 통과된 경우(예: 종료 시간이 18.00이고 18.01임) return(0).

금요일이고 금요일 필터가 ON이고 TimeMark가 CLOSE ALL 을 통과한 경우(예: 종료 시간이 18.00이고 18.01)이면 return(0)이 되어야 합니다.

사유: