묻다! - 페이지 117

 

정수 시작(){

if(TimeCurrent()>D'2008.07.01 12:00:00'){Comment("만료"); 반환(0);}

...

반환(0);

}

amatrader:
EA에 날짜 제한을 두는 것이 가능한지 알려주세요. 제 말은 EA에 만료 날짜를 설정하면 설정된 날짜에 도달하면 거래가 중지된다는 것입니다.

아마도 다음과 같이 말할 것입니다.

날짜를 확인하고 날짜가 (날짜 설정)보다 크거나 같으면 아무 작업도 수행하지 않습니다.

영어버전인데 MQL4버전이 필요해...ㅋㅋㅋㅋ

누구든지 도와주시면 감사하겠습니다.
 
amatrader:
EA에 날짜 제한을 두는 것이 가능한지 알려주세요. 제 말은 EA에 만료 날짜를 설정하면 설정된 날짜에 도달하면 거래가 중지된다는 것입니다.

아마도 다음과 같이 말할 것입니다.

날짜를 확인하고 날짜가 (날짜 설정)보다 크거나 같으면 아무 작업도 수행하지 않습니다.

영어버전인데 MQL4버전이 필요해...ㅋㅋㅋㅋ

누구든지 도와주시면 감사하겠습니다.

이 스레드를보십시오 https://www.mql5.com/en/forum/174194

 

감사합니다 선생님... 감사합니다.

 

주간 높음 낮음.

일간에 대해 첨부된 것과 같은 주간 고저 지표를 게시할 수 있는 사람이 있습니까?

아니면 첨부파일을 주간으로 바꿔주세요.

미리 감사드립니다.

파일:
 

https://www.mql5.com/en/forum/173574/page32 (일별, 주별 및 월별) 표시기를 사용하십시오.

또는 이것은 https://www.mql5.com/en/forum/177792

또는 이것은 https://www.mql5.com/en/forum/178698

 

모두들 안녕

여기 내가 사용하는 ea가 있습니다. 누군가 BUY-STOP과 SELL_Stop을 동시에 수행하기 위해 무엇을 변경해야 하는지 알려주실 수 있습니까? 지금과 같은 방식으로 매수 정지 또는 매도 정지가 발동됩니다. 둘 다 갖고 싶습니다. 둘째, 각 양초 의 주문 수 를 제한하려면 어떻게 해야 합니까?

미리 감사드립니다.

코드는 다음과 같습니다.

무효 시작() {

//---- 내역 및 거래 확인

if(Bars<100 || IsTradeAllowed()==false) 반환;

co=CalculateCurrentOrders(Symbol());

CheckForSignals();

if (co>0) CheckForClose();

CheckForOpen();

co=CalculateCurrentOrders(Symbol());

if (mkt>0) {

BreakEvenStop(BreakEven,0);

이중 pcnt =((AccountEquity()-AccountBalance()) / AccountBalance())*100;

Print("계정 자산 = ",AccountEquity());

Print("계정 잔액 = ",AccountBalance());

if(pcnt>EquityGainPercent)

{

정수 합계 = OrdersTotal();

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

{

주문 선택(i, SELECT_BY_POS);

정수 유형 = 주문 유형();

부울 결과 = 거짓;

스위치(유형)

{

//오픈된 롱 포지션 닫기

경우 OP_BUY : 결과 = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, 빨간색 );

부서지다;

//오픈 숏포지션 청산

케이스 OP_SELL : 결과 = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );

부서지다;

//대기 중인 주문 닫기

케이스 OP_BUYLIMIT:

케이스 OP_BUYSTOP:

케이스 OP_SELLLIMIT:

경우 OP_SELLSTOP : 결과 = OrderDelete( OrderTicket() );

}

if(결과 == 거짓)

{

Alert("주문" , OrderTicket() , " 닫지 못했습니다. 오류:" , GetLastError() );

수면(3000);

}

}

Print("모든 주문이 마감됨-->이익에 잠김");

}

리턴(0);

}

}

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

//| 오픈 포지션 계산 |

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

int CalculateCurrentOrders(문자열 기호)

{

int 순서; mkt=0;

//----

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

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 계속;

if(OrderSymbol()==기호 && OrderMagicNumber()==MagicNumber) {

주문++;

if (OrderType()==OP_BUY || OrderType()==OP_SELL) mkt++;

}

}

//---- 반품 주문량

반환(또는);

}

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

//| 미결 주문 조건 확인 |

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

