[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 898

 
Dimka-novitsek :
같은 상황입니다.
코드를 게시
 
arvis :
특정 시간부터 포인트 단위로 이익을 계산하기 위해 MT4에서 지표를 설정하는 방법은 무엇입니까?

때때로 원하는 경우 가격이 마감되는 방식이지만 21:00부터 포인트를 계산하려면 시간을 가지고 놀아야하며 거기에는 복잡한 것이 없습니다.

 double Profit; // или double Profit = 0;

 int start {

 double PrevCl

 double CurrCl

PrevCl = iClose( Symbol (), 0 , 2 );
CurrCl = iClose( Symbol (), 0 , 1 );

if (PrevCl > CurrCl){ 

if (Ask > signal) {

 Profit = (Ask - signal);

return (Profit); 

} 

 if (Bid < signal) {

 Profit = (signal - Bid);

return (Profit); 

    }
  } 
}
 

다음 코드를 개선하는 방법을 알려주세요.

 double LastOpenOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0 ;
   int l_ticket_20 = 0 ;
   for ( int l_pos_16 = OrdersTotal () - 1 ; l_pos_16 >= 0 ; l_pos_16--) {
       OrderSelect (l_pos_16, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumber) continue ;
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

그래서 나는 다음과 같이 할 수 있습니다.

 if (LastOpenOrder - Bid >= 25 * Point ) CloseOrder;

즉, 이 마지막 열린 주문만 닫고 다른 주문은 만지지 마십시오!

미리 감사드립니다.

 

Expert Advisor에 올바르게 기록하고 표시기의 결과를 얻는 방법은 무엇입니까?

이중 ROC = iCustom(NULL,0,"ROC",12, 0,0 ); - 데이터를 출력하지 않습니다.

이중 ROC = iCustom(NULL,0,"ROC",12, 0,0,0 ); - 데이터를 출력하지 않습니다.

이중 ROC = iCustom(NULL,0,"ROC",12, 0,0,0,0 ); - 데이터를 출력하지 않습니다.

표시기: https://www.mql5.com/ru/code/9340

 
DhP :

Expert Advisor에 올바르게 기록하고 표시기의 결과를 얻는 방법은 무엇입니까?

이중 ROC = iCustom(NULL,0,"ROC",12, 0,0 ); - 데이터를 출력하지 않습니다.

이중 ROC = iCustom(NULL,0,"ROC",12, 0,0,0 ); - 데이터를 출력하지 않습니다.

이중 ROC = iCustom(NULL,0,"ROC",12, 0,0,0,0 ); - 데이터를 출력하지 않습니다.

표시기: https://www.mql5.com/en/code/9340

다음과 같이 더 정확할 것입니다.

 double ROC = iCustom ( NULL , 0 , "ROC" , 0 , 0 );

그러나 나는 당신이 그것으로 무엇을 할 것인지 알 수 없습니다. 글쎄, 아마도 내가 이해할 필요가 없을거야

 
belck :

때때로 원하는 경우 가격이 마감되는 방식이지만 21:00부터 포인트를 계산하려면 시간을 가지고 놀아야하며 거기에는 복잡한 것이 없습니다.


도와주셔서 감사합니다, belck .

여러 쌍에서 거래가 수행되는 경우 동일한 양의 이익을 포인트로 보호하는 방법을 알려주십시오. 또한 닫힌 거래도 고려해야 합니다.

 
arvis :


도와주셔서 감사합니다, belck .

여러 쌍에서 거래를 수행하는 경우 동일한 양의 이익을 포인트로 보호하는 방법을 알려주십시오. 또한 닫힌 거래도 고려해야 합니다.

이 질문에 대답하기가 어렵습니다.

그러나 한 가지 말할 수 있는 것은 이 모든 것이 호출되어야 한다는 것입니다. 예를 들어 마지막 촛불을 닫는다고 하면

 int start {

 double PrevCl

 double CurrCl

PrevCl = iClose( Symbol (), 0 , 2 ); // то тут указываете какая валютная пара и по желанию период : PrevCl = iClose("EURUSD", PERIOD_H1, 2);
CurrCl = iClose( Symbol (), 0 , 1 ); // тут так же

if (PrevCl > CurrCl){ 

if (Ask > signal) {

 Profit = (Ask - signal);

return (Profit); 

} 

 if (Bid < signal) {

 Profit = (signal - Bid);

return (Profit); 

    }
  } 
}

마지막 미결제 주문의 가격은 다음과 같습니다.

 double LastOpenOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0 ;
   int l_ticket_20 = 0 ;
   for ( int l_pos_16 = OrdersTotal () - 1 ; l_pos_16 >= 0 ; l_pos_16--) {
       OrderSelect (l_pos_16, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumber) continue ;
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
 
모든 것이 다소간 명확합니다. 시간 내주셔서 감사합니다. belck .
 
arvis :


도와주셔서 감사합니다, belck .

여러 쌍에서 거래를 수행하는 경우 동일한 양의 이익을 포인트로 보호하는 방법을 알려주십시오. 또한 닫힌 거래도 고려해야 합니다.

그건 그렇고, 나는 또한 올바르게 계산하는 방법에 매우 관심이 있습니다. 그런 다음 이미 이렇게 하기 시작했지만 혼란스러워지기 시작했음을 이해합니다.

 double LastOpenPriceCloseOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0 ;
   int l_ticket_20 = 0 ;
   for ( int l_pos_16 = OrdersHistoryTotal( )  - 1 ; l_pos_16 >= 0 ; l_pos_16--) {
       OrderSelect (l_pos_16, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumber) continue ;
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

그리고

 double LastClosePriceCloseOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0 ;
   int l_ticket_20 = 0 ;
   for ( int l_pos_16 = OrdersHistoryTotal( )  - 1 ; l_pos_16 >= 0 ; l_pos_16--) {
       OrderSelect (l_pos_16, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumber) continue ;
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderClosePrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
 

내가 실행하는 기준은 다음과 같습니다.

- 둘 이상의 주문이 마감된 경우 총 수익성 포인트 수를 계산해야 하며 포인트를 정확히 계산해야 합니다.

이 코드에서 올바르게 수행하는 방법을 알려주십시오.

LastBuyPrice = FindLastBuyPrice();     

if (Ask - LastBuyPrice >= 25 * Point) {
      for (int l_pos_16 = OrdersTotal()  - 1; l_pos_16 >= 0; l_pos_16--) {
 OrderSelect (l_pos_16, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumberBuy) continue ;
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumberBuy && OrderType() == OP_BUY) {
         CloseThisSymbolAll();
         Print ( "Closed All due to Stop Out" );
         }
       }
     }


double FindLastBuyPrice() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0 ;
   int l_ticket_20 = 0 ;
   for ( int l_pos_16 = OrdersTotal () - 1 ; l_pos_16 >= 0 ; l_pos_16--) {
       OrderSelect (l_pos_16, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumberBuy) continue ;
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumberBuy && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}