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

 
ilnur17021992 :
SELL_Lvl은 그리드의 매도 무릎(주문) 수이고 SELL_NoLossLevel 은 이러한 주문의 BU의 총 수준(가격)입니다. 일반적으로 아이디어는 다음과 같습니다. BU 수준에서 선을 그려야 하므로 새 무릎이 열릴 때 다시 그려야 합니다. 이것을 구현하는 방법 나는 따라 잡지 않습니다.

모든 주문의 BU 라인을 결정하는 방법을 따라잡지 못하셨습니까?

 

자원을 절약하고 최신 가격을 얻기 위해 올바르게 작성하는 방법을 알려주십시오.

   for ( int i= OrdersTotal (); i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()==symb) {
       if ( OrderType ()== OP_BUY ) {
       tk= OrderTicket ();
        SymbolInfoTick ( OrderSymbol (),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

아니면 이렇게?

 SymbolInfoTick (symb,Last_Tick); <<<
   for ( int i= OrdersTotal (); i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()==symb) {
       if ( OrderType ()== OP_BUY ) {
       tk= OrderTicket ();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...
 
Vitaly Muzichenko :

자원을 절약하고 최신 가격을 얻기 위해 올바르게 작성하는 방법을 알려주십시오.

   for ( int i= OrdersTotal (); i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()==symb) {
       if ( OrderType ()== OP_BUY ) {
       tk= OrderTicket ();
       SymbolInfoTick ( OrderSymbol (),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

아니면 이렇게?

SymbolInfoTick ( OrderSymbol (),Last_Tick); <<<
   for ( int i= OrdersTotal (); i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()==symb) {
       if ( OrderType ()== OP_BUY ) {
       tk= OrderTicket ();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


첫 번째 옵션이 더 정확합니다. 두 번째 옵션에서 이 행은 다음과 같이 작성되어야 합니다. SymbolInfoTick ( symb ,Last_Tick); <<<
 
Vitaly Muzichenko :

자원을 절약하고 최신 가격을 얻기 위해 올바르게 작성하는 방법을 알려주십시오.

   for ( int i= OrdersTotal (); i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()==symb) {
       if ( OrderType ()== OP_BUY ) {
       tk= OrderTicket ();
       SymbolInfoTick ( OrderSymbol (),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

아니면 이렇게?

SymbolInfoTick ( OrderSymbol (),Last_Tick); <<<
   for ( int i= OrdersTotal (); i>= 0 ; i--) {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
     if ( OrderSymbol ()==symb) {
       if ( OrderType ()== OP_BUY ) {
       tk= OrderTicket ();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


나는 그것이 OrdersTotal() 의 크기와 주기 동안의 가격 변동 가능성에 달려 있다고 말하고 싶습니다.

제 생각에는 루프에서 직접 새로운 데이터를 얻는 것이 더 정확합니다.

그리고 코드에서 강조 표시된 추가 변수는 절대적으로 필요하지 않다고 생각합니다.

 
Alexey Viktorov :

문서에 예가 있습니다.

여기에서 다음 주문이 이전 주문보다 낮으면 즉시 주기의 주문을 정렬하는 것이 더 나을 것입니다. 추가 작업을 위해 선택합니다. 따라서 주기를 종료한 후 삭제 순서가 이미 선택되어 있습니다.

또는 루프에서 먼저 주문 목록의 위치를 기억하고 루프를 종료한 후 기억된 인덱스로 선택합니다.

그렇지 않습니다. 모든 것은 위와 아래의 주문일 뿐입니다.
 
Sergey Gritsay :
첫 번째 옵션이 더 정확합니다. 두 번째 옵션에서 이 행은 다음과 같이 작성되어야 합니다. SymbolInfoTick ( symb ,Last_Tick); <<<

예, 방금 복사하고 눈치 채지 못했습니다.

SymbolInfoTick 을 주기 내부에 넣는 것이 올바른지, 필요한지 또는 주기 전에 삽입할 수 있는지 여부에 대한 질문에 관심이 있습니다. 후행 정지에 사용되며 최대 50개까지 그물을 당길 수 있습니다.

 
Vitaly Muzichenko :

예, 방금 복사하고 눈치 채지 못했습니다.

SymbolInfoTick 을 주기 내부에 넣는 것이 올바른지, 필요한지 또는 주기 전에 삽입할 수 있는지 여부에 대한 바로 그 질문에 관심이 있습니다. 후행 정지에 사용되며 최대 50개까지 그물을 당길 수 있습니다.

물론 후행 정지의 경우 사이클 전에 한 번 더 좋습니다.
 
Alexey Viktorov :

모든 주문의 BU 라인을 결정하는 방법을 따라잡지 못하셨습니까?

나는 BU를 결정하는 방법을 알고, 이 수준에서 그려질 선이 필요합니다
 
Alexey Viktorov :
물론 후행 정지의 경우 사이클 전에 한 번 더 좋습니다.

이전에는 주기 내부에 일반적인 Ask 및 Bid가 있었고 모든 것이 완벽하게 작동했지만 이제는 상위 5개까지 천천히 다시 작성하고 있습니다. 내 말은, 가격이 매우 빠르게 변할 수 있고, 그 수준이 허용 가능한 정지 수준보다 낮아져 오류가 발생하는 상황이 될 것입니다.

나는 이 " SymbolInfoTick " 모자가 최신 가격을 얻는 데 필요하다는 것을 이해합니다.

 
가격을 비교하여 문제를 해결