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

 
Vinin :

고맙습니다.
 
AlexSTAL :
경고

제 모국어는 우크라이나어입니다. 하지만 관심을 가져 주셔서 감사합니다.
 

돕다! 2개의 지연이 있고 그 중 하나가 Take Profit 에 의해 마감된 경우 두 번째 지연을 삭제해야 합니다. 그것을 쓰는 방법? 코드의 오류는 어디에 있습니까?

 int pos;
for (pos= 0 ; pos< OrdersTotal (); pos++)
{
if ( OrderSelect (pos, SELECT_BY_POS))
{
if (OrderClosePrice() >= OrderTakeProfit())
{
int i;
for (i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS))
{
if (OrderDelete(OrderTicket()))
{
Print ( "Ордер удален" );
       }
      }
     }
    }
break ;
   }
  }
 }
return ( 0 );
}
 

좋은 저녁입니다(이전 게시물에서 인사하는 것을 잊었습니다). 다음을 수행하는 데 사용할 기능을 제안할 수 있습니까? 어드바이저에서 현재 촛불의 표시기에 의해 주문이 시작되고 있습니다(숫자 = 9로 설정). 주문을 연 후 (표시기) 다시 그려지면 (촛불을 닫은 후에 나타나지 않음9), 나는 주문을 닫은 후 양초를 닫을 필요가 있습니다9.

 

입력 매개변수가 있습니다.

bool Mart - true이면 스톱으로 마감된 주문이 있으므로 두 배가 됩니다.

TradeInf - 거래 허가 , true인 경우 거래된 주문이 없으며 거래할 수 있음)

다음 코드가 있습니다.
if (마트 == true && TradeInf==true)
{
Alert("로트 2배");
LotS=NormalizeDouble(LotS*martin,2);
Alert("로트 크기", LotS);
}
if (마트 == false && TradeInf==true)
{
Alert("로트 리셋");
lotS=많은;
}

또한 OpenOrder 명령에서 로트 크기 = LotS입니다.

따라서 그가 손실로 마감된 주문을 찾으면 로트 크기는 -9315605757223323600이 됩니다.
왜 그런 겁니까? 어디가 실수입니까?

 

안녕하세요, 저는 다양한 원리에 따라 잔고에서 로트를 계산합니다...

결과적으로 0.2345와 같은 숫자를 얻습니다. 반올림하지 않고 두 배를 잘라낼 수 있는 방법은 다음과 같습니다.

한 자리까지 - 0.2

최대 2자 - 0.23

최대 3개 - 0.234 등 ...

 
akacuk21 :

안녕하세요, 저는 다양한 원리에 따라 잔고에서 로트를 계산합니다...

결과적으로 0.2345와 같은 숫자를 얻습니다. 반올림하지 않고 두 배를 잘라낼 수 있는 방법은 다음과 같습니다.

한 자리까지 - 0.2

최대 2자 - 0.23

최대 3개 - 0.234 등 ...


이중 로트 = NormalizeDouble (LOT,2)

로트 - 주문용

LOT - 주문 계산 공식

"2" - 소수점 이하 2자리로 반올림합니다.

 
답변 감사합니다. 하지만 NormalizeDouble 의 경우 0.29와 같은 숫자는 소수점 이하 한 자리로 반올림하면 0.3이 되며 0.2가 되어야 합니다.
 
이것은 반올림 규칙에 어긋나는 것입니다. 선배님들의 말씀을 기다리겠습니다.
 
Sys15975382 :
이것은 반올림 규칙에 어긋나는 것입니다. 선배님들의 말씀을 기다리겠습니다.

어...주님. 로트를 그렇게 쉽게 정규화할 수는 없습니다... :) 다음은 도움이 될 것입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot( double lo, bool ro=False, string sy= "" ) {
   double l, k;
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double ls=MarketInfo(sy, MODE_LOTSTEP);
   double ml=MarketInfo(sy, MODE_MINLOT);
   double mx=MarketInfo(sy, MODE_MAXLOT);

   if (ml== 0 ) ml= 0.1 ;
   if (mx== 0 ) mx= 100 ;

   if (ls> 0 ) k= 1 /ls; else k= 1 /ml;
   if (ro) l= MathCeil (lo*k)/k; else l= MathFloor (lo*k)/k;

   if (l<ml) l=ml;
   if (l>mx) l=mx;

   return (l);
}