MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 307

 
forexman77 :

다른 DC에서 시도했는데 모든 것이 정상인 것 같습니다. 질문은 왜 전화를 걸 때입니다.

0.01을 인쇄하지만 봇에서는 131을 인쇄합니까?

함수에 전달할 때 로트를 정규화해야 합니다.

 
Artyom Trishkin :

함수에 전달할 때 로트를 정규화해야 합니다.


일반적으로 정규화를 소비한다고 썼습니다. 자동 거래의 랏 수에는 몇 가지 제한이 있습니다.

여기에 "Captain Obviousness"를 포함할 필요가 없습니다.
 
forexman77 :

일반적으로 정규화를 소비한다고 썼습니다. 자동 거래의 랏 수에는 몇 가지 제한이 있습니다.

여기에 "Captain Obviousness"를 포함할 필요가 없습니다.

글쎄, 그렇게 의사 소통하기로 결정했다면 자신을 찾으십시오.

 
rabanik :

답변 주셔서 대단히 감사합니다.

그것이 전체 기능입니다. 요점은 주문을 연 다음 수정을 통해 일정한 손절매를 추가하고 이익 가치를 취한다는 것입니다.

따라서 주문은 열렸지만 손절매와 현재 이익은 내려놓지 않았습니다(저는 계산 기능을 빨간색으로 강조 표시했습니다. 여기에서 OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)는 오류를 제공합니다((( )

// 주문 개시 함수, 변수: 기호, 주문 유형, 로트, 공개 가격, TP 및 SL 계산 방법 (0 - 가격 설정, 1 - 공개 가격에서 계산할 포인트 설정), 손절매, 이익실현 )

//Symbol/Pair, open order type - pending, Open price, Switch = 1, SL B TP - 손절매와 이익실현 값은 일정하다!!!

bool SendOrder(문자열 기호, 정수 유형, 이중 OP, 정수 모드) {
색상 CL;
더블 Pp = MarketInfo(Symb, MODE_POINT);
if (유형==0) CL=파란색;
if (유형==1) CL=빨간색;
if (유형==2 || 유형==4) CL=DarkTurquoise;
if (유형==3 || 유형==5) CL=주황색;
// 볼륨 체크
if(MarketInfo(Symb,MODE_LOTSTEP)==0.01) DG=2; 그렇지 않으면 DG=1;
if (Lot<MarketInfo(Symb,MODE_MINLOT)) Lot=MarketInfo(Symb,MODE_MINLOT);
if (Lot>MarketInfo(Symb,MODE_MAXLOT)) Lot=MarketInfo(Symb,MODE_MAXLOT);
if (Lot*MarketInfo(Symb,MODE_MARGINREQUIRED)>AccountEquity()) {
PnC(StringConcatenate("거래를 열 수 있는 자금이 충분하지 않습니다.",Type," volume: ",DoubleToStr(Lot,DG)),0);
반품;
}
// 대기 중인 주문 확인
/*
이중 Slv = MarketInfo(Symb,MODE_STOPLEVEL)*Pp;
if (유형>1) {
if (유형==2 && MarketInfo(Symb,MODE_ASK)-OP<Slv) OP=MarketInfo(Symb,MODE_ASK)-Slv;
if (유형==3 && OP-MarketInfo(Symb,MODE_BID)<Slv) OP=MarketInfo(Symb,MODE_BID)+Slv;
if (유형==4 && OP-MarketInfo(Symb,MODE_ASK)<Slv) OP=MarketInfo(Symb,MODE_ASK)+Slv;
if (유형==5 && MarketInfo(Symb,MODE_BID)-OP<Slv) OP=MarketInfo(Symb,MODE_BID)-Slv;
}
*/
새로 고침();
int Min_Dist = MarketInfo(Symb,MODE_STOPLEVEL); //최소 허용 손절매/포인트 단위 이익 수준. 최소 거리
이중 Tek_Ask = MarketInfo(Symb,MODE_ASK); //마지막으로 받은 판매 가격. 현재 기호의 경우 미리 정의된 변수 Ask에 저장됩니다.
이중 Tek_Bid = MarketInfo(Symb,MODE_BID); //마지막으로 받은 제안 가격. 현재 상품의 경우 사전 정의된 변수 Bid에 저장됩니다.
이중 Tek_Point = MarketInfo(Symb,MODE_POINT); //견적 통화의 포인트 크기. 현재 도구의 경우 사전 정의된 변수 Point에 저장됩니다.
int Tek_Digits = MarketInfo(Symb,MODE_DIGITS);//상품 가격의 소수점 이하 자릿수. 현재 기기의 경우 사전 정의된 변수 Digits에 저장됩니다.

이중 Slv = NormalizeDouble(Min_Dist*Tek_Point,Tek_Digits);
if (유형>1) {
if (유형==2 && Tek_Ask - OP < Slv) OP = Tek_Ask - Slv;
if (유형==3 && OP - Tek_Bid < Slv) OP = Tek_Bid + Slv;
if (유형==4 && OP - Tek_Ask < Slv) OP = Tek_Ask + Slv;
if (유형==5 && Tek_Bid - OP < Slv) OP = Tek_Bid - Slv;
}
// 검사 중지
if (SL!=0 || TP!=0) {
if (모드==0) {
if (MathAbs(OP-SL)<Slv && SL!=0) {
if (유형==0 || 유형==2 || 유형==4) SL=OP-Slv; 그렇지 않으면 SL=OP+Slv;
}
if (MathAbs(OP-TP)<Slv && TP!=0) {
if (유형==0 || 유형==2 || 유형==4) TP=OP+Slv; 그렇지 않으면 TP=OP-Slv;
}
}또 다른{
if (SL*Pp<Slv && SL!=0) SL=Slv/Pp;
if (TP*Pp<Slv && TP!=0) TP=Slv/Pp;
}
}
// 열려 있는
for(int k=0;k<=TryToTrade;k++) {
if (유형==0) OP=MarketInfo(Symb,MODE_ASK);
if (유형==1) OP=MarketInfo(Symb,MODE_BID);
PnC(StringConcatenate("주문 개설 시도, 유형: ",Type," 거래량: ",Lot," 가격: ",OP),0);
if (IsTradeAllowed()) {
int Ticket=OrderSend(Symb,Type,Lot,NormalizeDouble(OP,MarketInfo(Symb,MODE_DIGITS)),3,0,0,NULL,Tek_Magic,0,CL);
}else{ PnC(StringConcatenate("주문을 열 수 없습니다",k),0); 수면(3000); 계속하다; }
if (티켓 >= 0) { PnC(StringConcatenate("주문 오픈",티켓), 0); 부서지다; }
LastError=Fun_Error(GetLastError());
if (마지막 오류==0) {
새로 고침(); 절전(대기시간);
if (k==TryToTrade) return(거짓); }
if (LastError==1) return(거짓);
if (LastError==2) { 작업=거짓; 반환(거짓); }
}
// 정지 설정
OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES);
if (SL==0 && TP==0) 반환;
if (모드==1) {
if (SL!=0) {
if (유형==0 || 유형==2 || 유형==4) SL=OrderOpenPrice()-SL*Pp;
if (유형==1 || 유형==3 || 유형==5) SL=OrderOpenPrice()+SL*Pp;
}
만약 (TP!=0) {
if (유형==0 || 유형==2 || 유형==4) TP=OrderOpenPrice()+TP*Pp;
if (유형==1 || 유형==3 || 유형==5) TP=OrderOpenPrice()-TP*Pp;
}
}

for(k=0;k<=TryToTrade;k++) {
PnC(StringConcatenate("주문에 대한 경유지 설정 시도: ",Ticket," s/l: ",SL," t/p: ",TP),0);
if (IsTradeAllowed()) {
//TickeT=OrderModify(Ticket,NormalizeDouble(OrderOpenPrice(),MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(Symb,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS),0 ;
TickeT=OrderModify(티켓,NormalizeDouble(OrderOpenPrice(),MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(SL,MarketInfo(Symb,MODE_DIGITS)),NormalizeDouble(TP,MarketInfo(Symb,MODE_DIGITS)),0,CLR
}else{ PnC(StringConcatenate("주문을 수정할 수 없습니다. ",k),0); 수면(3000); 계속하다; }
if (TickeT == true) { PnC(StringConcatenate("수정된 주문, 티켓), 0); 부서지다; }
LastError=Fun_Error(GetLastError());
if (마지막 오류==0) {
새로 고침(); 절전(대기시간);
if (k==TryToTrade) return(거짓); }
if (LastError==1) return(거짓);
if (LastError==2) { 작업=거짓; 반환(거짓); }
}
반환(참);

}

이제 줄의 다음 오류 if (Type==0 || Type==2 || Type==4) SL=OrderOpenPrice()-SL*Pp; . OrderOpenPrice() 함수는 동일한 오류를 반환합니다. 표현식을 평가할 수 없습니다. 이 얼마나 PPC!!!
 
rabanik :
이제 줄의 다음 오류 if (Type==0 || Type==2 || Type==4) SL=OrderOpenPrice()-SL*Pp; . OrderOpenPrice() 함수는 동일한 오류를 반환합니다. 표현식을 평가할 수 없습니다. 이 얼마나 PPC!!!

모두 알아냈습니다. 멍청한 질문 죄송합니다. 나는 ch가 있습니다. 가변 SL 유형 int.

그리고 double 유형 의 SL 값을 다시 얻으려고 합니다. 그러나 시스템은 1을 반환합니다.

고맙습니다.

 

누군가가 더 이상의 연산자를 계속 실행하지 않고 특정 장소에서 고문의 작업이 처음으로 돌아갈 수 있도록 고문을 만드는 방법을 알려줄 수 있습니까?

 

안녕하세요. 다음 질문은 고문이 판매 거래를 열지 않는다는 것입니다. 볼 수 있습니까?

 if ( Digits == 3 || Digits == 5 ) {sl=SL* 10 * Point ;}
         else if ( Digits == 4 || Digits == 2 ) {sl=SL* Point ;}
             if ( OrdersTotal ()== 0 )
              {
                 if ( Close [ 1 ]>TD2)
                 OrderSend ( Symbol (), OP_BUY ,Lot, Ask , 10 , Ask -sl, 0 , NULL ,Magic, 0 , clrBlue );
                 else if ( Close [ 1 ]<TD1)
                 OrderSend ( Symbol (), OP_SELL ,Lot, Bid , 10 , Bid +sl, 0 , NULL ,Magic, 0 , clrRed );
              }
 
6737998 :

누군가가 더 이상의 연산자를 계속 실행하지 않고 특정 장소에서 고문의 작업이 처음으로 돌아갈 수 있도록 고문을 만드는 방법을 알려줄 수 있습니까?

Оператор возврата return - Операторы - Основы языка - Справочник MQL4
Оператор возврата return - Операторы - Основы языка - Справочник MQL4
  • docs.mql4.com
Оператор возврата return - Операторы - Основы языка - Справочник MQL4
 
danil77783 :

안녕하세요. 다음 질문은 고문이 판매 거래를 열지 않는다는 것입니다. 볼 수 있습니까?

TD1은 무엇이며 어디에 값이 할당됩니까?
 

친구,이 상황을 올바르게 벗어나는 방법 ... 표시기는 CSV에서 두 개의 수평선을 그립니다 (빨간색 - 하루의 시작부터 끝까지) 파란색 - 지난 날의 광선, 다른 가격 수준 . 그러나 이러한 수준이 동일한 가치/가격을 갖는 날이 있습니다. 선이 일치할 때 Ray(파란색)가 표시되고 차트에 빨간색 선이 표시되지 않지만 물리적으로 존재하도록 상황을 올바르게 벗어나는 방법... 즉, 투명했다.

지금 - Draw_Level("빨간색", 빨간색, DRAW_NONE, STYLE_SOLID,0); 선 그리기를 중지하지만 그 아래의 Ray도 보이지 않습니다. 고맙습니다.