그것이 전체 기능입니다. 요점은 주문을 연 다음 수정을 통해 일정한 손절매를 추가하고 이익 가치를 취한다는 것입니다.
따라서 주문은 열렸지만 손절매와 현재 이익은 내려놓지 않았습니다(저는 계산 기능을 빨간색으로 강조 표시했습니다. 여기에서 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을 반환합니다.
친구,이 상황을 올바르게 벗어나는 방법 ... 표시기는 CSV에서 두 개의 수평선을 그립니다 (빨간색 - 하루의 시작부터 끝까지) 파란색 - 지난 날의 광선, 다른 가격 수준 . 그러나 이러한 수준이 동일한 가치/가격을 갖는 날이 있습니다. 선이 일치할 때 Ray(파란색)가 표시되고 차트에 빨간색 선이 표시되지 않지만 물리적으로 존재하도록 상황을 올바르게 벗어나는 방법... 즉, 투명했다.
지금 - Draw_Level("빨간색", 빨간색, DRAW_NONE, STYLE_SOLID,0); 선 그리기를 중지하지만 그 아래의 Ray도 보이지 않습니다. 고맙습니다.
다른 DC에서 시도했는데 모든 것이 정상인 것 같습니다. 질문은 왜 전화를 걸 때입니다.
0.01을 인쇄하지만 봇에서는 131을 인쇄합니까?
함수에 전달할 때 로트를 정규화해야 합니다.
함수에 전달할 때 로트를 정규화해야 합니다.
일반적으로 정규화를 소비한다고 썼습니다. 자동 거래의 랏 수에는 몇 가지 제한이 있습니다.
여기에 "Captain Obviousness"를 포함할 필요가 없습니다.일반적으로 정규화를 소비한다고 썼습니다. 자동 거래의 랏 수에는 몇 가지 제한이 있습니다.
여기에 "Captain Obviousness"를 포함할 필요가 없습니다.글쎄, 그렇게 의사 소통하기로 결정했다면 자신을 찾으십시오.
답변 주셔서 대단히 감사합니다.
그것이 전체 기능입니다. 요점은 주문을 연 다음 수정을 통해 일정한 손절매를 추가하고 이익 가치를 취한다는 것입니다.
따라서 주문은 열렸지만 손절매와 현재 이익은 내려놓지 않았습니다(저는 계산 기능을 빨간색으로 강조 표시했습니다. 여기에서 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!!!
모두 알아냈습니다. 멍청한 질문 죄송합니다. 나는 ch가 있습니다. 가변 SL 유형 int.
그리고 double 유형 의 SL 값을 다시 얻으려고 합니다. 그러나 시스템은 1을 반환합니다.
고맙습니다.
누군가가 더 이상의 연산자를 계속 실행하지 않고 특정 장소에서 고문의 작업이 처음으로 돌아갈 수 있도록 고문을 만드는 방법을 알려줄 수 있습니까?
안녕하세요. 다음 질문은 고문이 판매 거래를 열지 않는다는 것입니다. 볼 수 있습니까?
누군가가 더 이상의 연산자를 계속 실행하지 않고 특정 장소에서 고문의 작업이 처음으로 돌아갈 수 있도록 고문을 만드는 방법을 알려줄 수 있습니까?
안녕하세요. 다음 질문은 고문이 판매 거래를 열지 않는다는 것입니다. 볼 수 있습니까?
친구,이 상황을 올바르게 벗어나는 방법 ... 표시기는 CSV에서 두 개의 수평선을 그립니다 (빨간색 - 하루의 시작부터 끝까지) 파란색 - 지난 날의 광선, 다른 가격 수준 . 그러나 이러한 수준이 동일한 가치/가격을 갖는 날이 있습니다. 선이 일치할 때 Ray(파란색)가 표시되고 차트에 빨간색 선이 표시되지 않지만 물리적으로 존재하도록 상황을 올바르게 벗어나는 방법... 즉, 투명했다.
지금 - Draw_Level("빨간색", 빨간색, DRAW_NONE, STYLE_SOLID,0); 선 그리기를 중지하지만 그 아래의 Ray도 보이지 않습니다. 고맙습니다.