무효 CheckForSignals() {

//긴, 짧은, 종료 신호 확인

Buysig=거짓;

Sellsig=거짓;

닫기 구매=거짓;

closesell=거짓;

remorder=거짓;

int isins,isouts,iskeyrev,is2brev;

if (InsideBar) isins=IsInsideBar(shift);

if (OutSideBar) isouts=IsOutSideBar(shift);

if (KeyReversalBar) iskeyrev=IsKeyReversalBar(shift);

if (TwoBarReversal) is2brev=IsTwoBarReversal(shift);

//긴 입력 신호 조건

if (isins>0 || isouts>0 || iskeyrev>0 || is2brev>0) {

Buysig=참;

closesell=참;

}

//짧은 진입 신호

if (isins<0 || isouts<0 || iskeyrev<0 || is2brev<0) {

Buysig=거짓;

Sellsig=참;

닫기 구매 = 사실;

}

if (last>0 && (Time[0]-last)/(Period()*60)>=CancelOrderBars) {

remorder=참;

}

}

무효 CheckForOpen() {

정수 res,tr;

//---- 판매 조건

co=CalculateCurrentOrders(Symbol());

if(판매 시그 && 라스트 시그!=-1) {

co=CalculateCurrentOrders(Symbol());

if (co==0) {

res = OpenStop(OP_SELLSTOP,LotsRisk(StopLoss), Low[shift]-OrderPipsDiff*Point, StopLoss, TakeProfit1);

}

lastsig=-1;

마지막=시간[0];

반품;

}

//---- 구매 조건

if(구매 && 지속!=1) {

co=CalculateCurrentOrders(Symbol());

if (co==0) {

res = OpenStop(OP_BUYSTOP,LotsRisk(StopLoss), High[shift]+OrderPipsDiff*Point, StopLoss, TakeProfit1);

}

마지막=시간[0];

lastsig=1;

반품;

}

}

무효 BreakEvenStop(int BES, int BELP) {

// 일부 이익을 잠그기 위해 손절매를 이동합니다.

부울 브레스;

이중 손절매;

만약 ( BES > 2 ) {

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

if ( OrderSelect (i, SELECT_BY_POS) == false ) 계속;

if ( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber ) 계속;

경우 ( 주문 유형() == OP_BUY ) {

if ( Bid < OrderOpenPrice()+BES*Point ) 계속;

손절매 = OrderOpenPrice()+BELP*포인트;

if( 손절매 > 주문정지() ) {

bres=OrderModify(OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, 흰색);

if (!bres) Print("구매 주문 수정 오류: ",ErrorDescription(GetLastError()));

}

}

경우 ( 주문 유형() == OP_SELL ) {

if ( Ask > OrderOpenPrice()-BES*Point ) 계속;

손절매 = OrderOpenPrice()-BELP*포인트;

if ( StopLoss < OrderStopLoss() ) {

bres=OrderModify(OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, Gold);

if (!bres) Print("판매 주문 수정 오류: ",ErrorDescription(GetLastError()));

}

}

}

}

반품;

}

int IsKeyReversalBar(int shift) {

//키 반전 막대, 키 막대의 열림은 이전 막대의 최고점보다 최소한 ?pips 높아야 합니다.

//키 바의 닫기는 이전 바의 고가와 종가에 있어야 합니다. 현재 막대의 열기는 다음과 같아야 합니다.

// 키 바의 닫기보다 낮습니다. SellStop 주문은 기한 내에 실행되지 않는 경우 키 바 하단에 배치해야 합니다.

//다음 4개의 막대는 주문을 취소합니다. 아래 그림을 참조하십시오 - 짧습니다!

if (열기[shift]=낮음[shift+1] && 닫기[shift]닫기[shift]) return(1);

if (열기[shift]>높음[shift+1] && 닫기[shift]=닫기[shift+1] && 열기[shift-1]<닫기[shift]) return(-1);

리턴(0);

}

