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

 

안녕하세요! 나는 지점을 조금 되살릴 것입니다 : 코드에서 그러한 질문 :

 int stoplevel;
int MinimumUseStopLevel;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = fmax ( SymbolInfoInteger ( _Symbol ,MODE_FREEZELEVEL), SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_STOPS_LEVEL ));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = fmax (MinimumUseStopLevel, stoplevel);

컴파일할 때 "형식 변환으로 인한 데이터 손실 가능성 ..."이라는 경고가 표시됩니다. 그는 무엇을 필요로합니까? 그렇게 비판적이지는 않지만 알고 싶습니다.


Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 
Sayberix :

안녕하세요! 나는 지점을 조금 되살릴 것입니다 : 코드에서 그러한 질문 :

컴파일할 때 "형식 변환으로 인한 데이터 손실 가능성 ..."이라는 경고가 표시됩니다. 그는 무엇을 필요로합니까? 그렇게 비판적이지는 않지만 알고 싶습니다.


사이트 엔진 자체가 답변에 대한 링크를 삽입했고 명시적 유형 캐스팅의 예가 있습니다.

 //--- ускорение свободного падения
   double g= 9.8 ;
   double round_g=( int )g;
   double math_round_g= MathRound (g);
   Print ( "round_g = " ,round_g);
   Print ( "math_round_g =" ,math_round_g);
/*
   Результат:
   round_g = 9
   math_round_g = 10
*/
 
Sayberix :

안녕하세요! 나는 지점을 조금 되살릴 것입니다 : 코드에서 그러한 질문 :

컴파일할 때 "형식 변환으로 인한 데이터 손실 가능성 ..."이라는 경고가 표시됩니다. 그는 무엇을 필요로합니까? 그렇게 비판적이지는 않지만 알고 싶습니다.


경고뿐만 아니라 오류도 있습니다. 이것이 컴파일 중인 코드인지 확신합니까?

따라서 다음이 필요합니다.

   int stoplevel= 0 ;
   int MinimumUseStopLevel= 0 ;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = int ( fmax ( SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_FREEZE_LEVEL ), SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_STOPS_LEVEL )));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = int ( fmax (( int )MinimumUseStopLevel,( int )stoplevel));

오류와 경고가 없도록 코드를 이해하지 못한 것입니다.

그리고 생각해보면 따뜻한 것과 젖은 것을 섞는다.

 
Artyom Trishkin :

경고뿐만 아니라 오류도 있습니다. 이것이 컴파일 중인 코드인지 확신합니까?

따라서 다음이 필요합니다.

오류와 경고가 없도록 코드를 이해하지 못한 것입니다.

그리고 생각해보면 따뜻한 것과 젖은 것을 섞는다.

고맙습니다.

저를 많이 꾸짖지 마세요. 저는 그냥 배우는 중입니다. 다른 사람의 코드를 알아내려고 합니다. 제 생각에는 이것이 배우는 가장 빠른 방법입니다.

모든 변수가 int이고 반환 값이 symbolinfointeger를 통해 전달되는 경우 왜 그가 타입 캐스팅 을 필요로 하는지 이해가 되지 않습니다.

 
Sayberix :

고맙습니다.

저를 많이 꾸짖지 마세요. 저는 그냥 배우는 중입니다. 다른 사람의 코드를 알아내려고 합니다. 제 생각에는 이것이 배우는 가장 빠른 방법입니다.

모든 변수가 int이고 반환 값이 symbolinfointeger를 통해 전달되는 경우 왜 그가 타입 캐스팅 을 필요로 하는지 이해가 되지 않습니다.

SymbolInfoInteger()long 을 반환합니다.
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 

좋은 오후, 친애하는 프로그래머!

수동으로 개설한 포지션이나 일반적으로 다른 고문이 개설한 다른 포지션 에 상관없이 어드바이저를 포지션을 개설할 수 있는 방법을 알려주세요. 예, 마법의 도움으로 하려고 했지만 어떤 이유로 작동하지 않습니다. 코드는 다음과 같습니다.

 datetime some_time= TimeCurrent ();
extern string Symbol3 = "" ; //Инструмент (""текущий по умолчанию)
extern int P= 1 ;           //Таймфрейм
extern int MagicNumber = 100500 ;


int start()
{

int send;
                                      
double SL= 50 ;                                   
double TP= 50 ;                       
double Lots= 3 ;       

      
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
 
              
if ((Close[ 0 ]>High[ 1 ])&&(OrderMagicNumber() != MagicNumber)) 
{
send= OrderSend (Symbol3,OP_BUY,Lots,Ask, 3 ,Bid-SL* Point ,Bid+TP* Point ,MagicNumber);
}

if ((Close[ 0 ]<Low[ 1 ])&&(OrderMagicNumber() != MagicNumber))
{
send= OrderSend (Symbol3,OP_SELL,Lots,Bid, 3 ,Ask+SL* Point ,Ask-TP* Point ,MagicNumber);
}

return ( 0 );
}
 
Alexey Belyakov :

좋은 오후, 친애하는 프로그래머!

수동으로 개설한 포지션이나 일반적으로 다른 고문이 개설한 다른 포지션 에 상관없이 어드바이저가 포지션을 개설하도록 하려면 어떻게 해야 하는지 알려주세요. 예, 마법의 도움으로 하려고 했지만 어떤 이유로 작동하지 않습니다. 코드는 다음과 같습니다.


누락된 필드가 있으며 번호를 확인하기 위한 주문 선택 항목이 없습니다.

 int n = 0 ;
for ( int i = OrdersTotal (); i >= 0 ; i--) {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
       if (OrderSymbol() != _Symbol ) continue ;
       if (OrderMagicNumber() != magic) continue ;     
n++;
}

if (n == 0 ){
OrderSend ( _Symbol , _type, lot, price, 0 , sl, tp, comment, magic, 0 , clrNONE );
}
 
계정에서 돈을 인출하는 방법

 
Help .. 던졌는데 못 떼
 
Georgiy Liashchenko :


누락된 필드가 있으며 번호를 확인하기 위한 주문 선택 항목이 없습니다.

삽입됨. 하지마. 일괄적으로 열립니다. 마법 - 무시


 datetime some_time= TimeCurrent ();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P= 1 ;           //Таймфрейм
extern int MagicNumber = 100500 ;


int start()
{

int send;
                                     
double SL= 200 ;                                   
double TP= 200 ;                       
double Lots= 1 ;       

int n = 0 ;
for ( int i = OrdersTotal (); i >= 0 ; i--) 
{
       if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
       if (OrderSymbol() != "EURUSD" ) continue ;
       if (OrderMagicNumber() != MagicNumber) continue ;     
n++;
}
          
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
             
if ((Close[ 0 ]>High[ 1 ])&&(n== 0 ))
{
send= OrderSend ( "EURUSD" ,OP_BUY,Lots,Ask, 3 ,Bid-SL* Point ,Bid+TP* Point ,MagicNumber);
}

if ((Close[ 0 ]<Low[ 1 ])&&(n== 0 ))  
{
send= OrderSend ( "EURUSD" ,OP_SELL,Lots,Bid, 3 ,Ask+SL* Point ,Ask-TP* Point ,MagicNumber);
}

return ( 0 );
}