int IsTwoBarReversal(int shift) {

//두 개의 막대 반전, 첫 번째 막대의 시가는 이전 막대의 저점 근처에 있어야 하고 종가는 훨씬 낮아야 하며

//좋은 사이즈의 바디를 가지고 있습니다. 두 번째 막대의 시가는 첫 번째 막대의 종가와 매우 가까워야 하지만 둘 다 훨씬 아래에 있어야 합니다.

// 종가가 낮은 2막대 이전에 매우 가까운 각 막대의 중간점. BuyStop 주문은

// 4마디 이내 실행되지 않으면 1마디는 주문을 취소한다. 아래 사진 참조

if (MathAbs(열기[shift+1]-닫기[shift+1])> MathAbs(열기[shift+1]-낮음[shift+2])<=

MathAbs(닫기[shift]-낮음[shift+2])<=

MathAbs(열기[shift]-닫기[shift+1]) &&

닫기[shift+1]<(높음[shift+1]+낮음[shift+1])/2 &&

열기[쉬프트]<(높음[쉬프트]+낮음[쉬프트])/2)

반환(1);

if (MathAbs(열기[shift+1]-닫기[shift+1])> MathAbs(열기[shift+1]-높음[shift+2])<=

MathAbs(닫기[shift]-낮음[shift+2])<=

MathAbs(열기[shift]-닫기[shift+1]) &&

닫기[shift+1]>(높음[shift+1]+낮음[shift+1])/2 &&

열기[쉬프트]>(높음[쉬프트]+낮음[쉬프트])/2)

리턴(-1);

리턴(0);

}

int OpenStop(int 모드, 이중 로트, 이중 prc, int SL, int TP) {

int res,tr,col;

문자열 메일;

이중 공개 가격, sl, tp, stlev;

시도 = 0;

stlev=(1+MarketInfo(Symbol(),MODE_STOPLEVEL))*포인트;

동안 (res<=0 && 시도<OrderTriesNumber) {

tr=0; 동안 (tr<5 && !IsTradeAllowed()) { tr++; 수면(2000); }

새로 고침 비율();

if (모드==OP_SELLSTOP) {

if (prc<=Bid-stlev) openprice=prc;

else openprice=입찰가;

if (SL>0) sl=openprice+SL*Point;

if (TP>0) tp=openprice-TP*Point;

col=빨간색;

} 또 다른

if (모드==OP_BUYSTOP) {

if (prc>=Ask+stlev) openprice=prc;

else openprice=문의+stlev;

if (SL>0) sl=openprice-SL*Point;

if (TP>0) tp=openprice+TP*Point;

col=파란색;

} 그렇지 않으면 반환;

Print(Ask," ",Bid," ",Symbol()," ",mode," ",lot," ", openprice," ",sl," ",tp," ");

res=OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+"_"+MagicNumber,MagicNumber,0,col);

시도++;

}

if (res<=0) Print("대기 중인 주문 열기 오류: ",ErrorDescription(GetLastError()));

반환(res);

}

무효 CheckForClose() {

부울 브레스; 정수 tr;

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

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 계속;

if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) 계속;

//---- 주문 유형 확인

if(OrderType()==OP_BUY && 닫기 구매) {

bres=시장 마감(OrderTicket(),OrderLots());

계속하다;

}

if(OrderType()==OP_SELL && 닫기 판매) {

bres=시장 마감(OrderTicket(),OrderLots());

계속하다;

}

if(OrderType()==OP_BUYSTOP && (closebuy || remorder)) {

bres=DeletePending(OrderTicket());

계속하다;

}

if(OrderType()==OP_SELLSTOP && (판매 종료 || 재주문)) {

bres=DeletePending(OrderTicket());

계속하다;

}

}

}

bool DeletePending(int 티켓) {

부울 브레스=거짓; 정수 tr;

시도 = 0;

동안 (!bres && 시도<OrderTriesNumber) {

bres=OrderDelete(티켓);

시도++;

tr=0; 동안 (tr<5 && !IsTradeAllowed()) { tr++; 수면(2000); }

}

if (!bres) Print("주문 삭제 오류: ",ErrorDescription(GetLastError()));

반환(bres);

}

 

EA가 특정 계정 번호 로만 작동하도록 하는 코드를 아는 사람이 있습니까? 감사해요!

 

https://www.mql5.com/en/forum/174194 (게시물 #7)에 있습니다.

 

당신은 이것을 너무 많이

}
 
newdigital:
https://www.mql5.com/en/forum/174194 (게시물 #7)에 있습니다.

newdigital님 감사합니다.

내 초기화 코드(시간 만료가 있음)가 다음과 같이 설정되어 있습니다.

정수 초기화()

{if (TimeCurrent()>D'2008.06.07 12:00:00'){Comment("구독을 갱신해주세요"); 반환(0);}

리턴(0);

}

}

if (계정 != 계정 번호()){

Comment("계정 거래 :"+AccountNumber()+" 금지!");

리턴(0);

} else {주석("");}

이제 이 오류를 반환합니다.

'}' - 불균형 괄호

내가 여기서 뭘 잘못하고 있니? 또한 "int Account = 111111;" EA의 설정으로 갈까요? 감사해요.